大家好,我为朋友设立了一个小型共享主机。
我已将文件 chmod 权限设置为
chmod 711 /home
chmod 711 /home/testuser
chmod 755 /home/testuser/public_html
chmod o+r /home/testuser/public_html/index.htm
我如何阻止连接到他们自己的 ftp 的用户删除 html.htm 文件,并且将公共目录设置为 chmod 755 后我发现他们无法在目录中执行任何操作,例如上传/删除?
附加信息:我已经运行
setsebool -P httpd_enable_homedirs true
chcon -R -t httpd_sys_content_t /home/testuser/public_html
但没有效果?
答案1
传统的 unix 权限意味着如果用户可以在目录中创建文件,他们也可以删除其中的文件 - 即使文件本身是读保护的并且不属于他们。因此,html.htm
如果文件位于他们应该具有写/执行权限的目录中,则无法保护(无论它是什么)。也许正如@vonbrand所建议的那样,ACL 可以提供帮助(但我对它们不熟悉,并且@vonbrand 也不保证它会起作用)。
无需将目录设置为全局可写或全局可执行,但您需要确保您的 Web 服务器守护程序具有对文件的读取权限。(它可能以组
www-data
--但请检查)运行。因此,请确保目录所有者与用户在连接时获得的 uid 匹配,并且您可以将其保持为模式 750。如果需要让多个 uid 写入同一目录,则需要启用组写入访问权限 (
g+w
)。在这种情况下,我将使用 以外的组www-data
,并授予 apache 作为“其他”的只读访问权限。换句话说,模式 775。还要留意您的
umask
,它控制用户创建的新文件的权限。如果您有个人帐户,请使用 umask022
进行匹配。如果您有共享组目录,请使用 umask002
允许用户编辑彼此的文件。(因为他们可以删除和替换文件,所以保护它们毫无意义)。
答案2
用户以谁的身份进行连接?根据你的设置,只有所有者可以写入 public_html。
此外,您目前已将其设置为用户可以输入/home/testuser
但不能阅读。您可能需要类似以下内容:
chmod 711 /home
chmod 755 /home/testuser
chmod 777 /home/testuser/public_html
chmod 644 /home/testuser/public_html/index.htm
chown root /home/testuser/public_html/index.htm
答案3
查找 ACL,这可能会解决您的问题。相关的手册条目是 acl(5)、setfacl(1) 和 getfacl(1)。不过,支持取决于文件系统。