selinux 的设置导致vsftp权限问题(linux的ftp用户无法连接问题)
2017-08-31 00:25
746 查看
#转载:http://chenpiaoping.blog.51cto.com/5631143/1329919
开了SELinux和防火墙,没想到引出了vsftp的问题。FTP登录报错:500 OOPS: cannot change directory。下面来看看产生这个问题的原因和对策。
首先,分析一下冲突原因:
1. 为锁定用户在自己的home目录中,在vsftpd.conf打开chroot_local_user。
这样FTP登录用户的“/”,就是passwd中的home path,比如/var/www/a.com/。避免FTP用户跑到/etc乱闯。这样设置过,FTP登录时,会自动执行CWD /var/www/html/www.xxx.com,并且把这个目录设置为FTP进程的根目录,用户就无法离开了。
vi /etc/vsftpd/vsftpd.conf
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_local_user=YES
# chroot_list_enable=YES
# (default follows)
# chroot_list_file=/etc/vsftpd/chroot_list
# 当然也可以用chroot_list_enable=YES的办法。但要逐个在chroot_list中指定FTP用户名,很麻烦。也容易出现疏漏。所以还是推荐用chroot_local_user来限制。
下面,问题就出来了。打开SELinux后,SELinux会阻止ftp daemon读取用户home目录。所以FTP会甩出一句 “500 OOPS: cannot change directory”。无法进入目录,出错退出。
解决办法有两个:
降低SELinux安全级别,把enforcing降低到permissive
vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=permissive
这时FTP的登录功能就正常了。但降低整体系统安全作为代价来解决一个小问题,这总不是最佳方案。
经过研究,又找到了另一个更理想的办法。首先查看SELinux中有关FTP的设置状态:
getsebool -a|grep ftp
allow_ftpd_anon_write –> off
allow_ftpd_full_access –> off
allow_ftpd_use_cifs –> off
allow_ftpd_use_nfs –> off
allow_tftp_anon_write –> off
ftp_home_dir –> off
ftpd_connect_db –> off
ftpd_disable_trans –> on
ftpd_is_daemon –> on
httpd_enable_ftp_server –> off
tftpd_disable_trans –> off
经过尝试发现,打开ftp_home_dir或者 ftpd_disable_trans。都可以达到在enforcing级别下,允许FTP正常登录的效果。
setsebool -P ftp_home_dir 1
#CentOS6里,是这样
set
4000
sebool -P allow_ftpd_full_access 1
service vsftpd restart
加-P是保存选项,每次重启时不必重新执行这个命令了。最后别忘了在/etc/sysconfig/selinux中,修改SELINUX=enforcing。
本文出自 “陈漂评的博客” 博客,请务必保留此出处http://chenpiaoping.blog.51cto.com/5631143/1329919
开了SELinux和防火墙,没想到引出了vsftp的问题。FTP登录报错:500 OOPS: cannot change directory。下面来看看产生这个问题的原因和对策。
首先,分析一下冲突原因:
1. 为锁定用户在自己的home目录中,在vsftpd.conf打开chroot_local_user。
这样FTP登录用户的“/”,就是passwd中的home path,比如/var/www/a.com/。避免FTP用户跑到/etc乱闯。这样设置过,FTP登录时,会自动执行CWD /var/www/html/www.xxx.com,并且把这个目录设置为FTP进程的根目录,用户就无法离开了。
vi /etc/vsftpd/vsftpd.conf
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_local_user=YES
# chroot_list_enable=YES
# (default follows)
# chroot_list_file=/etc/vsftpd/chroot_list
# 当然也可以用chroot_list_enable=YES的办法。但要逐个在chroot_list中指定FTP用户名,很麻烦。也容易出现疏漏。所以还是推荐用chroot_local_user来限制。
下面,问题就出来了。打开SELinux后,SELinux会阻止ftp daemon读取用户home目录。所以FTP会甩出一句 “500 OOPS: cannot change directory”。无法进入目录,出错退出。
解决办法有两个:
降低SELinux安全级别,把enforcing降低到permissive
vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=permissive
这时FTP的登录功能就正常了。但降低整体系统安全作为代价来解决一个小问题,这总不是最佳方案。
经过研究,又找到了另一个更理想的办法。首先查看SELinux中有关FTP的设置状态:
getsebool -a|grep ftp
allow_ftpd_anon_write –> off
allow_ftpd_full_access –> off
allow_ftpd_use_cifs –> off
allow_ftpd_use_nfs –> off
allow_tftp_anon_write –> off
ftp_home_dir –> off
ftpd_connect_db –> off
ftpd_disable_trans –> on
ftpd_is_daemon –> on
httpd_enable_ftp_server –> off
tftpd_disable_trans –> off
经过尝试发现,打开ftp_home_dir或者 ftpd_disable_trans。都可以达到在enforcing级别下,允许FTP正常登录的效果。
setsebool -P ftp_home_dir 1
#CentOS6里,是这样
set
4000
sebool -P allow_ftpd_full_access 1
service vsftpd restart
加-P是保存选项,每次重启时不必重新执行这个命令了。最后别忘了在/etc/sysconfig/selinux中,修改SELINUX=enforcing。
本文出自 “陈漂评的博客” 博客,请务必保留此出处http://chenpiaoping.blog.51cto.com/5631143/1329919
相关文章推荐
- linux下用非root用户重启导致ssh无法连接的问题
- linux上搭建ftp、vsftp, 解决访问ftp超时连接, 解决用户指定访问其根目录,解决ftp主动连接、被动连接的问题
- grid与oracle用户下oracle程序权限不一致导致ORA-15055/ORA-27123无法连接ASM问题
- selinux 的设置导致vsftp权限问题
- linux 中JDK环境变量不一致问题导致mysql无法连接,总是告诉权限出错
- Linux添加FTP用户并设置权限
- Access2007无法设置MSYSObjects用户和组账号权限的问题。
- 在linux中添加ftp用户,并设置相应的权限
- 在linux中添加ftp用户,并设置相应的权限
- Linux添加FTP用户并设置权限
- Linux添加FTP用户并设置权限
- SGA设置错误导致数据库无法连接问题
- 解决因用户权限导致的【Windows Installer】无法访问且无法启动的问题 - 博客频道 - CSDN.NET
- 在linux中添加ftp用户,并设置相应的权限
- linux下ftp(vsftpd)添加用户及设置权限详细步骤--(关于阿里云)
- Linux添加FTP用户并设置权限
- SQLServer2005 Express问题:由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭。
- LINUX下FTP用户和apache用户权限问题的解析
- win7安装SQL Server2008时,用户权限设置问题导致安装失败
- 解决因传输模式设置不当致FTP无法连接的问题