★FTP(File Transfer Protocol)
- TCP/IP 프로토콜 기반의 서버와 클라이언트 간에 파일 전송 시 사용되는 프로토콜
- 대용량 /대량 의 파일 전송에 특화 되어 있는 프로토콜
초기 FTP는 Telnet과 로그인 과정에서 평문으로 데이터가 전송되어 보안에 취약.
★FTP 보안 강화
FTPS (FTP over SSL)
- FTP의 확장된 기능으로 응용계층에서 동작하는 FTP와 전송계층 TCP사이에 보안 소켓 계층(SSL)을 추가하여 사용
SFTP(SSH)
- 서버와 클라이언트 간의 데이터 전송시 계정 정보등을 암호화 하여 보안을 강화한 프로토콜
★FTP 서비스 제공 포트
FTP 프로토콜은 TCP 20번과 21번을 사용해 서비스를 제공한다.
두개의 포트를 사용하는 이유
- 접속제어를 위한 포트와 데이터 전송을 위한 포트가 서로 다르기 때문
TCP 20 - 데이터 전송 시 사용 (DATE Port)
TCP 21 - 접속 제어를 위한 명령어 전달(Command Port)
★FTP 동작 방식
Active(능동)모드와 Passive(수동) 모드가 있다
★Active Mode
- 클라이언트는 임의의 포트(1800)를 사용해 서버의 포트 21번으로 접속을 시도한다
- 클라이언트는 서버에게 클라이언트의 포트(1801)가 몇번인지 알려준다
- 서버는 클라이언트가 알려준 포트(1801)로 접속을 시도
- 클라이언트가 접속을 허락하면 포트20번을 통해 데이터 전송이 이뤄진다.
문제점
- 서버가 클라이언트에게 접속하는 방식으로 방화벽 혹은 ISP에서 외부에서의 접속을 허용하지 않는다면
정상적인 FTP동작을 할 수 없다.
★Passive Mode
- 클라이언트에서 임의포트(1800)를 이용해 서버의 포트21번으로 연결을 시도
- 서버는 클라이언트에게 서버의 어느 포트(1024번 이후)를 사용해 데이터를 전송할지 알려준다
- 클라이언트는 서버가 알려준 포트로 접속 시도
- 서버는 클라이언트에게 정상 수신을 의미하는 메시지 보낸다. 서버포트20번은 사용하지 않는다
단점 - 서버의 방화벽은 서버의 1024번 이후의 포트도 모두 개방해야 하는 정책을 사용
- well-know 서비스는 1024번 이내에 제공되기 때문에 방화벽 정책상 그 이후의 포트 또한 모두 필터링
할수 없다는 문제가 발생하게 된다.
★VSFTP (very secure FTP)
- FTP서버용 프로그램
- 안정적이면서 빠른 속도로 서비스 제공과 뛰어난 보안적인 측면
- ASCII 모드로 파일이 전송되는 것을 금지하여 DoS 공격 방지
참고]
아스키모드 : html, htm, txt, cgi, pl, php, phtml, php3, sql, c, ph, py 등등
바이너리모드 : gif, jpg, swf, png, exe, asf, wmv, zip, rar, gzip, tar.gz 등등
아스키모드는 파일을 열었을때 번역이 되지않은것 (판독이 가능한것)
바이너리는 아스키모드와 반대로 번역이 된것 (소스판독 불가능)
html, htm, php 등등 일반적인 웹페이지 제작에 쓰이는 파일은 아스키모드, 바이너리 모드 모두 적용 가능하다.
그러나 cgi 와 같은 파일은 반드시 아스키모드를 사용해야 한다.
아스키란? (ASCII code)
미국에서 제정된 데이터처리 및 통신시스템 상호간의 정보 교환용 7bit표준 코드 ASCⅡ라고도 하는데,
이는 American Standard Codefor Information interchange(미국정보교환용표준코도)의 약칭이다.
★VSFTP 기본설정
★Server-A
yum -y install vsftpd
rpm -qa | grep vsftpd
service vsftpd start //vsftpd 서비스 데몬 시작
service vsftpd status //데몬 기동후 동작 확인
chkconfig vsftpd on //부팅 후에 자동으로 서비스가 시작 되도록 설정
chkconfig --list vsftpd //동작 런레벨 확인
ps -ef | grep vsftpd //VSFTPD 프로세스 확인
netstat -tulpn | grep 21 //netstat를 사용해 FTP서버가 포트21번이 오픈되어 서비스 제공중인지 확인
grep ftp /etc/services //FTP서버가 사용하는 포트20번과21번 정의된 파일 확인
★Anonymous 사용자 설정
- anonymous 계정으로 접속 되는 디렉토리는 /var/ftp다.
- anonymous 계정은 ftp전용 사용자로 기본적으로 내장되어 있다.
- 특별한 암호 없이도 ftp 접속이 가능하다
cat /etc/passwd | grep ftp //ftp계정확인
vi /etc/vsftpd/vsftpd.conf //vsftpd 서버의 기본 설정 파일 수정
anonymous_enable=yes //anonymous사용자들에게 다운로드를 허용
anon_upload_enable=YES //업로드를 허용
write_enable=YES //업로드를 허용한후 실제 파일 쓰기 기능을 허용
anon_mkdir_write_enable=YES //특정 디렉토리 생성을 허용
chown_uploads=YES //업로드한 모든 파일의 소유권을 변경
chown_username=ftp //업로드한 파일의 소유자를 ftp로 지정
anon_umask=077 //업로드한 파일의 기본권한을 지정
mkdir /var/ftp/upload
chown root:ftp /var/ftp/upload
chmod 773 /var/ftp/upload //파일 업로드를 할 수 있도록 허가 권한을 부여
service vsftpd restart
cp /boot/vm* /var/ftp/pub/down_test1 //다운로드 테스트에 필요한 파일을 복사
Client-Linux(VSFTP Client)
cd /tmp
cp /etc/passwd ./ //업로드에 사용될 파일을 복사
★FTP Client 설치
★Client-Linux
yum -y install ftp
ftp ftp.donghyun.com = ftp 100.100.100.110
★FTP Client 명령어
<get,put> 실습
테스트 확인 >
put으로 passwd 업로드 , 파일 생성확인
<mget,prompt> 실습
promp 질의 없이 바로 다운
★실습 문제
(1)클라이언트에서 FTP 서버 접속 후, pub디렉토리와 upload디렉토리에서 'test_dir'생성후 결과확인
(2)ls명령어를 이용하여 디렉토리 목록 출력 결과 확인
(3)클라이언트에서 pub,upload 디렉토리에서 mkdir과 ls명령어 실행이 가능하도록 설정
(1),(2)
ls 명령어 확인이 안되는것을 알수 있다.
(3)
폴더 허가권 777모드로 해줘야된다.
★FTP 접속 허용을 위한 기본설정
-리눅스 서버에 등록된 계정 사용자에게 FTP서버 접속을 허용하기 위한 설정
vi /etc/vsftpd/vsftpd.conf
local_enable=YES //로컬 계쩡 사용자의 접근 허용
write_enable=YES //파일 생성,수정 허용 여부
local_umask=022 //디렉토리=755,파일=644 권한설정
service vsftpd restart
★접속 테스트
Server-A
useradd ftp-user1
passwd ftp-user1
Client-Linux
ftp ftp.donghyun.com
Server-A
fuser -v ftp/tcp
- (프로세스 확인 명령어 fuser) ftp 서비스와 프로토콜 tcp를 조회하면 ftp-user1이라는 사용자가 접속한 PID
번호를 확인 할수 있다.
★보안 설정
vi /etc/vsftpd/ftpusers //로그인을 승인하지 않는 목록
//패스워드를 정확히 입력해도 거부
vi /etc/vsftpd/user_list //로그인을 승인하는 목록
//패스워드 입력을 묻지 않고 거부
user_list 파일에 등록되어 있더라도 ftpusers에 등록된 사용자는 접속 불가능
user_list 파일은 거부/승인 목록이 될 수 있다. (userlist_deny=YES/NO)
Yes = 등록된 사용자 ftp 거부
NO = 등록된 사용자 ftp 허용
service vsftpd restart
★Client-Linux(VSFTP Client)
ftp ftp.donghyun.com
기본설정 로그인 불가
ftpusers에 root인경우 패스워드 입력후 거부
ftpusers에 샵root 로그인 성공 ls 확인 root경로 파일들 확인
<Server-A>
useradd ftp-user2
useradd ftp-user3
passwd ftp-user2
passwd ftp-user3
ftp-user1 계정 ftp접속 불가능 설정(/etc/vsftpd/ftpusers)
ftp-user2 계정 ftp접속 가능 설정(/etc/vsftpd/user_list)
ftp-user2 접속 확인
★PAM을 이용한 로그인 제한
PAM (Pluggable Authentication Module)
- 서비스 접속 및 각종 인증에 사용되는 모듈
Pluggable-접속할 수 있는
Authentication-인증
Module-단위
(1)cat /etc/pam.d/vsftpd
-인증을 담당하는 2번째 줄 auth에서 해당 설정 확인
vsftpd의 PAM설정을 확인한다
sense=deny -> 해당 파일이 없거나 파일명이 다르면 접속을 허용
file=/etc/vsftpd/ftpusers -> 해당 파일에 등록되어 있는 사용자는 접근 금지
★VSFTP 인증절차
(1) 클라이언트가 FTP서버에 서비스 요청(로그인)
(2) VSFTP서비스가 PAM에게 인증을 요청 (위임)
- /etc/vsftpd/vsftpd.conf 설정 중 pam_service_name=vsftpd 옵션 확인 후 PAM설정 확인
(3) PAM 설정 파일 확인
- /etc/pam.d/vsftpd 파일의 모듈 및 설정 내용 확인
(4) 인증 결과를 서버에게 전달
- sense=deny, onerr=succeed
(5) FTP서버는 PAM인증 결과로 VSFTP서비스 승인/거부를 진행
★실습
-vsftpd.conf 설정 변경 후 진행
#userlist_enable=NO //주석
userlist_deny=NO
(1)/etc/vsftpd/ftpusers 파일에 ftp-user3을 추가한 후 접속을 시도한 뒤에 /var/log/secure 파일을
tail로 확인해 PAM에 의하여 인증이 실패해서 서비스 접근이 거부되었다는 메세지를 확인
(2)/etc/vsftpd/ftpusers 파일에 ftp-user3을 추가한 후 접속이 가능하도록 vsftpd PAM설정 파일수정
(3)ftp-user3접속을 성공 했다면 userlist_enable=YES로 변경하여 데몬 재시작후 로그인 시도
(4)userlist_deny=NO 옵션을 변경하여 로그인 시도
(1)
(2)
(3)
userlist_deny=NO로 하고 로그인 시도시 접속 실패 확인
userlist_deny=YES로하고 로그인 시도시 접속 성공 확인
★chroot 적용하기
vi /etc/vsftpd/vsftpd.conf //사용자가 접근 가능한 최상위 디렉토리가 자신의 홈 디렉토리로 제한된다는 의미
chroot_local_user=YES //로컬 유저에게 chroot 적용을 한다
allow_writeable_chroot=YES //자신의 홈디렉토리로의 접근을 허용한다
chroot_list_enable=YES //chroot 예외 설정을 위한 기능을 활성화 한다
chroot_list_file=/etc/vsftpd/chroot_list //모든 계쩡 사용자에게 chroot를 적용했지만 예외로 chroot기능을 적용하지
않을 사용자를 정의하기 위해 사용하는 옵션이다.
★chroot 실습
Server-A
(1)ftp-user1, ftp-user2 계정의 홈디렉토리 임의의 파일 생성
(2)vi /etc/vsftpd/chroot_list
-chroot가 적용되면 홈디렉토리 이상의 경로로 이동이 불가능하게 된다.
(3)ftp-user1 계정을 chroot_list 파일에 포함
(4)ftp-user2 계정은 포함 하지 않는다
Client-Linux
(5)ftp-user1 계정으로 FTP서버에 접속하여 현재 경로 및 리스트를 출력한다.
(6)ftp-user2 계정으로 FTP서버에 접속하여 현재 경로 및 리스트를 출력한다.
-FTP서버의 보안을 고려한다면 chroot를 사용할것을 추천
ftp-user1만 chroot 적용
Client-Linux
ftp-user1
ftp-user2
보안상 ftp-user2가 더 뛰어나 보인다
★접근과 연결제한
TCP_WRAPPER
-Xinetd 데몬에 의해 수행되는 서비스들의 접근 제어 프로그램
(1)vi /etc/vsftpd/vsftpd.conf
tcp_wrappers=YES
(2)vi /etc/hosts.deny
vsftpd:ALL
-모든 네트워크로부터 VSFTP 서버로의 접근을 금지한다는 규칙생성
(3)vi /etc/hosts.allow
vsftpd:*.donghyun.com 100.100.100.0/255.255.255.0
-도메인의 모든 호스트에 접근을 허용하고 100.100.100.0/24 대역의 네트워크의 접근도 모두 허용한다.
(4)tcpdmatch vsftpd 100.100.100.130
-vsftpd 서비스에 대해 클라이언트를 조회하면 접속이 허용(granted)되어 있음을 알수있다.
vi /etc/hosts.allow 파일의 설정을 주석처리 한후 tcpdmatch와 클라이언트 접속 테스트 결과 확인
두 파일중 /etc/host.allow 파일은 /etc/hosts.deny 파일보다 우선순위에 있어서 hosts.allow에 규칙이 먼저 해석
규칙의 순서가 아주중요
host.allow나 hosts.deny 어떤 변경을 하게 되면 네트워크 서비스를 다시 시작하지 않더라도 바로 적용
★VSFTP 보안 기능 설정 : SFTP와 FTPS
-일반적으로 FTP 서버를 이용한 파일 전송은 보안 기능이 적용되지 않는다.
-안전한 파일 전송을 위해 사용하는 방법은 SFTP와 FTPS를 사용한다
★Server-A
yum -y install openssh-server openssh
-sftp 명령어를 사용하려면 SSH패키지가 설치
vi /etc/ssh/sshd_config
-SSH 서버에 외부 프로그램을 사용하기 위해 설정하는 키워드 Subsystem에 이름 sftp와 internal-sftp를 지정
Subsystem sftp internal-sftp
- internal-sftp는 ChrootDirectory옵션을 사용해 각 사용자별로 chroot를 적용하기 위해 새롭게 만든 이름
Match Group sftp-users
- 정의된 sftp를 사용할 그룹이름과 그옵션이 정의
ChrootDirectory /home/%u
ForceCommand internal-sftp
- 그룹에 속한 사용자들은 ssh및 scp를 사용할수없고 오직 sftp만 가능 또한 chroot가 적용되 자신의 홈디렉토리를
루트 디렉토리로 인식
service sshd restart
groupadd sftp-users //SFTP 사용이 적용될 그룹 생성
useradd -g sftp-users sftp-user1
useradd -g sftp-users sftp-user2
passwd sftp-user1
passwd sftp-user2
id sftp-user1
mkdir /home/sftp-user1/test_dir
chmod -R 755 /home/sftp-user1
chown -R root:sftp-users /home/sftp-user1
-chroot를 적용하기 위해서 소유자 외에 쓰기 권한을 제거하며 디렉토리의 소유자를 변경
★Client-Linux
yum -y install openssh-clients
ssh sftp-user1@ftp.donghyun.com
-FTP 서버로 ssh 접속을 시도하면 sftp 서비스만 사용할 수 있다는 메시지와 함께 연결이 끊기게 된다
sftp sftp-user1@ftp.donghyun.com
-sftp 접속을 시도하면 정상적으로 접속이 이뤄진다
sftp sftp-user2@ftp.donghyun.com
-sftp 접속이 가능하나 디렉토리에 권한이 없어 명령어 사용에 제한이 된다
★Client-Win
filezila 접속
윈도우와 sftp-user1이 파일공유 가능하다
★SSL/TLS 이용한 FTPS 사용
-SFTP가 VSFTP 자체에 보안을 접목한 것이 아니라 SSH를 이용해 안전한 연결 및 전송을 보호하기 위해 사용된다면
FTPS는 VSFTP 서버에 SSL/TLS를 직접 적용해 FTP연결을 암호화함으로써 안전한 전송을 보장하기 위해 사용되는 프로토콜
'Server > Linux' 카테고리의 다른 글
xshell/ SAMBA (0) | 2017.05.14 |
---|---|
xshell/ NTP (0) | 2017.05.11 |
xshell/ DHCP (0) | 2017.05.06 |
xshell/ DNS3 (Slave,Master,고급기능) (0) | 2017.05.05 |
xshell/ DNS2 (도메인 설정) (0) | 2017.05.03 |