在上篇博文中我们实现了匿名用户的下载和上传,但在更多情况下我们需要对访问FTP的用户进行身份验证,这就需要设置FTP用户。
vsftpd可以直接使用Linux系统的本地用户作为FTP用户,提供基于用户名/密码的登录验证。使用本地用户登录FTP服务器后,默认将位于用户自己的主目录中,且具有读写权限。如利用zhangsan用户访问ftp,那么默认将进入到的目录是/home/zhangsan。
配置文件/etc/vsftpd/vsftpd.conf中关于本地用户的默认设置:
系统默认已经允许系统用户访问,由于系统用户默认只能访问自己的用户主目录,所以自然就具备了写入的权限,写入时的umask值也是022。
下面我们先创建一个系统用户ftpuser,为其设置密码,并在它的主目录中放置一个测试文件:
# useradd ftpuser
# passwd ftpuser
# echo ‘ftp test’ > /home/ftpuser/ftptest.txt
然后在Windows客户端利用资源管理器测试访问,在空白界面点击右键之后选择“登录”,输入用户名ftpuser及密码就可以进入到用户的主目录中,并具备写入权限。
注意,系统用户虽然默认访问到的是自己的主目录,但是却可以用cd命令切换到服务器端任何具备访问权限的目录,比如切换到/etc/目录:
而这会带来很大的安全风险,所以一般都需要将系统用户禁锢于其主目录中,禁止随意切换。在vsftpd.conf文件中增加一行“chroot_local_user=YES”:
“chroot_local_user=YES”的作用就是将用户禁锢在自己的主目录中。vsftpd.conf文件对设置项目的位置没有要求,这项设置可以放在文件中的任意位置。
设置完成后,保存退出,重启服务:
# service vsftpd restart
在客户端利用命令行重新登录,此时再切换到其它目录时便会被拒绝。
如果希望系统用户在登录时也是访问ftp服务的主目录/var/ftp,可以在配置文件中再增加一行“local_root=/var/ftp”:
保存退出,重启服务。
然后在客户端再次用ftpuser的身份访问ftp服务器,此时就是进入到了ftp的主目录中。
vsftpd 配置 / chroot_local_user 与 chroot_list_enable的关系:
一开始 chroot_local_user 与 chroot_list_enable的关系很难搞清楚,找了网上的部分资料也是迷迷糊糊的,
chroot_local_user=YES #是否将所有用户锁定在主目录,YES为启用 NO禁用.(包括注释掉也为禁用)
chroot_list_enable=YES #是否启动锁定用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
chroot_list_file=/etc/vsftpd.chroot_list #禁用的列表名单 格式为一行一个用户, 如果名单里面有一个ftpuser的用户, 则ftpuser用户不会锁定在主目录,用户将可以自由切换目录.
举例:
情况一:
现在有 ftp1 ftp2 ftp3 这三个ftp的用户, 想让1跟2用户锁定主目录不允许切换到其他目录, 但是允许3用户自由切换
那么/etc/vsftpd.chroot_list列表名单如下:
ftp3
也就说chroot_local_user=YES 并且 chroot_list_enable=YES 的时候
vsftpd.chroot_list名单里面添加的是排除锁定主目录的用户名单.
情况二:
如果chroot_local_user=NO 并且 chroot_list_enable=YES 的时候
那么/etc/vsftpd.chroot_list列表名单如下:
ftp1
ftp2
情况三:
如果chroot_local_user=YES 并且 chroot_list_enable=NO 的时候
那列表名单也就不生效了,
因此满足上面的条件时, 所有的FTP用户将全部锁定在主目录.
设置用户列表
默认设置下,FTP服务器中的所有系统用户都可以访问FTP,如何来限定只有指定的用户可以访问呢?
vsftpd中提供了2个与本地用户相关的配置文件:/etc/vsftpd/ftpusers、/etc/vsftpd/user_list,这两个文件中均包含一份FTP用户名的列表,但是它们的作用截然不同。
/etc/vsftpd/ftpusers,这个文件中包含的用户账号将被禁止登录vsftpd服务器,不管该用户是否在/etc/vsftpd/user_list文件中出现。通常将root、bin、daemon等特殊用户列在该文件中,禁止用于登录FTP服务。
/etc/vsftpd/user_list,该文件中包含的用户账户可能被禁止登录,也可能被允许登录,具有在主配置文件vsftpd.conf中决定。当存在“userlist_enable=YES”的配置项时,/etc/vsftpd/user_list文件生效,如果配置“userlist_deny=YES”,则仅禁止列表中的用户账户登录,如果配置“userlist_deny=NO”,则仅允许列表中的用户账户登录。
综合来看,/etc/vsftpd/ftpusers文件为vsftpd服务提供了一份用于禁止登录的FTP用户列表,而/etc/vsftpd/user_list文件提供了一份可灵活控制的FTP用户列表。通常都是将二者相互结合使用。
比如在配置文件中进行如下设置:
“userlist_enable=YES”是系统的默认设置,表示启用userlist用户列表。
“userlist_deny=NO”是我们后来添加的,表示只允许列表中的用户登录。
这份列表中默认存在的用户与ftpusers中是一样的,这些用户都禁止登录。
我们在其中添加ftpuser
保存退出,重启服务。
然后在客户端测试,此时只有ftpuser用户才可以访问FTP。