警告
本文最后更新于 2020-12-24 09:51,文中内容可能已过时。
一、建立用户数据文件
vim /etc/vsftpd/vsftpd.user
1
2
3
4
5
6
7
8
9
10
| user1
123
user2
123
user3
123
user4
123
user5
123
|
格式: 一行用户一行密码
转换为db文件
1
2
| db_load -T -t hash -f /etc/vsftpd/vsftpd.user /etc/vsftpd/vsftpd.db
chmod 400 /etc/vsftpd/vsftpd.db # 设置只读权限
|
二、创建ftp映射用户和数据存放目录
1
2
3
| mkdir /data/ftp -p
useradd -s /sbin/nologin -d /data/ftp/ ftp_user
chown -R ftp_user:ftp_user /data/ftp
|
三、建立pam认证文件
vim /etc/pam.d/vsftpd.pam
1
2
| auth required pam_userdb.so db=/etc/vsftpd/vsftpd
account required pam_userdb.so db=/etc/vsftpd/vsftpd
|
四、创建用户配置目录
mkdir /etc/vsftpd/users/
五、修改参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # 允许在家目录下操作
allow_writeable_chroot=YES
# vsftpd使用的PAM服务的名称
pam_service_name=vsftpd.pam
# 将所有非匿名用户归类为访客登录,将访客重新映射到guest_username参数指定的用户
guest_enable=YES
# 映射的用户
guest_username=ftp_user
# 用户的配置目录
#如果您将user_config_dir设置为/etc/vsftpd/users/,然后以用户"chris"的身份登录,那么vsftpd将在会话期间应用/etc/vsftpd/users/chris文件中的设置。
user_config_dir=/etc/vsftpd/users/
|
默认情况下虚拟用户使用的是匿名用户权限,需要注意配置冲突的问题。最好在主配置文件中最小化配置,将虚拟用户的配置单独配置到user_config_dir指定的目录中
可以通过virtual_use_local_privs
参数修改虚拟用户使用本地用户权限
六、创建虚拟用户
vim /etc/vsftpd/users/user1
注意用户名和vsftpd.user的一致
1
2
3
4
| # 允许上传
anon_upload_enable=YES
# 默认权限,755和644
anon_umask=022
|
客户端测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # 上传下载和文件权限没问题
[soulchild@MBP test111]$ lftp 10.0.0.13 -u user1,123
lftp user1@10.0.0.13:~> !ls
aaa fun1 fun2 fun3 num4.sh
lftp user1@10.0.0.13:~> put fun1
20 bytes transferred
lftp user1@10.0.0.13:/> ls
-rw-r--r-- 1 1003 1003 20 Dec 23 10:11 fun1
lftp user1@10.0.0.13:/> get fun1 -o fun1-remote
20 bytes transferred
lftp user1@10.0.0.13:/> !ls
aaa fun1 fun1-remote fun2 fun3 num4.sh
# 创建文件夹会失败
lftp user1@10.0.0.13:/> mkdir my_user1
mkdir: Access failed: 550 Permission denied. (my_user1)
|
创建另一个用户
vim /etc/vsftpd/users/user1
1
2
| # 允许创建文件夹
anon_mkdir_write_enable=YES
|
客户端测试
1
2
3
4
5
6
7
8
9
10
11
| # 可以创建文件夹
lftp user2@10.0.0.13:/> ls
-rw-r--r-- 1 1003 1003 20 Dec 23 10:11 fun1
lftp user2@10.0.0.13:/> mkdir test
mkdir ok, `test' created
lftp user2@10.0.0.13:/> ls
-rw-r--r-- 1 1003 1003 20 Dec 23 10:11 fun1
drwx------ 2 1003 1003 6 Dec 23 10:17 test
# 不允许上传
lftp user2@10.0.0.13:/> put fun3
put: Access failed: 550 Permission denied. (fun3)
|
其他参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| # 允许匿名用户上传文件
anon_upload_enable=YES
# 允许匿名用户创建目录,必须对父目录有写权限才能创建
anon_mkdir_write_enable=YES
# 允许匿名用户执行除上传和创建目录之外的写操作,例如删除和重命名。
anon_other_write_enable=YES
# 匿名用户的最大传输速度限制,单位byte。1048576Byte=1MB
# anon_max_rate=1048576
# 文件(夹)创建的默认权限。
文件夹777-022=755,默认权限就是drwxr-xr-x
文件666-022=644,默认权限就是-rw-r--r--
anon_umask=022
# 匿名用户的根目录
anon_root=/var/ftp/
# 用户变量,当前登录用户赋值给$USER(主配置文件配置)
user_sub_token=$USER
# 如果想每个用户到自己的目录,可以做如下配置
local_root=/data/ftp/$USER
|
更多参数:http://vsftpd.beasts.org/vsftpd_conf.html