实验环境 Linux 且安装了vsftpd这个软件
yum install vsftpd -y
a.配置匿名用户:
可以匿名登录和下载文件 可以上传文件,且上传文件的权限644 可以上传文件,且文件的所属者是anonuser 可以创建目录 可以删除文件或者删除目录 修改匿名用户的默认目录 修改匿名用户默认使用的登录从ftp修改为myftp
步骤
1、编辑配置文件/etc/vsftpd/vsftpd.conf 添加如下内容
[root@localhost vsftpd]# vim vsftpd.conf # Example config file /etc/vsftpd/vsftpd.conf # 允许匿名用户登录 anonymous_enable=YES #创建文件的权限是: 666 - 022 = 644 anon_umask=022 #允许匿名用户上传 anon_upload_enable=YES #匿名用户上传文件的用户为anonuser chown_uploads=YES chown_username=anonuser # #允许匿名用户创建目录 anon_mkdir_write_enable=YES #允许匿名的其他写的权限: 删除文件 anon_other_write_enable=YES #
2、重启服务
[root@localhost vsftpd]# systemctl restart vsftpd
3、结果
C:\Users\Administrator>ftp 192.168.10.100 连接到 192.168.10.100。 220 (vsFTPd 3.0.3) 200 Always in UTF8 mode. 用户(192.168.10.100:(none)): ftp 331 Please specify the password. 密码: 230 Login successful. ftp>
b.本地用户:
可以登录,可以上传和下载文件,可以创建目录,删除目录,删除文件
有三个本地用户:ftpuser1, ftpuser2, ftpuser3
允许ftpuser1 切出目录, 不允许其他用户切出目录
设置不允许ftpuser2登录的两种方式:
第一种在ftpusers中设置
第二种在user_list中设置
chroot_list_enable=YES | chroot_list_enable=NO | |
---|---|---|
chroot_local_user=YES | 在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未列出的用户被限制在自己的主目录内 | 所有的用户都无法切换到其他目录 |
chroot_local_user=NO | 在/etc/vsftpd/chroot_list文件中列出的用户被限制在自己的主目录内;未列出的用户可以切换到其他目录。 | 所有的用户都可以切换到其他目录(默认状态) |
步骤
1、编辑配置文件/etc/vsftpd/vsftpd.conf 添加如下内容
[root@localhost vsftpd]# vim vsftpd.conf #允许本地用户登录(Linux中的用户) local_enable=YES #写权限 write_enable=YES #权限掩码 local_umask=022 chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list #
2、添加用户
[root@localhost vsftpd]# useradd ftpuser1 [root@localhost vsftpd]# useradd ftpuser2 [root@localhost vsftpd]# useradd ftpuser3 [root@localhost vsftpd]# echo "123456" | passwd --stdin ftpuser1 Changing password for user ftpuser1. passwd: all authentication tokens updated successfully. [root@localhost vsftpd]# echo "123456" | passwd --stdin ftpuser2 Changing password for user ftpuser2. passwd: all authentication tokens updated successfully. [root@localhost vsftpd]# echo "123456" | passwd --stdin ftpuser3 Changing password for user ftpuser3. passwd: all authentication tokens updated successfully. [root@localhost vsftpd]#
3、向文件添加内容
[root@localhost vsftpd]# vim chroot_list ftpuser1 ~ "chroot_list" 1L, 9C written [root@localhost vsftpd]# vim user_list # vsftpd userlist # If userlist_deny=NO, only allow users in this file # If userlist_deny=YES (default), never allow users in this file, and # do not even prompt for a password. # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers # for users that are denied. root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody ftpuser2 ~ "user_list" 21L, 370C written [root@localhost vsftpd]# vim ftpusers # Users that are not allowed to login via ftp root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody ftpuser2 ~
4、重启服务
[root@localhost vsftpd]# systemctl restart vsftpd
5、结果
C:\Users\Administrator>ftp 192.168.10.100 连接到 192.168.10.100。 220 (vsFTPd 3.0.3) 200 Always in UTF8 mode. 用户(192.168.10.100:(none)): ftpuser1 331 Please specify the password. 密码: 230 Login successful. ftp> mkdir ftp 257 "/home/ftpuser1/ftp" created ftp> cd / 250 Directory successfully changed. ftp> delete ftp C:\Users\Administrator>ftp 192.168.10.100 连接到 192.168.10.100。 220 (vsFTPd 3.0.3) 200 Always in UTF8 mode. 用户(192.168.10.100:(none)): ftpuser2 530 Permission denied. 登录失败。 ftp>
c. 虚拟用户:
新建两个虚拟用户 vuser1, vuser2将其映射到ftpuser上
实现可以登录,可以上传,可以下载
1、编辑配置文件/etc/vsftpd/vsftpd.conf 添加如下内容
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf guest_enable=YES #映射到真实用户ftuser3 guest_username=ftpuser3 virtual_use_local_privs=YES #认证文件名 pam_service_name=virtualftp
2、创建虚拟用户文件vuser并将虚拟用户文件转换成数据库文件
#奇数行虚拟用户名,偶数行为密码 [root@localhost vsftpd]# vim vuser vuser1 123456 vuser2 123456 [root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
3、创建/etc/pam.d/virtualftp文件,并添加内容
[root@localhost pam.d]# vim virtualftp #第一列:使用的模块: #第二列:控制标记 #第三列:模块路径 #第四列:模块参数 #auth:用来对用户的身份进行识别.如:提示用户输入密码,或判断用户是否为root等 #account: 对帐号的各项属性进行检查.如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等 #required: 一票否决,表示只有返回成功才能通过 #pam_userdb.so: 指定使用的模块 #db: 传入的模块参数: 注意,不用写带的.db的后缀名,只需要写文件名即可 # 因为会自动在文件后加上.db auth required pam_userdb.so db=/etc/vsftpd/vuser account required pam_userdb.so db=/etc/vsftpd/vuser
5、重启服务并测试
[root@localhost vsftpd]# systemctl stop firewalld 在cmd中登录 C:\Users\Administrator>ftp 192.168.10.100 连接到 192.168.10.100。 220 (vsFTPd 3.0.3) 200 Always in UTF8 mode. 用户(192.168.10.100:(none)): vuser1 331 Please specify the password. 密码: 230 Login successful. ftp>
常见错误
C:\Users\Administrator>ftp 192.168.10.100 连接到 192.168.10.100。 220 (vsFTPd 3.0.3) 200 Always in UTF8 mode. 用户(192.168.10.100:(none)): vuser1 331 Please specify the password. 密码: 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 远程主机关闭连接 #改ftpuser3权限 [root@localhost home]# chmod u-w ftpuser3