일단 현재 사용 버전
[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 |