centos 7 vsftpd 설치 오류

일단 현재 사용 버전

[root@centos home]# rpm -qa *-release
centos-release-7-5.1804.5.el7.centos.x86_64
elrepo-release-7.0-3.el7.elrepo.noarch
epel-release-7-11.noarch

vsftpd 설치에 관한 문서

centos 7 에 vsftpd 를 설치해서 chroot() 를 적용해서 일반 사용자들은 상위 폴더에 접속제한를 주려고 한다.

vsftpd.conf파일 안에 설정을 다음과 같이 바꿨다.

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
chroot_local_user=YES
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
  • chroot_local_user=YES … 상위폴더에 접근 제간
  • chroot_list_enable=YES … 리스트를 통해 상위접근을 하게 한다.
  • chroot_list_file=/etc/vsftpd/chroot_list … 리스트 파일 위치

500 OOPS: chroot

filezilla 를 통한 접속

상태:	연결 수립, 환영 메시지를 기다림...
응답:	220 (vsFTPd 3.0.2)
명령:	AUTH TLS
응답:	530 Please login with USER and PASS.
명령:	AUTH SSL
응답:	530 Please login with USER and PASS.
상태:	보안되지 않은 서버입니다. TLS를 통한 FTP를 지원하지 않습니다.
명령:	USER leaf
응답:	331 Please specify the password.
명령:	PASS ********
응답:	500 OOPS: chroot
오류:	치명적 오류: 서버에 연결하지 못함

에러 발생 이유

SELinux 설정 때문에 발생하였음.
그렇다고 SELinux 설정을 enforcing에서 disabled하는 행위는 최대한 피하자. 보안상 나중에 이슈가 있을 수 있으며, 나중을 위해서라도 최대한 이를 해결 해 보려고 한 것이 포스팅의 이유다.

해결책

SELinux 설정에 ftp 관련 항목을 enable 하자

일단 SELinux 에서 ftp 관련 허용 목록을 리스트 해보자

# getsebool -a | grep ftp
[root@centos /]# getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> on
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
  • allow_ftpd_anon_write on : FTP 서버가 public_content_rw_t 파일 형식으로 파일을 읽고 쓸 수 있도록 허용합니다.
  • ftp_home_dir on : FTP 서버가 사용자의 홈 디렉토리에있는 파일을 읽거나 쓸 수 있도록 허용합니다.
  • allow_ftpd_full_access : FTP 서버가 시스템의 모든 파일을 읽거나 쓸 수 있도록 허용합니다.
  • allow_ftpd_use_cifs on : FTP 서버 공개 파일 전송 서비스에 CIFS를 사용하는 것을 허용합니다.
  • allow_ftpd_use_nfs on : FTP 서버 공개 파일 전송 서비스에 NFS를 사용할 수 있습니다.

ftp에 대한 모든 허용

# setsebool -P ftpd_full_access 1

vsftpd: refusing to run with writable root inside chroot()

응답:	500 OOPS: vsftpd: refusing to run with writable root inside chroot()
오류:	치명적 오류: 서버에 연결하지 못함

vsftpd 에서 chroot내에 쓰기 권한이 없어서 있기때문에 발생한 원인이다. 이를 해결하기 위해서는 설정을 통해서 쓰기권한이 있어도 좋다는 허용을 해 주던가 아니면 폴더ㅈ에 쓰기 권한을 제거하는 방법이 있다.

vsftpd.conf 에서 쓰기 권한을 허용

vsftpd.conf 설정 변경

chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES

폴더에서 쓰기 권한을 제거

# sudo chmod u-w [사용자폴더명]

이렇게 한다면 파일을 복사해서 넣을 수 없을 것이다.

반응형

'개발 > 리눅스' 카테고리의 다른 글

synology | nginx + php70 + mariadb + wordpress  (0) 2019.02.15
CentOs7 | Vim8 설치하기  (0) 2018.12.07
firstmall plus 설치하기  (0) 2018.07.27
Amazon Linux AMI에 mysql57 설치  (0) 2018.07.24
nginx + php71 + php-fpm 설치하기  (0) 2018.06.20

+ Recent posts