麒麟桌面系统搭建ftp服务

1. 系统环境

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:~$

2. 使用场景

  • ftp 根目录为 /data/vsftpd;
  • admin 用户可以访问 ftp 根目录 /data/vsftpd/ ,拥有全部权限;
  • guest 用户可以访问 ftp 子目录 /data/vsftpd/guest/,拥有全部权限;

3. 安装 vsftpd 服务

kylin@kylin-vm:~$ sudo apt update
kylin@kylin-vm:~$ sudo apt install vsftpd
kylin@kylin-vm:~$

4. 设置 vsfpd 服务开机自启动

kylin@kylin-vm:~$ sudo systemctl enable --now vsftpd.service
kylin@kylin-vm:~$

5. 关闭系统防火墙

具体方法:设置,安全中心,网络保护,防火墙,关闭。

因为 vsftpd 默认是以被动模式运行的,此时客户端通过随机端口连接服务端的随机端口(不是 20/tcp 端口)用来传输数据,所以在服务端只放行 20/tcp 、 21/tcp 端口是没有用的,而必须要关闭整个防火墙。

如果不想关闭整个防火墙,那么就需要让 vsftpd 以主动模式运行,此时服务端通过 20/tcp 端口主动连接客户端的数据端口。这样我们就只用放行 20/tcp 、 21/tcp 端口了。具体方法见第13节。

6. 修改 vsftpd 服务配置

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

7. 创建本地用户

创建本地用户 vsftpd ,设置家目录为 /home/vsftpd,并禁止使用该用户登录操作系统。

kylin@kylin-vm:~$ sudo useradd vsftpd -md /home/vsftpd -s /usr/sbin/nologin
kylin@kylin-vm:~$

8. 创建虚拟用户

在 /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

9. 设置虚拟用户权限

在 /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

10. 创建虚拟用户主目录

为虚拟用户 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:~$

11. 重启 vsftpd 服务

kylin@kylin-vm:~$ sudo systemctl restart vsftpd.service 
kylin@kylin-vm:~$

12. 客户端访问

  • 使用 FTP 客户端访问:

admin 用户登录

linux服务器麒麟V10redis搭建 麒麟系统搭建ftp_运维

guest 用户登录,此时主目录为guest目录。

linux服务器麒麟V10redis搭建 麒麟系统搭建ftp_运维_02

  • 使用 文件管理器访问:

admin 用户登录

linux服务器麒麟V10redis搭建 麒麟系统搭建ftp_linux_03

guest 用户登录,此时主目录为guest目录。

linux服务器麒麟V10redis搭建 麒麟系统搭建ftp_ubuntu_04

13. 设置 vsftpd 服务为主动模式

在 /etc/vsftpd.conf 配置文件中添加以下配置项,然后重启 vsftpd 服务。

#禁用pasv模式,启用主动模式。
pasv_enable=NO

在防火墙中放行 20/tcp 、 21/tcp 端口。具体方法:设置、安全中心、网络保护、防火墙,自定义,选中 ftp 服务,然后添加 20/tcp 端口。

最后,在使用客户端连接 ftp 服务时也要记得选择成主动模式。