우분투에서 VSFTPD를 설치하고 설정하는 방법
VSFTPD (Very Secure File Transfer Protocol Daemon)는 Linux 시스템에서 FTP 서버를 구축하고 관리하기 위한 효과적인 도구 중 하나입니다.
테스트 환경
운영체제 버전 정보 확인
$ lsb_release -d
Description: Ubuntu 22.04.3 LTS
1. VSFTPD 설치
vsftpd 패키지를 설치합니다. 터미널에서 다음 명령을 사용합니다.
sudo apt-get update
sudo apt-get install vsftpd
vsftpd 버전 정보 확
$ vsftpd -v
vsftpd: version 3.0.5
2. VSFTPD 설정 파일 수정
VSFTPD의 설정은 /etc/vsftpd.conf 파일에서 관리됩니다. 이 파일을 텍스트 에디터로 열고 필요한 설정을 변경합니다. 기본적으로 대부분의 설정은 안전한 기본값으로 설정되어 있습니다.
- anonymous_enable=NO: 익명 FTP 액세스 비활성화.
- local_enable=YES: 로컬 사용자에 대한 로그인 허용.
- write_enable=YES: 로컬 사용자가 파일을 업로드할 수 있도록 허용.
- chroot_local_user=YES: 로컬 사용자를 홈 디렉토리로 제한.
- local_umask=022: 로컬 사용자에 대한 기본 UMASK 설정.
설정을 변경한 후 파일을 저장하십시오.
---
cat /etc/vsftpd.conf
# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
#
# Run standalone? vsftpd can run either from an inetd or as a standalone
# daemon started from an initscript.
listen=NO
#
# This directive enables listening on IPv6 sockets. By default, listening
# on the IPv6 "any" address (::) will accept connections from both IPv6
# and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
# sockets. If you want that (perhaps because you want to listen on specific
# addresses) then you must run two copies of vsftpd with two configuration
# files.
listen_ipv6=YES
#
# Allow anonymous FTP? (Disabled by default).
anonymous_enable=NO
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
#write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
#local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# If enabled, vsftpd will display directory listings with the time
# in your local time zone. The default is to display GMT. The
# times returned by the MDTM FTP command are also affected by this
# option.
use_localtime=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
#xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpsecure
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may restrict local users to their home directories. See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
#chroot_local_user=YES
#
# 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
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# Customization
#
# Some of vsftpd's settings don't fit the filesystem layout by
# default.
#
# This option should be the name of a directory which is empty. Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd/empty
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
#
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
#
# Uncomment this to indicate that vsftpd use a utf8 filesystem.
#utf8_filesystem=YES
---
vim /etc/vsftpd.conf
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
write_enable=YES
#user_sub_token=$USER
#local_root=/home/$USER
- write_enable=YES : 사용자에게 파일을 업로드할 권한을 부여합니다.
- user_sub_token=$USER : 사용자의 홈 디렉토리를 지정할 때 $USER 토큰을 사용합니다.
- local_root=/home/$USER/ftp : 사용자의 홈 디렉토리를 /home/$USER/ftp로 지정합니다. 사용자 이름을 통해 각 사용자의 홈 디렉토리로 전송할 수 있게 됩니다.
3. Firewall 설정
FTP 서버를 사용하려면 방화벽 규칙을 업데이트하여 FTP 포트(기본적으로 21번 포트)를 허용해야 합니다.
sudo ufw allow 21/tcp
필요한 경우 SSL을 사용할 때 990/tcp (FTPS) 및 passive mode를 사용할 때 범위로 포트를 추가해야 할 수 있습니다.
4. 서비스 시작 및 활성화
VSFTPD 서비스를 시작하고 부팅 시 자동 시작하도록 활성화합니다.
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
5. 사용자 계정 및 홈 디렉토리 설정
사용자 계정을 생성하고 FTP 서버에 액세스할 수 있도록 사용자 홈 디렉토리를 설정합니다.
- 사용자 추가
sudo adduser myuser
- 사용자 홈 디렉토리 변경
sudo usermod -m -d /path/to/directory myuser
사용자에게 로그인을 허용하려면 해당 사용자에게 FTP 액세스를 허용하도록 vsftpd.conf 파일을 구성해야 합니다.
6. VSFTPD 재시작
설정을 변경한 후 VSFTPD 서비스를 재시작하여 변경 사항을 적용합니다.
sudo systemctl restart vsftpd
VSFTPD가 설치되었고 설정되었습니다.
1. FTP 클라이언트 설치
sudo apt update
sudo apt install ftp
2. FTP 클라이언트를 실행하고 서버에 연결
- ftp 명령어 옵션
$ ftp -?
usage: ftp [-46AadefginpRtVv] [-N NETRC] [-o OUTPUT] [-P PORT] [-q QUITTIME]
[-r RETRY] [-s SRCADDR] [-T DIR,MAX[,INC]] [-x XFERSIZE]
[[USER@]HOST [PORT]]
[[USER@]HOST:[PATH][/]]
[file:///PATH]
[ftp://[USER[:PASSWORD]@]HOST[:PORT]/PATH[/][;type=TYPE]]
[http://[USER[:PASSWORD]@]HOST[:PORT]/PATH]
[https://[USER[:PASSWORD]@]HOST[:PORT]/PATH]
...
ftp -u URL FILE ...
ftp -?
3. 파일 업로드
- FTP 명령을 사용한 업로드
ftp ubuntu@192.168.56.211
- 로컬 디렉토리에서 파일 목록 표시
!ls
- 로컬 파일을 원격 서버로 전송
put datafile.txt
$ ftp ubuntu@192.168.56.211
Connected to 192.168.56.211.
220 (vsFTPd 3.0.5)
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> !ls
datafile.txt
ftp> put datafile.txt
local: datafile.txt remote: datafile.txt
229 Entering Extended Passive Mode (|||24779|)
150 Ok to send data.
100% |********************************************************************| 9 32.55 KiB/s 00:00 ETA
226 Transfer complete.
9 bytes sent in 00:00 (2.70 KiB/s)
- 원격 서버 디렉토리에서 파일 목록 표시
ls
- 원격 서버 파일을 로컬로 다운로드
get remote_file
- 로컬 디렉토리로 이동
lcd local_directory
4. 업로드 완료 확인
파일 업로드가 완료되면 FTP 클라이언트에서 성공 메시지가 표시됩니다. 또한 원격 서버의 파일 시스템에서 업로드한 파일을 확인할 수 있습니다.
파일 업로드를 완료하면 VSFTP 서버에 파일이 저장되고 필요한 경우 다운로드하거나 공유할 수 있습니다.
'리눅스' 카테고리의 다른 글
리눅스에서 SSH 액세스를 특정 사용자 또는 그룹에 대해 허용하거나 거부하는 방법 (0) | 2023.11.06 |
---|---|
우분투에서 pacemaker, corosync, pcs 패키지를 삭제하는 방법 (0) | 2023.11.03 |
PHP PDO(pdo-mysql) 모듈을 활성화하는 방법 (0) | 2023.11.01 |
CentOS 7 컨테이너 내에서 init를 사용하는 방법 (0) | 2023.11.01 |
자빅스(Zabbix) 알람을 Slack과 연동하는 방법 (0) | 2023.10.31 |