我正在尝试在 centos 中设置一个可以读取/写入/删除/等 /var/www/html 目录中文件的用户。在这里的一些帮助下,我让用户能够登录并查看文件,但现在他们无法上传/删除等。
我创建了一个用户“ftpuser”,其 UID/GID 为 500,有效 shell 为 /bin/sh,主目录为 /var/www/
我将 /var/www/html 的所有者更改为 ftpuser.ftpuser [并尝试对其进行 0777ing]
该用户应该能够读取/写入/删除 /var/www/html/ 目录中的文件。
这是 proftpd 配置:
ServerName "ProFTPD server"
ServerIdent on "FTP Server ready."
ServerAdmin root@localhost
ServerType standalone
DefaultServer on
VRootEngine on
#DefaultRoot ~ !adm
DefaultRoot /var/www/
VRootAlias /etc/security/pam_env.conf etc/security/pam_env.conf
AuthPAMConfig proftpd
AuthOrder mod_auth_pam.c* mod_auth_unix.c
#PersistentPasswd off
UseReverseDNS off
User nobody
Group nobody
MaxInstances 20
UseSendfile off
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
# Global Config - config common to Server Config and all virtual hosts
# See: http://www.proftpd.org/docs/howto/Vhost.html
<Global>
Umask 022
AllowOverwrite yes
<Limit ALL SITE_CHMOD>
AllowAll
</Limit>
</Global>
<Directory /var/www>
AllowOverwrite yes
<Limit ALL>
AllowAll
</Limit>
</Directory>
<Limit LOGIN>
AllowUser ftpuser
DenyALL
</Limit>
我不知道为什么这不管用。有人知道我做错了什么吗?
答案1
听起来 SELinux 妨碍了你。如果你不想让 SELinux 阻止 ftp 在系统上的任何位置写入文件,你需要打开 allow_ftpd_full_access 布尔值。首先,通过运行以下命令检查它当前是启用还是禁用:
getsebool allow_ftpd_full_access
如果它告诉您它已关闭,请使用此命令启用它(可能需要一分钟左右才能应用于整个系统,因此请耐心等待):
setsebool -P allow_ftpd_full_access=1
此外,由于您将用户的主目录设置为 /var/www,因此您还需要将设置设置ftp_home_dir
为 On。
设置sebool -P ftp_home_dir=1
当您设置主目录时,user_home_t
安全上下文可能也设置在 /var/www 上。将其设置为更公开的内容,例如httpd_sys_content_t
或public_content_rw_t
。您可以chcon
为此使用。
chcon -R -t httpd_sys_content_t /var/www
应用这些设置后重新启动您的 FTP 服务器,一切就绪了。
看本文档如果您想了解更深入的信息。