在上篇博文中我们实现了匿名用户的下载和上传,但在更多情况下我们需要对访问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的主目录中。
设置用户列表
默认设置下,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。
本文转自 yttitan 51CTO博客,原文链接:http://blog.51cto.com/yttitan/1218577