kylin@kylin-vm:~$ cat /etc/.kyinfo
[dist]
name=Kylin
milestone=Desktop-V10-SP1-General-Release-2203
arch=x86_64
beta=False
time=2022-05-13 16:05:44
dist_id=Kylin-Desktop-V10-SP1-General-Release-2203-x86_64-2022-05-13 16:05:44
[servicekey]
key=0163022
[os]
to=
term=2023-08-19
kylin@kylin-vm:~$
kylin@kylin-vm:~$ sudo apt update
kylin@kylin-vm:~$ sudo apt install vsftpd
kylin@kylin-vm:~$
kylin@kylin-vm:~$ sudo systemctl enable --now vsftpd.service
kylin@kylin-vm:~$
具体方法:设置,安全中心,网络保护,防火墙,关闭。
因为 vsftpd 默认是以被动模式运行的,此时客户端通过随机端口连接服务端的随机端口(不是 20/tcp 端口)用来传输数据,所以在服务端只放行 20/tcp 、 21/tcp 端口是没有用的,而必须要关闭整个防火墙。
如果不想关闭整个防火墙,那么就需要让 vsftpd 以主动模式运行,此时服务端通过 20/tcp 端口主动连接客户端的数据端口。这样我们就只用放行 20/tcp 、 21/tcp 端口了。具体方法见第13节。
kylin@kylin-vm:~$ sudo vim /etc/vsftpd.conf
取消注释以下配置项:
#允许用户写入
write_enable=YES
#上传文件权限掩码。
#设置为022时,上传目录权限为755(777-022),上传文件权限为644(666-022)。
local_umask=022
#支持ASCII模式上传下载
ascii_upload_enable=YES
ascii_download_enable=YES
#限制用户切换到其他目录
chroot_local_user=YES
#设置编码格式
utf8_filesystem=YES
增加以下配置项:
#设置虚拟用户使用的系统用户名
guest_enable=YES
guest_username=vsftpd
#设置虚拟用户的配置文件目录
user_config_dir=/etc/vsftpd/vsftpd_virtual_user_conf
#设置虚拟用户与本地用户拥有相同的权限
virtual_use_local_privs=YES
#设置仅能访问当前登录用户的根目录
allow_writeable_chroot=YES
创建本地用户 vsftpd ,设置家目录为 /home/vsftpd,并禁止使用该用户登录操作系统。
kylin@kylin-vm:~$ sudo useradd vsftpd -md /home/vsftpd -s /usr/sbin/nologin
kylin@kylin-vm:~$
在 /etc/ 目录下 新建目录 vsftpd ,用于存放虚拟用户的的配置文件。
kylin@kylin-vm:~$ sudo mkdir /etc/vsftpd
kylin@kylin-vm:~$
在 /etc/vsftpd 目录下创建虚拟用户配置文件 vsftpd_virtual_user 。
kylin@kylin-vm:~$ cd /etc/vsftpd/
kylin@kylin-vm:/etc/vsftpd$ sudo vim vsftpd_virtual_user
kylin@kylin-vm:/etc/vsftpd$
在 配置文件 vsftpd_virtual_user 中增加以下内容:
#奇数行为用户名,偶数行为用户密码
admin
admin1234
guest
guest1234
然后为虚拟用户生成数据库文件,用于虚拟用户登录校验。
kylin@kylin-vm:/etc/vsftpd$ sudo apt update
kylin@kylin-vm:/etc/vsftpd$ sudo apt install db-util
kylin@kylin-vm:/etc/vsftpd$ sudo db_load -T -t hash -f vsftpd_virtual_user vsftpd_virtual_user_login.db
kylin@kylin-vm:/etc/vsftpd$ ls
vsftpd_virtual_user vsftpd_virtual_user_login.db
kylin@kylin-vm:/etc/vsftpd$
最后修改 vsftpd 服务的 pam 配置文件。
kylin@kylin-vm:/etc/vsftpd$ sudo vim /etc/pam.d/vsftpd
kylin@kylin-vm:/etc/vsftpd$
注释掉配置文件中所有的内容,并添加以下两行:
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_virtual_user_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_virtual_user_login
最终配置文件内容如下:
# Standard behaviour for ftpd(8).
#auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# Standard pam includes
#@include common-account
#@include common-session
#@include common-auth
#auth required pam_shells.so
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_virtual_user_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_virtual_user_login
在 /etc/vsftpd 目录下新建目录 vsftp_virtual_user_conf ,用于存放虚拟用户权限配置文件。
kylin@kylin-vm:/etc/vsftpd$ sudo mkdir vsftpd_virtual_user_conf
kylin@kylin-vm:/etc/vsftpd$
kylin@kylin-vm:/etc/vsftpd$ cd vsftpd_virtual_user_conf/
kylin@kylin-vm:/etc/vsftpd/vsftpd_virtual_user_conf$
kylin@kylin-vm:/etc/vsftpd/vsftpd_virtual_user_conf$
在 /etc/vsftpd/vsftpd_virtual_user_conf 目录中 新建 admin 用户配置文件。
kylin@kylin-vm:/etc/vsftpd/vsftpd_virtual_user_conf$ sudo vim admin
kylin@kylin-vm:/etc/vsftpd/vsftpd_virtual_user_conf$
在 admin 用户配置文件中添加以下内容:
#设置虚拟用户主目录
local_root=/data/vsftpd/
#允许写入
write_enable=YES
#允许浏览目录和下载
anon_world_readable_only=NO
#允许上传文件
anon_upload_enable=YES
#允许创建目录
anon_mkdir_write_enable=YES
#允许执行其他操作,如删除、改名
anon_other_write_enable=YES
在 /etc/vsftpd/vsftpd_virtual_user_conf 目录中 新建 guest 用户配置文件。
kylin@kylin-vm:/etc/vsftpd/vsftpd_virtual_user_conf$ sudo vim guest
kylin@kylin-vm:/etc/vsftpd/vsftpd_virtual_user_conf$
在 guest 用户配置文件中添加以下内容:
#设置虚拟用户主目录
local_root=/data/vsftpd/guest
#允许写入
write_enable=YES
#允许浏览目录和下载
anon_world_readable_only=NO
#允许上传文件
anon_upload_enable=YES
#允许创建目录
anon_mkdir_write_enable=YES
#允许执行其他操作,如删除、改名
anon_other_write_enable=YES
为虚拟用户 admin 、guest 创建主目录,并且修改主目录的属主属组、权限。
kylin@kylin-vm:~$ sudo mkdir /data/vsftpd
kylin@kylin-vm:~$ sudo mkdir /data/vsftpd/guest
kylin@kylin-vm:~$
kylin@kylin-vm:~$ sudo chown -R vsftpd:vsftpd /data/vsftpd/
kylin@kylin-vm:~$ sudo chmod -R 755 /data/vsftpd/
kylin@kylin-vm:~$
kylin@kylin-vm:~$ sudo systemctl restart vsftpd.service
kylin@kylin-vm:~$
在 /etc/vsftpd.conf 配置文件中添加以下配置项,然后重启 vsftpd 服务。
#禁用pasv模式,启用主动模式。
pasv_enable=NO
在防火墙中放行 20/tcp 、 21/tcp 端口。具体方法:设置、安全中心、网络保护、防火墙,自定义,选中 ftp 服务,然后添加 20/tcp 端口。
最后,在使用客户端连接 ftp 服务时也要记得选择成主动模式。