Ubuntu ftp 디렉토리 / 접속계정 세팅
1.디렉토리 생성
1 2 3 |
$ sudo mkdir /var/myftp |
2.계정 추가
1 2 3 4 5 6 7 8 |
sudo useradd -c myftp_20220522 -d /var/myftp -s /usr/sbin/nologin -p passwd myid -c 컴멘트 -d 계정 디렉토뢰 -s 계정사용권한 (putty 접속 없이 ftp만 사용) -p 패스워드(다시 세팅할 예정) |
3.계정 비번 새로 변경
1 2 3 4 5 6 |
$ sudo passwd myid New password: Retype new password: passwd: password updated successfully |
4.계정 생성 확인
1 2 3 4 5 6 7 8 9 10 |
$ sudo cat /etc/passwd :: 중략 :: avahi:x:108:113:Avahi mDNS daemon,,,:/run/avahi-daemon:/usr/sbin/nologin systemd-coredump:x:996:996:systemd Core Dumper:/:/usr/sbin/nologin ftp:x:109:117:ftp daemon,,,:/srv/ftp:/usr/sbin/nologin myid:x:1001:1001:myftp_20220522:/var/myftp:/usr/sbin/nologin #마지막에 생성된 것을 확인 할수 있다. |
5.디렉토리 계정 권한으로 세팅
1 2 3 4 5 6 7 8 9 |
sudo usermod -a -G www-data myid #계정 그룹설정 sudo cat /etc/group #그룹 확인 sudo chown -R myid:www-data /var/myftp #디렉토리 계정:그룹설정 sudo chmod -R 777 /var/myftp #디렉토리 모든 쓰기 권한주기 |
6.기타 설정
1 2 3 4 5 6 7 8 9 |
sudo chsh -s /usr/sbin/nologin myid #nologin 쉘변경 sudo chsh -s /bin/sh myid # sh 쉘로 변경 sudo usermod -d /var/var/myid # 계정 디렉토리 변경 sudo userdel username # 계정 삭제 sudo rm -r /home/username # 디렉토리 모두 삭제 |
Ubuntu SSL
7.SSL 설치
일반 FTP 는 암호화가 되지 않은 패킷이 오가는 등의 보안 문제가 있으니
vsftpd 의 SFTP + SSL/TLS 로 서비스를 구성해 봅니다.
아래 설치 없이 기존 설치되어 있는 SSL/TLS 를 사용해도 된다.
1 2 3 4 5 |
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/certs/vsftpd.key -out /etc/ssl/certs/vsftpd.pem #설치 디렉토리 : /etc/ssl/certs/ 로 했다. |
8.SSL RSA 쓰기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/certs/vsftpd.key -out /etc/ssl/certs/vsftpd.pem Generating a RSA private key ......................+++++ ..................................+++++ writing new private key to '/etc/ssl/certs/vsftpd.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:KR State or Province Name (full name) [Some-State]: Locality Name (eg, city) []:SEOUL Organization Name (eg, company) [Internet Widgits Pty Ltd]:MYHOME Organizational Unit Name (eg, section) []:HOME Common Name (e.g. server FQDN or YOUR name) []:HONGGILDONG Email Address []:admin@auctionpro.co.kr |
9.SSL 설치 확인
1 2 3 4 5 6 7 |
$ cd /etc/ssl/certs/ /etc/ssl/certs $ ls ::중략:: vsftpd.pem |
10.vsftpd 설치
1 2 3 |
$ sudo apt install vsftpd |
11.vsftpd 기타 명령어
1 2 3 4 5 6 7 8 9 10 11 |
$ sudo nano /etc/vsftpd.conf # config 세팅 위치 $ sudo systemctl enable vsftpd # 부팅시 자동 실행 $ sudo systemctl stop vsftpd # 중지 $ sudo systemctl start vsftpd # 시작 $ sudo systemctl restart vsftpd # 재 시작 |
vsftpd Config
12.vsftp config
일반 FTP 는 암호화가 되지 않은 패킷이 오가는 등의 보안 문제가 있으나
ftp 로만 먼저 구성해 봅니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ sudo nano /etc/vsftpd.conf listen=NO => YES #listen_ipv6=YES # 주석처리 anonymous_enable=NO #항상 NO write_enable=YES #주석풀기 chroot_local_user=YES # 주석풀기 pam_service_name=vsfptd ssl_enable=NO # ssl #아래 추가 force_dot_files=YES hide_ids=YES max_per_ip=10 max_clients=100 allow_writeable_chroot=YES |
12./etc/pam.d/vsftpd (필요시)
pam_shells.so 라인 주석처리 // 계정이 nologin 세팅시
1 2 3 4 5 |
sudo vi /etc/pam.d/vsftpd #auth required pam_shells.so |
13.vsftp 재시작
1 2 3 4 |
$ sudo systemctl stop vsftpd $ sudo systemctl start vsftpd |
3.네트워크 확인 (tcp 21포트가 안보임)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ netstat -tnlp (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN - tcp6 0 0 :::445 :::* LISTEN - tcp6 0 0 :::22 :::* LISTEN - tcp6 0 0 :::139 :::* LISTEN - |
14.tcp 21포트 접속 허용하기
1 2 3 4 5 6 7 8 9 10 |
$sudo nano /etc/vsftpd.conf pam_service_name=ftp #vsftpd에서 ftp 로 변경 SSL지원 안함 rsa_cert_file=/etc/ssl/certs/vsftpd.pem #주석처리 SSL rsa_private_key_file=/etc/ssl/certs/vsftpd.pem #주석처리 SSL ssl_enable=NO # YES => NO 변경 SSL지원 안함 |
15.네트워크 확인 (tcp 21포트 확인하기) : 일반 ftp 접속만 가능
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ netstat -tnlp (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN - tcp6 0 0 :::445 :::* LISTEN - tcp6 0 0 :::22 :::* LISTEN - tcp6 0 0 :::139 :::* LISTEN - |
16. filezilla 로 연결 확인 (보안 취약)
vsftpd 포트 변경
17.port 서버스 변경 (안해도 됩니다)
1 2 3 4 5 |
$sudo nano /etc/services ftp 21/tcp => ftp 54021/tcp # 54021로 변경 |
18. 네트워크 재시작
1 2 3 |
$sudo systemctl restart systemd-networkd |
19. vsftp config passive 포트 추가
1 2 3 4 5 6 7 8 9 10 11 |
$sudo nano /etc/vsftpd.conf # 추가 listen_port=54021 # 최초 접속 포트 pasv_min_port=54022 # passive 시작 포트 (번위가 넓어야 여러폴더/여러명 접속 가능) pasv_max_port=54030 # passive 마지막 포트 pasv_address= {Server IP} #서버IP pasv_addr_resolve=YES pasv_enable=YES log_ftp_protocol=YES |
20.vsftpd 재시작
1 2 3 |
$sudo systemctl restart vsftpd |
21.filezilla 로 ftp 연결 확인 (port 54021)
=> 접속은 되나 일반 ftp로 접속 : TLS 암호화가 지원 되지 않는다고 나옴
22. SSL/TLS 지원하기
1 2 3 4 5 6 7 8 9 10 |
$sudo nano /etc/vsftpd.conf pam_service_name=vsftpd #ftp 에서 vsftpd로 변경 SSL지원 rsa_cert_file=/etc/ssl/certs/vsftpd.pem #주석품처리 SSL rsa_private_key_file=/etc/ssl/certs/vsftpd.pem #주석품 SSL ssl_enable=YES #NO => YES 변경 SSL지원 |
23.filezilla 로 vsftpd 연결 확인 (TLS/ port 54021)
로그인은 되지 않을 것이다.
먼저 TLS1.3 을 지원하는지 확인 해야 한다.
1 2 3 4 5 |
$vsftpd -version vsftpd: version 3.0.3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$ openssl s_client -connect 127.0.0.1:54021 CONNECTED(00000003) 139885418579856:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794: --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 7 bytes and written 289 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : 0000 Session-ID: Session-ID-ctx: Master-Key: Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None Start Time: 1654820405 Timeout : 300 (sec) Verify return code: 0 (ok) --- |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$openssl s_client -connect 127.0.0.1:54021 CONNECTED(00000003) 139962708075840:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:3 --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 5 bytes and written 293 bytes Verification: OK --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- |