CentOS 7.x 搭建vsftpd服务
单用户配置
-
当前环境。
0 18:21:15 root@vsftpd,172.16.15.22:~ # cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
-
下载vsftpd包并安装
0 18:21:19 root@vsftpd,172.16.15.22:~ # mkdir -p /server/packages 0 18:21:58 root@vsftpd,172.16.15.22:~ # cd /server/packages 0 18:22:01 root@vsftpd,172.16.15.22:/server/packages # wget http://www.rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/vsftpd-3.0.2-28.el7.x86_64.rpm 0 18:22:08 root@vsftpd,172.16.15.22:/server/packages # rpm -ivh vsftpd-3.0.2-28.el7.x86_64.rpm
-
修改配置文件。
0 18:22:25 root@vsftpd,172.16.15.22:/server/packages # cd /etc/vsftpd/ 0 18:22:43 root@vsftpd,172.16.15.22:/etc/vsftpd # cp vsftpd.conf{,.bak} 0 18:23:20 root@vsftpd,172.16.15.22:/etc/vsftpd # egrep -v '^#|^$' vsftpd.conf.bak >vsftpd.conf 0 18:23:25 root@vsftpd,172.16.15.22:/etc/vsftpd # vim vsftpd.conf # 如下对常用的一些配置做解释。 use_localtime=YES # 使用本地时间,否则ftp中的文件会有8小时时差。 anonymous_enable=NO # 关闭匿名登录。 write_enable=YES # 允许本地用户写入。 xferlog_enable=YES # 启用记录用户上传下载的日志。 xferlog_std_format=YES # 启用日志格式化。 xferlog_file=/var/log/xferlog # 设置日志目录。 local_enable=YES # 开启本地账户登录。 local_umask=022 # 设置本地用户上传文件的默认文件掩码(022代表最终文件权限为755)。 local_root=/server/ftpdir # 设置本地用户登录后的主目录。 userlist_enable=YES # 是否启用“限制登录名单”的功能。 userlist_deny=NO # NO代表user_list名单中的用户可登录,YES代表名单中的用户不可登录。 userlist_file=/etc/vsftpd/user_list # 指定名单文件的路径,此文件默认存在。 allow_writeable_chroot=YES # 开启目录限制名单可写。 chroot_list_enable=YES # 是否启用“限制目录切换名单”功能。 chroot_local_user=YES # 限制用户只能在自己的主目录。 chroot_list_file=/etc/vsftpd/chroot_list # 指定名单文件的路径,此文件需手动创建。 listen=YES # 启用独立监听。 listen_port=50522 # 自定义监听端口。 connect_from_port_20=YES # 开启主动模式数据传输的20端口。 pam_service_name=vsftpd # pam模块的名称,默认放在/etc/pam.d/vsftpd。 tcp_wrappers=YES # 启用主机访问控制机制。 -------------------------------------------------------------------------------------------------------------------------------------------------------- # 此处对vsftpd.conf中比较绕的两块配置进行说明。 1. 关于限制登录名单功能,该功能由以下三个配置项决定: ① userlist_enable:是否启用“限制登录名单”的功能。 ② userlist_deny为YES,表示拒绝user_list文件中的用户登录;为NO表示允许user_list文件中用户的登录。 ③ userlist_file用来指定存储用户名单的文件,一个用户名占一行。 2. 关于限制目录切换名单功能,该功能由以下三个配置项决定: ① chroot_list_enable:是否启用“限制目录切换名单”功能。 ② chroot_local_user为YES,表示所有的用户都只能在设置的主目录内切换;为NO表示所有用户都可任意切换目录。 ③ chroot_list_file用来指定存储用户名单的文件,一个用户名占一行。 综上所述,以方便的理解记忆的角度,全部设为白名单,即: userlist_enable=YES、userlist_deny=NO、userlist_file中添加允许登录的用户名。 chroot_list_enable=YES、chroot_local_user=YES、chroot_list_file中添加允许跳出其主目录的用户名。 --------------------------------------------------------------------------------------------------------------------------------------------------------
-
创建ftp用户。
0 19:45:55 root@vsftpd,172.16.15.22:/etc/vsftpd # useradd -s /sbin/nologin -d /server/ftpdir shannon 0 19:46:00 root@vsftpd,172.16.15.22:/etc/vsftpd # passwd shannon # 此处注意,出于安全我创建用户使用的shell是/sbin/nologin,需要将其添加到/etc/shells文件中以表合法,否则ftp客户端登录验证会报530错误。 0 19:46:12 root@vsftpd,172.16.15.22:/etc/vsftpd # cat /etc/shells /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/tcsh /bin/csh 0 19:46:29 root@vsftpd,172.16.15.22:/etc/vsftpd # echo "/sbin/nologin" >>/etc/shells # 创建配置文件中的配置文件中的chroot_list 0 19:47:05 root@vsftpd,172.16.15.22:/etc/vsftpd # cp -p user_list chroot_list 0 19:47:14 root@vsftpd,172.16.15.22:/etc/vsftpd # >chroot_list 0 19:47:47 root@vsftpd,172.16.15.22:/etc/vsftpd # ls -l 总用量 24 -rw------- 1 root root 0 5月 11 19:51 chroot_list # 限制目录切换白名单 -rw------- 1 root root 125 10月 14 2020 ftpusers # 限制用户登录黑名单。 -rw------- 1 root root 361 10月 14 2020 user_list # 限制用户登录白名单。 -rw------- 1 root root 455 5月 11 18:25 vsftpd.conf # vsftpd的配置文件。 -rw------- 1 root root 5116 5月 11 18:22 vsftpd.conf.bak -rwxr--r-- 1 root root 338 10月 14 2020 vsftpd_conf_migrate.sh # 清空白名单,将创建的ftp用户添加到user_list中。 0 19:48:49 root@vsftpd,172.16.15.22:/etc/vsftpd # echo shannon >user_list # 在ftp主目录中创建几个文件作为测试文件 0 19:48:55 root@vsftpd,172.16.15.22:/etc/vsftpd # touch /server/ftpdir/test{1..3} 0 19:48:57 root@vsftpd,172.16.15.22:/etc/vsftpd # ll /server/ftpdir/ 总用量 0 -rw-r--r-- 1 root root 0 5月 11 20:21 test1 -rw-r--r-- 1 root root 0 5月 11 20:21 test2 -rw-r--r-- 1 root root 0 5月 11 20:21 test3
-
启动vsftpd服务.
0 19:51:17 root@vsftpd,172.16.15.22:/etc/vsftpd # systemctl start vsftpd.service 0 19:51:48 root@vsftpd,172.16.15.22:/etc/vsftpd # systemctl enable vsftpd.service 0 19:52:57 root@vsftpd,172.16.15.22:/etc/vsftpd # netstat -lntp | grep 50522 tcp 0 0 0.0.0.0:50522 0.0.0.0:* LISTEN 15189/vsftpd
-
随便找一个机器作为ftp客户端进行测试。
0 17:54:27 root@test,172.16.2.9:~ # yum -y install ftp 0 19:54:02 root@test,172.16.2.9:~ # ftp 172.16.15.22 50522 Connected to 172.16.15.22 (172.16.15.22). 220 (vsFTPd 3.0.2) Name (172.16.15.22:root): shannon 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (172,16,15,22,63,63). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 May 11 19:48 test1 -rw-r--r-- 1 0 0 0 May 11 19:48 test2 -rw-r--r-- 1 0 0 0 May 11 19:48 test3 226 Directory send OK.
多用户配置
- 说明:有时我们也会有不同用户访问不同ftp主目录的需求,配置如下。
-
修改vsftpd的配置文件。
0 14:44:05 root@vsftpd,172.16.15.22:/etc/vsftpd # vim vsftpd.conf use_localtime=YES anonymous_enable=NO write_enable=YES xferlog_enable=YES xferlog_std_format=YES xferlog_file=/var/log/xferlog local_enable=YES local_umask=022 user_config_dir=/etc/vsftpd/user_config # 指定多用户配置文件的目录 userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd/user_list allow_writeable_chroot=YES chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list listen=YES listen_port=50522 connect_from_port_20=YES pam_service_name=vsftpd tcp_wrappers=YES # 创建配置文件目录,并添加配置文件,配置文件的名字需要与用户名一致。 0 14:49:07 root@vsftpd,172.16.15.22:/etc/vsftpd # mkdir -p /etc/vsftpd/user_config 0 14:49:12 root@vsftpd,172.16.15.22:/etc/vsftpd # cd /etc/vsftpd/user_config 0 15:12:14 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # echo 'local_root=/server/ftpdir' >shannon 0 15:13:27 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # echo 'local_root=/server/ftpdir2' >shannon2 0 15:13:57 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # ll 总用量 8 -rw-r--r-- 1 root root 26 5月 12 15:12 shannon -rw-r--r-- 1 root root 27 5月 12 15:13 shannon2
-
创建shannon2用户
0 15:14:00 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # useradd -s /sbin/nologin -d /server/ftpdir2 shannon2 0 15:19:18 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # passwd shannon2 # 创建测试文件 0 15:25:53 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # touch /server/ftpdir2/info{1..3} # 将此用户添加至可登录白名单中 0 15:26:29 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # echo 'shannon2' >>/etc/vsftpd/user_list 0 15:26:40 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # cat /etc/vsftpd/user_list shannon shannon2
-
配置完成,重启vsftpd服务.
0 15:27:17 root@vsftpd,172.16.15.22:/etc/vsftpd/user_config # systemctl restart vsftpd.service
-
ftp客户端测试,实现不同ftp用户登录到不同主目录中。
0 15:34:36 root@test,172.16.2.9:~ # ftp 172.16.15.22 50522 Connected to 172.16.15.22 (172.16.15.22). 220 (vsFTPd 3.0.2) Name (172.16.15.22:root): shannon 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (172,16,15,22,63,63). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 May 11 19:48 test1 -rw-r--r-- 1 0 0 0 May 11 19:48 test2 -rw-r--r-- 1 0 0 0 May 11 19:48 test3 226 Directory send OK. ftp> close 221 Goodbye. ftp> open 172.16.15.22 50522 Connected to 172.16.15.22 (172.16.15.22). 220 (vsFTPd 3.0.2) Name (172.16.15.22:root): shannon2 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls 227 Entering Passive Mode (172,16,15,22,236,87). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 May 12 15:27 info1 -rw-r--r-- 1 0 0 0 May 12 15:27 info2 -rw-r--r-- 1 0 0 0 May 12 15:27 info3 226 Directory send OK. ftp> quit 221 Goodbye.
参考
- https://blog.51cto.com/u_14522065/2433463
- https://blog.csdn.net/hahahaxiaoyu/article/details/100582853
写作不易,转载请注明出处,谢谢~~