系统环境:
[root@RHCE ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@RHCE ~]# uname -r
3.10.0-327.el7.x86_64
[root@RHCE ~]# ip addr show enp0s8 | awk 'NR==3{print $2}'
192.168.235.36/24
安装vsftpd:
[root@RHCE ~]# yum install -y vsftpd
vsftpd 虚拟用户配置 :
[root@RHCE ~]# vim /etc/vsftpd/vsftpd.conf
#修改为如下值
[root@RHCE ~]# cat /etc/vsftpd/vsftpd.conf | grep -v "#" | grep -v "^$"
anonymous_enable=NO #关闭匿名访问
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.vu #修改pam认证文件
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES #开启虚拟用户功能
guest_username=virtual #虚拟用户映射的本地用户
user_config_dir=/etc/vsftpd/viruser.d/ #虚拟用户的配置文件存放目录
allow_writeable_chroot=YES
#一些被注释默认配置没有显示
[root@RHCE ~]# mkdir /etc/vsftpd/viruser.d
#创建虚拟用户
[root@RHCE vsftpd]# cat /etc/vsftpd/vuser.txt
abc #用户名
123 #密码
asd
123
#创建本地用户
[root@RHCE vsftpd]# adduser -s /sbin/nologin -d /var/ftpvir virtual
[root@RHCE vsftpd]# chmod 777 /var/ftpvir
[root@RHCE ~]# cd /etc/vsftpd/
[root@RHCE vsftpd]# db_load -T -t hash -f vuser.txt vuser.db
[root@RHCE vsftpd]# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
#创建PAM认证文件
[root@RHCE vsftpd]# cat /etc/pam.d/vsftpd.vu
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
#创建测试文件
[root@RHCE vsftpd]# echo "hello" > /var/ftpvir/test.txt
[root@RHCE vsftpd]# chown virtual.virtual /var/ftpvir/test.txt
#开启服务
[root@RHCE vsftpd]# systemctl start vsftpd
#安装ftp客服端
[root@RHCE vsftpd]# yum install -y ftp
#用虚拟用户 abc 登陆 密码:123
[root@RHCE vsftpd]# ftp 192.168.235.36
Connected to 192.168.235.36 (192.168.235.36).
220 (vsFTPd 3.0.2)
Name (192.168.235.36:root): abc
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 (192,168,235,36,107,239).
150 Here comes the directory listing.
-rw-r--r-- 1 1000 1000 6 Mar 27 12:10 test.txt
226 Directory send OK.
ftp>
#登陆成功!
#设置上传权限
[root@RHCE vsftpd]#mkdir /etc/vsftpd/viruser.d/
[root@RHCE vsftpd]# echo "anon_upload_enable=YES" > /etc/vsftpd/viruser.d/abc
[root@RHCE vsftpd]# cat /etc/vsftpd/viruser.d/abc
anon_upload_enable=YES
[root@RHCE vsftpd]# systemctl restart vsftpd
#测试上传权限
[root@RHCE vsftpd]# ftp 192.168.235.36
Connected to 192.168.235.36 (192.168.235.36).
220 (vsFTPd 3.0.2)
Name (192.168.235.36:root): abc
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put #连按两下Tab建可以查看当前目录(登录ftp时,所在的目录)下有什么文件。
ftpusers viruser.d/ vsftpd_conf_migrate.sh vuser.txt
user_list vsftpd.conf vuser.db
ftp> put vuser.txt
local: vuser.txt remote: vuser.txt
227 Entering Passive Mode (192,168,235,36,147,170).
150 Ok to send data.
226 Transfer complete.
16 bytes sent in 9e-06 secs (1777.78 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (192,168,235,36,23,86).
150 Here comes the directory listing.
-rw-r--r-- 1 1000 1000 6 Mar 27 12:10 test.txt
-rw------- 1 1000 1000 16 Mar 27 12:21 vuser.txt
226 Directory send OK.
ftp>
#上传成功
更多权限在 man 5 vsftpd.conf 可以查看。