FTP登录(vsftpd)报错500 OOPS: vsftpd: refusing to run with writable root inside chroot()的问题

101 篇文章 0 订阅
51 篇文章 0 订阅
文章讲述了作者在配置vsftpd服务器时,如何创建用户并设置不同安全模式下的FTP登录,遇到500OOPS错误后,通过调整用户权限、配置chroot和主目录写权限解决了问题。最后提供了三种安全配置方案以限制用户操作权限。
摘要由CSDN通过智能技术生成

FTP登录(vsftpd)报错500 OOPS: vsftpd: refusing to run with writable root inside chroot()的问题

1)我添加了2个常规的用户,分别通过 -d 指定各自的用户主目录:
[root@localhost data]# mkdir -p /data/ftp
[root@localhost data]# useradd ftpuser01 -d /data/ftp/ftpuser01
[root@localhost data]# useradd ftpuser02 -d /data/ftp/ftpuser02
[root@localhost data]# passwd ftpuser01
[root@localhost data]# passwd ftpuser02

创建用户后会自动生成用户名对应的目录:
[root@localhost data]# ls -l
total 0
drwxr-xr-x 4 root root 40 Apr  2 20:53 ftp
[root@localhost data]# ls -l ftp/
total 0
drwx------ 2 ftpuser01 ftpuser01 62 Apr  2 20:53 ftpuser01
drwx------ 2 ftpuser02 ftpuser02 62 Apr  2 20:53 ftpuser02
[root@localhost data]# 

查看 /etc/passwd:
[root@localhost data]# cat /etc/passwd |grep ftpuser*
ftpuser01:x:1001:1001::/data/ftp/ftpuser01:/bin/bash
ftpuser02:x:1002:1002::/data/ftp/ftpuser02:/bin/bash


2)FTP配置文件的主要参数配置如下--FTP配置为不锁定用户主目录即允许chroot(my-cfg-mode1):
2.1)配置 /etc/vsftpd/vsftpd.conf
[root@localhost data]# vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO
local_enable=YES
##local_root 注释掉/不指定local_root参数,则默认为各自FTP登录用户的用户主目录
##local_root=/data/ftp/ftpuser01
write_enable=YES

# my-settings
# my-cfg-mode1:
#   1)chroot_local_user=YES                     => 锁定/限制用户在本用户主目录下(adduser 不指定 -d 时默认主目录为 /home/userName)、禁止切换到上层系统目录
#   2)chroot_list_enable=YES                    => 例外用户列表功能是否启用:YES-开启, NO-关闭
#   3)chroot_list_file=/etc/vsftpd/chroot_list  => 例外用户列表配置文件:用户若不加入例外配置列表 chroot_list 则无法 chroot()、无法访问用户主目录外的其他目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

# my-settings
# my-cfg-mode2:
#   1)chroot_local_user=YES                     => 锁定/限制用户在本用户主目录下(adduser 不指定 -d 时默认主目录为 /home/userName)、禁止切换到上层系统目录
#   2)chroot_list_enable=NO                     => 例外用户列表功能是否启用:YES-开启, NO-关闭
#   3)chroot_list_file=/etc/vsftpd/chroot_list  => 例外用户列表配置文件,例外用户列表功能关闭时(chroot_list_enable=NO)用不到 chroot_list
#chroot_local_user=YES
#chroot_list_enable=NO
#chroot_list_file=/etc/vsftpd/chroot_list
##allow_writeable_chroot=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES


2.2)配置例外用户列表 chroot_list
[root@localhost data]# echo "ftpuser01" >> /etc/vsftpd/chroot_list
[root@localhost data]# echo "ftpuser02" >> /etc/vsftpd/chroot_list


3)重启vsftpd服务:
[root@localhost data]# service  vsftpd restart

4)FTP客户端登录:
登录成功,登录后的当前目录位于用户的主目录下,允许 cd 到上层系统目录(允许切换到上层系统目录)、没有锁定在用户主目录下:
[root@localhost data]# ftp 192.168.1.82
Connected to 192.168.1.82 (192.168.1.82).
220 (vsFTPd 3.0.2)
Name (192.168.1.82:root): ftpuser01
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/data/ftp/ftpuser01"
ftp> cd /opt
250 Directory successfully changed.
ftp> cd /home
250 Directory successfully changed.
ftp> bye
221 Goodbye.
[root@localhost data]#
[root@localhost data]# ftp 192.168.1.82
Connected to 192.168.1.82 (192.168.1.82).
220 (vsFTPd 3.0.2)
Name (192.168.1.82:root): ftpuser02
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/data/ftp/ftpuser02"
ftp> cd /opt
250 Directory successfully changed.
ftp> 

可是,考虑到安全性,接下来我尝试修改vsftpd.conf配置,将设置为锁定FTP登录用户在用户主目录下(禁止切换到上层系统目录),却遇到配置完成后FTP登录报错:
500 OOPS: vsftpd: refusing to run with writable root inside chroot() 的问题。

5)FTP配置文件的主要参数配置如下--FTP配置为锁定用户主目录即禁止chroot(my-cfg-mode2):
2.1)配置 /etc/vsftpd/vsftpd.conf
[root@localhost data]# vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO
local_enable=YES
##local_root 注释掉/不指定local_root参数,则默认为各自FTP登录用户的用户主目录
##local_root=/data/ftp/ftpuser01
write_enable=YES

# my-settings
# my-cfg-mode1:
#   1)chroot_local_user=YES                     => 锁定/限制用户在本用户主目录下(adduser 不指定 -d 时默认主目录为 /home/userName)、禁止切换到上层系统目录
#   2)chroot_list_enable=YES                    => 例外用户列表功能是否启用:YES-开启, NO-关闭
#   3)chroot_list_file=/etc/vsftpd/chroot_list  => 例外用户列表配置文件:用户若不加入例外配置列表 chroot_list 则无法 chroot()、无法访问用户主目录外的其他目录
#chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list

# my-settings
# my-cfg-mode2:
#   1)chroot_local_user=YES                     => 锁定/限制用户在本用户主目录下(adduser 不指定 -d 时默认主目录为 /home/userName)、禁止切换到上层系统目录
#   2)chroot_list_enable=NO                     => 例外用户列表功能是否启用:YES-开启, NO-关闭
#   3)chroot_list_file=/etc/vsftpd/chroot_list  => 例外用户列表配置文件,例外用户列表功能关闭时(chroot_list_enable=NO)用不到 chroot_list
chroot_local_user=YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
#allow_writeable_chroot=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES


2.2)配置例外用户列表 chroot_list
这里清空或者不清空,其实都无所谓,因为 chroot_list_enable=NO 时根本就用不到 chroot_list 
[root@localhost data]# echo "" > /etc/vsftpd/chroot_list


6)重启vsftpd服务:
[root@localhost data]# service  vsftpd restart


7)再次FTP客户端登录:
登录失败,报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()

[root@localhost data]# ftp 192.168.1.82
Connected to 192.168.1.82 (192.168.1.82).
220 (vsFTPd 3.0.2)
Name (192.168.1.82:root): ftpuser01
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
ftp> bye
[root@localhost data]# ftp 192.168.1.82
Connected to 192.168.1.82 (192.168.1.82).
220 (vsFTPd 3.0.2)
Name (192.168.1.82:root): ftpuser02
331 Please specify the password.
Password:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
ftp> bye
[root@localhost data]# 


最终查找资料,定位原因如下:
当配置 chroot_local_user=YES 锁定用户登录 FTP 后,只能到自己的主目录下,不能随便切换到其它目录。
但是普通系统用户默认是可以在自己的主目录里写文件的,vsftp 出于安全性要求,如果配置为锁定了用户的 FTP 登录目录,则所在目录不能有写权限。

解决方案:
方案1:去掉FTP主目录的写权限(主目录只允许读)、单独创建可写的子目录:

修改前先查看目录权限:
[root@localhost data]# ls -l
total 0
drwxr-xr-x 4 root root 40 Apr  2 20:53 ftp
[root@localhost data]# ls -l ftp/
total 0
drwx------ 2 ftpuser01 ftpuser01 62 Apr  2 20:53 ftpuser01
drwx------ 2 ftpuser02 ftpuser02 62 Apr  2 20:53 ftpuser02
[root@localhost data]# 

去掉用户FTP主目录的写权限:
[root@localhost data]# chmod u-w /data/ftp/ftpuser01
[root@localhost data]# chmod u-w /data/ftp/ftpuser02

[root@localhost data]# ls -l ftp/
total 0
dr-x------ 2 ftpuser01 ftpuser01 62 Apr  2 20:53 ftpuser01
dr-x------ 2 ftpuser02 ftpuser02 62 Apr  2 20:53 ftpuser02
[root@localhost data]# 

再尝试FTP客户端登录成功:
[root@localhost data]# 
[root@localhost data]# ftp 192.168.1.82
Connected to 192.168.1.82 (192.168.1.82).
220 (vsFTPd 3.0.2)
Name (192.168.1.82:root): ftpuser01
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> bye
221 Goodbye.
[root@localhost data]# ftp 192.168.1.82
Connected to 192.168.1.82 (192.168.1.82).
220 (vsFTPd 3.0.2)
Name (192.168.1.82:root): ftpuser02
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> bye
221 Goodbye.
[root@localhost data]# 


创建一个可写的子目录 write:
[root@localhost data]# mkdir -p /data/ftp/ftpuser01/write
[root@localhost data]# chown -R ftpuser01:ftpuser01 /data/ftp/ftpuser01/write
[root@localhost data]# ls -l ftp/
total 0
dr-x------ 3 ftpuser01 ftpuser01 75 Apr  2 22:23 ftpuser01
dr-x------ 2 ftpuser02 ftpuser02 62 Apr  2 20:53 ftpuser02
[root@localhost data]# ls -l ftp/ftpuser01/
total 0
drwxr-xr-x 2 ftpuser01 ftpuser01 6 Apr  2 22:23 write
[root@localhost data]# 
[root@localhost data]# mkdir -p /data/ftp/ftpuser02/write
[root@localhost data]# chown -R ftpuser02:ftpuser02 /data/ftp/ftpuser02/write 
[root@localhost data]# ls -l ftp/
total 0
dr-x------ 3 ftpuser01 ftpuser01 75 Apr  2 22:23 ftpuser01
dr-x------ 3 ftpuser02 ftpuser02 75 Apr  2 22:28 ftpuser02
[root@localhost data]# ls -l ftp/ftpuser02/
total 0
drwxr-xr-x 2 ftpuser02 ftpuser02 6 Apr  2 22:28 write
[root@localhost data]# 


方案2:修改FTP配置、强制允许写FTP主目录
[root@localhost data]# vi /etc/vsftpd/vsftpd.conf
#允许主目录可写(要保证:目录必须要有写权限):
allow_writeable_chroot=YES

修改后重启vsftpd服务。


方案3:
配置FTP为不锁定/限制用户在本用户主目录下,允许切换到上层系统目录,则能成功登录。但考虑安全性,一般不推荐该方案。
 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值