Infra & Security Eng/Project Implementation
vsftpd를 이용한 FTP 서버 구축 및 chroot 기반 사용자 격리 보안 설정
엔지니어 E
2026. 1. 22. 17:53
반응형

주제: FTP 서버 운영 하기
현재 FTP 서버는 사용을 잘 하지 않는 추세임
FTP 개념과 동작 원리
| 개념 대용량의 파일 전송 서비스 동작 원리 FTP는 제어 신호와 데이터 전송을 분리하여 처리하는 Out-of-Band 방식을 이용 한다. 커넥션을 2개 연다 - 서버가 사용하는 포트넘버: 20 - 데이터 / 21 - 제어 - 데이터 커넥션 모드: Active Mode(능동모드) 서버가 클라이언트에 접속을 시도함 / Passive Mode(수동 모드): 클라이언트가 서버에 접속을 시도함 현재 FTP 서버는 보안상의 이유로 사용하는 비중이 낮아짐 |
1단계: vsftpd 서버 환경 구축 및 사용자 계정 생성 실습
| 1. 서버와 클라이언트로 지정한 192번, 193번에 그룹과 계정을 생성 # groupadd -g 2500 test # useradd -g test -u 2501 test01 # useradd -g 2500 -u 2502 test02 # passwd test01 / qw12 # passwd test02 / qw12 2. 리눅스에서 서버 설치 확인과 서버 접속 테스트 서버 접속 # ftp 192.168.10.192 (접속하려는 서버 ip 주소를 입력하면 됨) *vsftpd는 기능과 크기가 작기 때문에 보안상의 문제점도 그래서 적음 vsftp 설치 (미설치의 경우 설치 진행) # dnf install -y vsftpd * # dnf list vsftpd - 설치 확인하기 ftp 서버 구동 # systemctl restart vsftpd * systemctl start vsftpd.servcie - 시스템 활성화 / systemctl enable csftpd.service - 시스템 재부팅 후 자동 실행 이를 통해 /usr/sbin/vsftpd를 메모리에 올리게 된다 |
2단계: chroot 설정을 이용한 사용자 격리(보안)
chroot 설정은 vi 편집 모드를 통해 수정 한다.
| 서버에서 작업 (192번) chroot 설정은 vi 편집 모드를 통해 수정 한다 # vi /etc/vsftpd/vsftpd.conf - 검색 기능으로 chroot 색인검색으로 chroot를 찾는다 여기서 설정 해야 할 내용 1. 접속 제한 설정 #max_clients=30 #max_per_ip=3 한 ip에서 커넥션을 3개까지 접속 허용 (ip 에서 커넥션 못열게 하는 것) * 공유기로 연결된 컴퓨터들은 공유기 하나이므로 컴퓨터 1대로 본다 ls_recurse_enable=no - yes는 허용, no는 비허용이다. 보통 no로 적는다 2. 익명 사용자 관련 설정 anonymous_enable=NO 3. Chroot 설정 #chroot_ * 명령어 적용한 것들의 앞에 있는 #는 다 지울 것 주석 처리 되므로 ex) chroot: ftp 접속하면 접속한 디렉토리는 자신의 홈 디렉토리로 접속을 하게 됨. 여기서 홈 디렉토리가 아닌 root로 인식하게 하는 설정이chroot 설정임 chroot_list_enable=YES 이고, chroot_local_user=no 일때 (계정 감옥행) vi 편집기에서 /etc/vsftpd/chroot_list 파일에 계정 감옥행 사용자 계정을 넣으면 된다. chroot_list_enable=YES 이고, chroot_local_use=yes 일때 (계정 감옥해방) /etc/vsftpd/chroot_list 파일에 vi 편집기에서 계정 감옥 해방될 사용자 계정을 넣으면 된다 * chroot_list_enable=no 이면 chroot 설정 안하는 것이므로 그냥 무시하면 된다 allow_writeable_chroot=YES chroot 적용시 반드시 명령어 적어줘야 접속이 가능하다 4. touch /etc/vsftpd/chroot_list 를 먼저 만들고, # vi /etc/vsftpd/chroot_list를 들어가서 계정 감옥행(혹은 계정 감옥해방행)을 갈 계정들을 입력 해주면 된다. ex) test 01 test 02 (계정이 여러 개일 경우 띄어쓰기가 아닌 엔터를 입력하여 진행 한다) * touch: 파일 생성 / mkdir: 디렉토리 생성 * chroot 가 적용되면 외부 디렉토리가 access 안되므로 mount 명령을 이용해서 디렉토리에 access 하면 된다 5. 수정 후에는 # systemctl restart vsftpd 를 입력하여 프로그램 재실행을 한다 |
| 클라이언트에서 작업 (193번) 1. 클라이언트(193번)에서 서버(192번)로 접속을 시도한다 # ftp 192.168.10.192 2. 위에 만들어 놓은 계정(test01, test02) 으로 로그인을 한다 3. # pwd 입력해서 현재 위치가 어디인지 확인 / #ls -al 로 목록 확인 4. ex) cd /etc 등의 명령어를 통해 내가 다른 디렉토리로 이동 할 수 있는지 없는지 확인을 한다 |
💡참고사항
| 내 서버가 아닌 다른 사람의 컴퓨터를 접속할 때 [# ftp 192.168.10.다른사람 ip] 로 명령어를 입력 - 아이디와 비밀번호 입력 - ls -al 해서 파일 확인을 해본다 |
| listen (서버에만 있는 개념임) - 누가 접속이 들어오면 내가 서비스 해주는것임. 대기하고 있는 상태를 listen이라고 함 |