网上好多在那解释关于vsftpd用户登陆后可以显示上层目录(包括根目录)等的文件和各种资源,这一点在数据文件存储内是很大的忌讳,所以需要一些个配置本地限制来对访问vsftpd的客户进行文件夹控制。
进入vsftpd.conf文件内的匿名访问和匿名写入等的配置给取消掉(No掉)
11 # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
12 anonymous_enable=NO
13 #
vsftpd 3.0.2版本的配置文件vsftpd.conf中的第12行把YES改成NO。
然后将匿名的访问配置给NO掉,不允许匿名ftp。
把本地的chroot访问配置给开启,把井号给注释掉:
95 # You may specify an explicit list of local users to chroot() to their home
96 # directory. If chroot_local_user is YES, then this list becomes a list of
97 # users to NOT chroot().
98 # (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
99 # the user does not have write access to the top level directory within the
100 # chroot)
101 chroot_local_user=YES
102 chroot_list_enable=YES
103 # (default follows)
104 chroot_list_file=/etc/vsftpd/chroot_list
105 #
分别是开启本地用户,下面的chroot_list_file路径会发现在相同的vsftpd文件目录下,但是却没有这个文件,不用担心,这个文件是我们自己创建的:
[root@www ~]# ll /etc/vsftpd/
总用量 20
-rw-------. 1 root root 125 4月 1 12:55 ftpusers
-rw-------. 1 root root 361 4月 1 12:55 user_list
-rw-------. 1 root root 5137 8月 27 15:41 vsftpd.conf
-rwxr--r--. 1 root root 338 4月 1 12:55 vsftpd_conf_migrate.sh
[root@www ~]#
touch创建这个文件即可,文件内写的是访问vsftpd服务器的登陆用户名,只用写个名称就可以。
但是!注意这个文件了,你可以创建个没有内容的空文件。
为啥?因为这个文件的作用是,你允许哪个用户访问‘上层’目录,则将这个用户写入这个chroot_list文件内。
这个意思就是,你允许这个用户可以查看服务器内的所有文件夹及内容就在文件内写用户名。
所以这个文件只用创建就可以,不用写用户。将每个用户的文件夹用useradd配置完即可:
比如我的test_ftp用户:
[root@www ~]# tail /etc/passwd
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
www:x:1001:1001::/home/www:/bin/bash
pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
ods:x:991:985:softhsm private keys owner:/var/lib/softhsm:/sbin/nologin
ldap:x:55:55:OpenLDAP server:/var/lib/ldap:/sbin/nologin
saned:x:990:983:SANE scanner daemon user:/usr/share/sane:/sbin/nologin
gluster:x:989:982:GlusterFS daemons:/run/gluster:/sbin/nologin
unbound:x:988:981:Unbound DNS resolver:/etc/unbound:/sbin/nologin
test_ftp:x:1002:1002::/var/www/site:/bin/bash
gongxiang:x:1003:1003::/var/www/da:/bin/bash
[root@www ~]# ll /var/www/
da/ site/ 共享文件夹/
[root@www ~]# ll /var/www/
总用量 0
drwxr-xr-x. 2 root root 22 8月 20 17:24 da
drwxrwxr-x. 3 test_ftp test_ftp 29 8月 24 16:44 site
drwxr-xr-x. 2 root root 6 8月 24 10:47 共享文件夹
[root@www ~]#
我将www下的site文件夹用户操作权限全部给了test_ftp用户,这样test_ftp用户可以对此文件夹进行上传下载操作。可以自行测试一下,对于文件夹的权限是和服务器内用户的操作权限和权限组相关的。有的用户可以访问vsftpd服务器进行查看和下载却不能够上传,可能是因为权限组没有对该文件夹的写入权限。
还遇到了一个问题,就是我的vsftpd运行状态正常,selinux的功能也正常开启,但是客户端无法访问vsftpd浏览文件,但是服务器是有客户端连接信息的:
可以看见我实际是已经访问上了vsftpd服务器,但是却读取不到vsftpd列表,但是我的vsftpd服务器有客户端的连接信息:
[root@www ~]# netstat -an | grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 25521 private/retry
unix 4 [ ] DGRAM 1211 /run/systemd/notify
unix 2 [ ] DGRAM 1213 /run/systemd/cgroups-agent
unix 3 [ ] STREAM CONNECTED 21570 /run/systemd/journal/stdout
unix 3 [ ] STREAM CONNECTED 21599 /run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 21219
unix 2 [ ] DGRAM 21005
unix 3 [ ] STREAM CONNECTED 21569
unix 3 [ ] STREAM CONNECTED 29921
unix 3 [ ] STREAM CONNECTED 21598
unix 2 [ ] DGRAM 21633
unix 2 [ ] DGRAM 21582
unix 2 [ ] DGRAM 29212
unix 3 [ ] STREAM CONNECTED 26621
unix 3 [ ] STREAM CONNECTED 21220 /run/dbus/system_bus_socket
[root@www ~]# netstat -an | grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 192.168.0.104:21 192.168.0.170:52934 ESTABLISHED
unix 2 [ ACC ] STREAM LISTENING 25521 private/retry
unix 4 [ ] DGRAM 1211 /run/systemd/notify
unix 2 [ ] DGRAM 1213 /run/systemd/cgroups-agent
unix 3 [ ] STREAM CONNECTED 21570 /run/systemd/journal/stdout
unix 3 [ ] STREAM CONNECTED 21599 /run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 21219
unix 2 [ ] DGRAM 21005
unix 3 [ ] STREAM CONNECTED 21569
unix 3 [ ] STREAM CONNECTED 29921
unix 3 [ ] STREAM CONNECTED 21598
unix 2 [ ] DGRAM 21633
unix 2 [ ] DGRAM 21582
unix 2 [ ] DGRAM 29212
unix 3 [ ] STREAM CONNECTED 26621
unix 3 [ ] STREAM CONNECTED 21220 /run/dbus/system_bus_socket
[root@www ~]#
可以看见我的服务器21端口有客户端的连接信息。
我执行一下内核加载ftp
[root@www ~]# modprobe ip_nat_ftp
再次访问就可以查看到vsftpd的文件列表了:
完成访问。