第1种方案:
作者说这个问题在 Centos 上才会出现,Redhat 就没有,难怪我在公司都没见过这问题。
解决办法:
①、查看 ftp 的 Selinux 状态:sestatus -b | grep ftp
②、在结果中可以看到: ftp_home_dir off
③、将状态改为 on:setsebool -P ftp_home_dir on
④、重启 vsftp 服务:service vsftpd restart
有点纳闷的是,他的服务器根本就没开 selinux,所以第②步根本没结果,理论上,这个解决办法应该没效果才对,可实际上,全部执行完成之后,发现可以上传文件和新建文件夹了。我去,还真是诡异,总之解决了问题就好。
如③的方案无法执行,请注意sestatus -b | grep ftp出来的信息是:tftp_home_dir --> off,那语句应该是:
setsebool -P tftp_home_dir 1
第2种方案,粗暴:
setsebool -P ftpd_full_access 1
setsebool -P tftp_home_dir 1
第1种方案里:
在centOs(linux)上用vsftp配置的ftp服务,用户权限等设置完成之后,发现从客户端无法上传文件及创建文件夹。尝试着关闭防火墙,也没能解决。通过搜索,觉得是selinux这个服务造成的影响,关闭selinux服务之后,问题解决,vsftp的ftp服务使用正常了。
关闭selinux方法:修改/etc/selinux/config文件,修改为SELINUX=disabled。重启linux系统。
SELinux 的工作模式
SELinux 有三种工作模式,分别是:
1. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
2. permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
3. disabled:关闭 SELinux。
SELinux 工作模式可以在 /etc/selinux/config 中设定。
如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。
enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。
需要注意的是,如果系统已经在关闭 SELinux 的状态下运行了一段时间,在打开 SELinux 之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文(我表示我重启了大约 10 分钟,还以为是死机了……)。
SELinux 日志的记录需要借助 auditd.service 这个服务,请不要禁用它。
发现还不行,终极大招:
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列两项中的一项:
allow_writeable_chroot=YES