修改SELinux设置,使vsftp在enforcing security enhance模式下正常运行
模式 设置 修改 运行 Security 正常 SELinux vsftp
2023-09-11 14:19:24 时间
开了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来限制。
# 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来限制。
2. 下面,问题就出来了。打开SELinux后,SELinux会阻止ftp daemon读取用户home目录。所以FTP会甩出一句 “500 OOPS: cannot change directory”。无法进入目录,出错退出。
解决办法有两个:
1. 降低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
# 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的登录功能就正常了。但降低整体系统安全作为代价来解决一个小问题,这总不是最佳方案。
2. 经过研究,又找到了另一个更理想的办法。首先查看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 --> off
ftpd_is_daemon --> on
httpd_enable_ftp_server --> off
tftpd_disable_trans --> off
经过尝试发现,打开ftp_home_dir或者 ftpd_disable_trans。都可以达到在enforcing级别下,允许FTP正常登录的效果。
# setsebool -P ftpd_disable_trans 1
或者
# setsebool -P ftp_home_dir 1
# service vsftpd restart
或者
# setsebool -P ftp_home_dir 1
# service vsftpd restart
加-P是保存选项,每次重启时不必重新执行这个命令了。最后别忘了在/etc/sysconfig/selinux中,修改SELINUX=enforcing。
相关文章
- 简单工厂模式、工厂方法模式、抽象工厂模式 之间的对比
- 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(转)
- 设计模式(一)单例模式:创建模式 ASPNET CORE WEB 应用程序的启动 当项目中 没有STARTUP.CS 类如何设置启动 配置等等
- 使用bitnamiredis-sentinel部署Redis 哨兵模式
- 面向对象分析与设计—四色原型模式(彩色建模、领域无关模型)
- 如何在 Vim 中使用模式行进行文件特定的设置
- 设置多EIP网卡可见模式
- PostgreSQL和Kingbase中设置当前模式
- 聊聊模板方法模式,装饰器模式以及AOP
- Ubuntu宝塔面板设置网站 Apache Server API为Apache 2.0 Handler模式
- 策略模式
- kbd_mode - 显示或者设置键盘模式
- sqlite线程模式的设置
- macOS Monterey 如何设置PPT演讲者模式实现电脑看备注投影看播放内容
- C++外观模式
- 如何在vscode中同时运行多个文件——server/client模式——在launch.json文件中设置多个configurations再compounds
- UBUNTU18.04 SERVER 多显卡 服务器,为防止显卡计算任务出现不意外报错,设置显卡工作状态为:设定持久模式
- 【转载】 Linux 设置CPU Performance模式
- libcurl使用easy模式阻塞卡死等问题的完美解决---超时设置
- VMware 虚拟机NAT模式如何设置网络连接
- 迟到的桥接模式
- 桥接模式
- 【ESP8266之AT开发】三、STA模式下ESP8266建立服务器,建立客户端(解决防火墙)
- 桥接模式、NAT模式、仅主机(Host Only)模式的区别
- 23种设计模式(3):抽象工厂模式
- vue响应式依赖的两种技术之-发布订阅模式的实现
- php装饰者模式