-
[리눅스] FTP보안설정서버/리눅스 2017. 4. 25. 19:21
보안설정 목적
사용자별로 데이터 공개범위를 두어 서버의 데이터를 보호한다.
목차
*/etc/vsftpd/vsftpd.conf의 설정
-쓰기권한 해제
-쓰기권한 추가
-tcp_wrappers(tcp접근제어)
-vsftpd(user접근제어)
/etc/vsftpd/vsftpd.conf
12 anonymous_enable= 익명 계정 연결 허용 여부( anonymous )
16 local_enable= 로컬 사용자 계정 연결 허용 여부( server user ) >>(12, 16)둘다 NO하면 서버 차단
19 write_enable= 쓰기권한 허용 여부( local사용자 대상)
23 local_umask=022 어느권한으로 설정할건가요?? ( 쓰기권한 차단 )
29 #anon_upload_enable=YES 익명사용자 쓰기권한 = 주석이걸려있으므로 풀면 anonymous계정의 업로드가 허용된다.
33 #anon_mkdir_write_enable=YES 익명사용자 디렉터리 생성 여부
37 dirmessage_enable= 접속시 메세지
40 xferlog_enable=YES xferlog 사용 여부
43 connect_from_port_20=YES 20번 포트로 연결
53 #xferlog_file=/var/log/xferlog log저장경로 이게 기본값이니 바꾸고싶으면 주석풀고 바꿔서 사용한다
60 #idle_session_timeout=600 세션의 접속시간을 제한한다. 이것도 기본값이니 바꾸고 싶으면 주석풀고 바꿔서 사용한다.
63 #data_connection_timeout=120 데이터 전송시간을 제한한다 이것도 기본값이니 바꾸고 싶으면 주석풀고 바꿔서 사용한다.
67 #nopriv_user=ftpsecure anonymous 사용자를 ftpsecure사용자로 처리한다.
100 #chroot_local_user= 상위 디렉터리 접근 거부 여부
101 #chroot_list_enable= 상위 디렉터리 예외 리스트 사용 여부
103 #chroot_list_file=/etc/vsftpd/chroot_list 위의 설정에서 제외될 사용자 계정 리스트 파일( 관리자만들어주는것 같다 )
114 listen=NO (ftp동작상태) init 상태 (다른 데몬에의해 ftp데몬이 동작할때 변경)
123 listen_ipv6=YES (ftp동작상태) Standalone 상태 (ftp데몬이 혼자 동작하는상태)
125 pam_service_name=vsftpd PAM 인증시 파일 이름 지정
126 userlist_enable=Yes 사용자 계정 접근제어 목록 사용여부
127 tcp_wrappers=Yes tcp_wrapper 접근제어 사용여부( 호스트 ip를 가지고 접근하는 것 )
local사용자로로 접속하게 되면 시작디렉터리는 홈디렉터리이다.
홈디렉터리의 상위디렉터리는 모든유저들의 홈디렉터리가 보관된 디렉터리이므로 어떤유저가 있는지 노출된다.
#모든 사용자의의 상위 디렉터리 이동막기 (쓰기권한해제)
#>vi /etc/vsftpd/vsftpd.conf
100 #chroot_local_user=YES >> 주석해제(#제거)
#>systemctl restart vsftpd
>> ftp의 버전이 높아지면서 보안이 강화되었다.
>> 이 옵션을 실행히시키면 쓰기권한도 같이 막혀버린다.
>> 따라서 유저의 홈디렉터리의 쓰기권한(O)과 FTP쓰기권한(X)가 충돌을 일으켜 login failed발생한 것이다.
>> 로그인하려는 사용자의 홈디렉터리에서 쓰기권한을 해제하자.
#>chmod 500 ~admin01 (로그인하려는 사용자)
>>로그인 하면 성공적으로 로그인되었다.
>>홈디렉터리에서 시작하지만 작업공간은 "/"은 이렇게 뜬다.
>>하지만 이상황은 다운로드만 가능한 상황이다. 다시 쓰기 권한을 주고 ftp설정파일에서 옵션하나를 추가한다.
#모든 사용자의의 상위 디렉터리 이동막기 (쓰기권한설정)
#>chmod 700 ~admin01
#>vi /etc/vsftpd/vsftpd.conf
104 allow_writeable_chroot=YES : 104 번에 옆과 같이 쓰기권한을 작성해준다. 다시로그인
:wq
#>systemctl restart vsftpd
/etc/vsftpd/vsftpd.conf
#>vi /etc/vsftpd/vsftpd.conf
100 #chroot_local_user=YES
101 chroot_list_enable=YES
103 chroot_list_file=/etc/vsftpd/chroot_list
104 allow_writeable_chroot=YES
:wq
#>systemctl restart vsftpd
>> 101, 103 주석을 해제후 104번에 쓰기권한 추가한다.
>> 데몬 재시작
/etc/vsftpd/chroot_list
#>/etc/vsftpd/chroot_list
1 admin01
:wq
>> 허용할 계정을 입력하고 나온다.
>>다른 계정은 상위디렉터리로 이동이 가능하다.
/etc/vsftpd/vsftpd.conf
#>vi /etc/vsftpd/vsftpd.conf
100 chroot_local_user=YES
101 chroot_list_enable=YES
103 chroot_list_file=/etc/vsftpd/chroot_list
104 allow_writeable_chroot=YES
:wq
#>systemctl restart vsftpd
>> 100, 101, 103 주석을 해제후 104번에 쓰기권한 추가한다.
>> 데몬 재시작
/etc/vsftpd/chroot_list
#>/etc/vsftpd/chroot_list
1 admin01
:wq
>> 허용할 계정을 입력하고 나온다.
TCP_WRAPPERS (TCP접근제어)
1) tcp_wrappers=YES : TCP( 로컬 ip로 이용하는 접근에 대한 설정, 기본값이 YES이다. )
/etc/hosts.allow : 허용 할 ip
/etc/hosts.deny : 거부 할 ip
ip에는 네트워크 대역이 올수도 있다.
/etc/hosts.allow : [데몬] : [허용할 ip]
vsftpd : 100.100.100. #100.100.100 대역전체 허용
:wq
ALL : ALL >> 모든 서비스에 대한 전체허용
/etc/hosts.deny: [데몬] : [거부할 ip]
vsftpd : ALL #vsftpd데몬에 대한 전체허용
:wq
우선순쉬 : allow > deny ( allow에서 ALL로 다 열어놓으면 deny파일이 쓸모가 없어지는것이다. )
#deny만 설정하고 allow 설정안했을때
421 Service not available : 서비스를 하지 않습니다.라고 뜨면서 호스트가 막혀있는것을 확인 할 수 있었다.
VSFTPD ( userlist 접근제어 )
126 userlist_enable=YES
/etc/vsftpd/user_list : 리스트에 있는 사용자를 전부 접근거부한다.
>> 그래서 root로 로그인을 했을때 권한없음이 발생한 것이다.
#>vi /etc/vsftpd//user_list
~~~
~~~
~~
admin01 : 로그인할 계정 추가
:wq
이렇게 되면 root계정에서 접속하려던 것처럼 530 Permission denied에러가 발생한다.
#user_list에 적힌 사용자만 허용하고 싶을때.
#>vi /etc/vsftpd/vsftpd.conf
127 userlist_deny=NO : 한줄 추가
:wq
#>systemctl restart vsftpd
다시 로그인
>> userlist_deny=NO 한줄 추가하므로써 user_list에 있는 목록들은 전부 허용가능한 계정으로 바뀐것이다.
그래도 아직 root계정은 로그인 되지않는다.
PAM : Plugablle Athorization Module
어떤것에 대한 인증을 하는 모듈로써 이 모듈로 접근제어를 시도한다.
125 pam_service_name=vsftpd
#>vi /etc/pam.d/vsftpd
:q
다른것들은 잠시 접어두고 이 부분을 보면 된다.
deny file=/etc/vsftpd/ftpusers : 권한거부에 해당하는 유저들을 모아둔 파일이다.
#>vi /etc/vsftpd/ftpusers
root (dd)
:wq
user_list에 있던 사용자들은 여기에 다있었다. 여기에서도 2중으로 제어를 하고있었기에 root계정은 로그인이 되지않았던것이다.
여기서 root를 지워주면 root 계정으로 로그인이 가능하다.
client#>ftp ip
원래 관리자같은경우는 잘 안열어주기에 2중으로 제어했던것 같다.
[Active] : 고유의 20번 21번 포트로 서버가 클라리언트한테 데이터포트접속에 대한 접속여부를 물어본다.
이때 방화벽을 해제해야하며 노출되는 순간 보안에 위협을 받는다.
#passive Mode 해제
#>vi /etc/vsftpd/vsftpd.conf
pasv_enable=NO #맨아래에 추가:wq
#>systemctl restart vsftpd
>>맨아래에 pasv_enable=NO 라인을 추가한다.
#client 접속 ( 옵션 -A 사용 )
client#>ftp -A ip
#>dir : 그냥 명령어를 보내기 위함
option -A : active mode
연결된 포트를 확인한다.
server#>ss -ant
active모드로써 20번포트와 21번포트가 열려있는것을 확인할 수 있다.
[Passive] : 서버가 클라이언트에게 묻는 고유의 포트를 여는것을 방지하기 위해
클라이언트측에서 21번 포트로 랜덤의 포트번호를 전송하므로써 서버가 클라이언트에게 묻는상황을 만들지않는다.
MIN~MAX 포트번호를 지정해서 열어놓는다. ( 데이터통신포트 )
이때 최소 포트번호는 1024이상이며 높은 번호의 포트를 열어야한다. ( 아래포트는 이미 다사용중이므로 충돌방지 )
#passive Mode 설정
#>vi /etc/vsftpd/vsftpd.conf
pasv_enable=YES #맨아래에 추가pasv_min_port=4000
pasv_max_port=4100
:wq
#>systemctl restart vsftpd
#client접속
client#>ftp ip
#>dir : 그냥 명령어를 보내기 위함
default가 passive 모드
연결된 포트를 확인한다.
server#>ss -ant
20번의 고정포트가 풀리면서 설정했던 포트중 하나가 사용되었다.
네트워크 대역대 설정방법
100.100.100. : 100.100.100.1 ~ 100.100.100.254 까지의 ip (0과 255는 예약ip)
100.100.100. EXCEPT 100.100.100.3 : 100.100.100.1 ~ 100.100.100.254 에서 100.100.100.3을 제외한 모든 ip
100.100.100.1/255.255.255.0 : netmask사용법
100.100.100.1/24 : prefix 사용법
'서버 > 리눅스' 카테고리의 다른 글
[리눅스] Telnet (0) 2017.04.26 [리눅스] xinetd ( 서비스관리 데몬 ) (0) 2017.04.26 [리눅스] FTP (0) 2017.04.24 [리눅스]Quota (0) 2017.04.20 [리눅스] 오토마운트 (0) 2017.04.20