系统用户是指在
FTP
服务器上拥有系统账号的用户,这些用户只要设置了密码,就可以直接用来访
问FTP
服务,如果没有密码,就不能访问FTP服务。在/etc/passwd目录下的用户都是系统用户。
有时可能会遇到一些意外情况:有的系统用户不允许登录系统(登录Shell
为
/sbin/nologin
),那么
这样的用户也无法访问
FTP
。这时可以查看
/etc/shells文件,确认其中是否含有“/sbin/nologin
”,如
果没有的话,将“
/sbin/nologin
”添加到文件中,然后所有设置了密码的系统用户,无论其是否能够
登录系统,都可以访问FTP
服务。
/sbin/nologin :就是在这里面的用户不管有没有密码,都可以访问FTP服务器,但是禁止用户登录
系统( FTP 服务器)。
由于系统用户在访问
FTP
服务时所使用的密码就是用户本身的密码,一旦密码泄露或是被黑客成功
暴力破解,那么黑客不仅可以用这个账号和密码来访问 FTP
服务,而且还可以来登录FTP
服务
器。所以在使用系统用户访问
FTP
服务时,强烈建议将用户的登录 Shell 设置为
/sbin/nologin
,
禁止该用户登录系统,而只能用于访问
FTP
。
下面将介绍如何配置系统用户访问
FTP
,并进行相关设置。
1.访问用户家目录
当你进入到 FTP 服务器,默认情况是在自己的家目录下,且 FTP 服务允许系统用户访问并具有上
传,删除权限,文件的上传位置就是每个用户的家目录。
下面我们创建一个系统用户
ftpuser
,为其设置密码,并在它的家目录中放置一个测试文件。
[root@server ~]# useradd ftpuser[root@server ~]# echo 123 | passwd --stdin ftpuser[root@server ~]# echo ‘ftp test’ > /home/ftpuser/ftptest.txt
2.访问指定目录
如果希望系统用户能够统一访问 FTP 的主目录 /var/ftp 或者其他目录,而不是自己的家目录,
在/etc/vsftpd/vsftpd.conf配置文件
local_enable=YES //允许系统用户访问write_enable=YES //允许所有用户上传删除local_root=/var/ftp //系统用户在访问 FTP 时是统一访问到指定的位置(/var/ftp)
在客户端再次用ftpuser的身份访问FTP服务,此时就是进入到了FTP的主目录中。
默认情况下,系统用户对
FTP主目录是没有上传权限的。如果需要系统用户具有上传权限,从配置
文件和操作系统两个层面进行设置。
这里不建议对整个 FTP 主目录进行权限设置,而是应在主目录中先创建一个子目录,然后再对这
个子目录设置写入权限。
下面仍是通过设置 ACL 的方式赋予 ftpuser 用户对 /var/ftp/pub 目录具有rwx 权限。
[root@server ~]# setfacl -m u:ftpuser:rwx /var/ftp/pub
3.禁锢用户于指定目录
默认情况下,当以系统用户的身份访问
FTP
服务时,虽然访问到的是自己的家目录或是指定的
FTP
主目录,但是却可以用
cd
命令切换到服务器端任何自己具有访问权限(读取和执行权限)的
目录,比如切换到 /etc/
目录。
而这会带来很大的安全隐患,所以一般都需要将系统用户禁锢于指定的目录中,禁止其随意切
换。禁锢用户需要用到设置项“chroot_local_user=YES”
chroot_local_user=YES //启动禁锢用户
需要注意的是,在vsftpd.conf配置文件中启用了“chroot_local_user=YES”配置项之后,如果系统
用户对所访问的FTP主目录具有写入权限,则会拒绝该用户登录。
比如在 vsftpd.conf 配置文件中将配置项 “
local_root=/var/ftp
” 注释掉,同时保留
“chroot_local_user=YES
” 配置项,这样用户在访问
FTP
时就会访问自己的家目录,同时还会被禁
锢于自己的家目录中。
如果我们确实需要让用户对FTP主目录具有写入权限,那么可以在vsftpd.conf配置文件中添加新的
设置项
allow_writeable_chroot=YES //主目录具有写入权限
或者可以通过配置chroot_list列表来禁锢部分指定的用户
chroot_list_enable=YES //启用 chroot_list功能
chroot_list_file=/etc/vsftpd/chroot_list //指定列表文件(禁锢用户名单)
将这两个配置项启用之后,我们只需将需要禁锢的用户添加到列表文件中即可。另外在配置文件中
我们还需要将“chroot_local_user=YES
”配置项注释。
然后我们需要手动来创建chroot_list文件,并在其中添加student用户进行测试。
[root@Server ~]# vim /etc/vsftpd/chroot_liststudent
重启服务之后,在客户端进行验证,此时只有 student 用户会被禁锢,而其他用户不受影响。
另外需要说明的是,
如果在启用
chroot_list
的同时还启用了 “
chroot_local_user=YES
” 设置项,那
么此时 chroot_list
就成为了白名单
,只有该文件中的用户不被禁锢,除此之外的其他用户会被全部
禁锢。
4.设置访问用户列表
默认设置下,
FTP
服务器中的所有可以登录系统并且设置了密码的系统用户都可以访问 FTP
服
务,如果我们希望能够限定只有指定的用户才可以访问,那么就可以来设置访问用户列表。
vsftpd
默认提供了两个访问用户列表文件:
/etc/vsftpd/ftpusers
、
/etc/vsftpd/user_list
,这两个文件
中均包含了一份 FTP
用户名的列表,但是它们的作用截然不同:
/etc/vsftpd/ftpusers
:
黑名单,该目录下的用户账号将被禁止访问 FTP服务,无论该用户是否在另
一个文件
/etc/vsftpd/user_list
中出现。通常将 root、
bin
、
daemon
等特殊用户列在该文件中,禁止
他们访问
FTP
。
/etc/vsftpd/user_list
:
这个文件可以作为白名单,也可以作为黑名单,也就是说该文件中包含的用
户账号可能被禁止登录,也可能被允许登录,使用起来比较灵活。
具体如何应用需要在主配置文件vsftpd.conf
中设定:当存在 “
userlist_enable=YES
”的配置项时(该
设置项默认存在并已启用),表示 user_list文件生效,然后再添加设置项“
userlist_deny=YES
”,
表示将该文件作为黑名单使用,禁止文件中的用户登录;如果添加设置项“
userlist_deny=NO
”,则
表示将该文件作为白名单使用,允许文件中的用户登录。当然
通常情况下都是将user_list文件作为
白名单来使用
的。
假如我们希望只允许
ftpuser
用户访问
FTP
,那么可以进行如下设置。
[root@server ~]# vim /etc/vsftpd/vsftpd.confuserlist_enable=YES # 默认设置,表示启用 userlist 用户列表。userlist_deny=NO #手动添加的配置项,表示只允许列表中的用户登录。
然后修改
/etc/vsftpd/user_list
用户列表文件,该文件中默认存在的用户与
ftpusers
文件中是一样的,
这些用户都禁止登录。我们在文件尾部添加允许登录的用户账号ftpuser
:
将服务重启之后,在客户端进行测试,此时就只有ftpuser用户可以访问FTP。