vsftpd的chroot.list文件的功能

12 篇文章 0 订阅
2 篇文章 0 订阅

网上好多在那解释关于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的文件列表了:
在这里插入图片描述
在这里插入图片描述
完成访问。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是将这些命令转换为Python代码的示例: ```python import subprocess vsftpd_conf_file = '/etc/vsftpd/vsftpd.conf' # Update chroot_list_enable in vsftpd.conf file if subprocess.call('grep -q "chroot_list_enable" /etc/vsftpd/vsftpd.conf', shell=True) == 0: subprocess.call("sed -i '/chroot_list_enable=NO/s/^/#/' /etc/vsftpd/vsftpd.conf", shell=True) subprocess.call("sed -i '/chroot_list_enable=YES/s/^/#/' /etc/vsftpd/vsftpd.conf", shell=True) subprocess.call("echo 'chroot_list_enable=YES' >> /etc/vsftpd/vsftpd.conf", shell=True) else: subprocess.call("echo 'chroot_list_enable=YES' >> /etc/vsftpd/vsftpd.conf", shell=True) # Update chroot_list_file in vsftpd.conf file if subprocess.call('grep -q "chroot_list_file=/etc/vsftpd/chroot_list" /etc/vsftpd/vsftpd.conf', shell=True) == 0: subprocess.call("sed -i '/chroot_list_file=/etc/vsftpd/chroot_list/s/^/#/' /etc/vsftpd/vsftpd.conf", shell=True) subprocess.call("echo 'chroot_list_file=/etc/vsftpd/chroot_list' >> /etc/vsftpd/vsftpd.conf", shell=True) else: subprocess.call("echo 'chroot_list_file=/etc/vsftpd/chroot_list' >> /etc/vsftpd/vsftpd.conf", shell=True) # Update anonymous_enable in vsftpd.conf file if subprocess.call('grep -q "anonymous_enable" /etc/vsftpd/vsftpd.conf', shell=True) == 0: subprocess.call("sed -i '/anonymous_enable=YES/s/^/#/' /etc/vsftpd/vsftpd.conf", shell=True) subprocess.call("sed -i '/anonymous_enable=NO/s/^/#/' /etc/vsftpd/vsftpd.conf", shell=True) subprocess.call("echo 'anonymous_enable=NO' >> /etc/vsftpd/vsftpd.conf", shell=True) else: subprocess.call("echo 'anonymous_enable=NO' >> /etc/vsftpd/vsftpd.conf", shell=True) ``` 上述代码首先检查是否存在`/etc/vsftpd/vsftpd.conf`文件中的`chroot_list_enable`行,如果存在,则将其注释去除,并将其值设置为`YES`。接着,检查是否存在`chroot_list_file=/etc/vsftpd/chroot_list`行,如果存在,则将其注释去除。然后,检查是否存在`anonymous_enable`行,如果存在,则将其注释去除,并将其值设置为`NO`。 请确保你具有足够的权限来执行这些操作,并将需要修改的文件路径正确添加到`vsftpd_conf_file`变量中。运行代码后,命令将被执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值