我正在使用 Cloud9IDE 的 SSH 工作区,出于各种原因,我们需要以 root 身份创建该 SSH 隧道。这实际上不是问题,但是我们用它创建的文件和目录实际上位于用户文件夹下(在本例中,假设用户是“foobar”,因此文件将在 /home/foobar/public_html/dev 中创建)。
问题在于,由于用户“root”实际上正在创建文件,因此在浏览器中导航到这些文件会返回 404,因为服务器使用用户“foobar”来提供页面。
我需要一种方法来确保即使文件是由 root 用户创建的,用户 foobar 也应该能够读取和执行它们,就像该用户创建它们一样。
我曾尝试对包含 root 和 foobar 的组使用 setfacl -Rdm,结果导致 foobar 无法再提供其目录中的任何文件。
例如:
-rw-r--r-- 1 foobar foobar 125 May 15 11:26 die.html
-rw-r--r-- 1 root root 127 May 15 12:20 dies.html
在这种情况下,文件“die.html”可以正确提供,但是“dies.html”会因为所有者和组而导致 404。
关于如何解决这个问题有什么想法吗?重申一下:我需要对所有未来的文件进行此操作,而不仅仅是当前存在的文件。
答案1
请选择:
chown foobar:foobar *
chown foobar:foobar dies.html
chown foobar *
chown foobar dies.html
因此,要使所有创建的文件都归 foobar 所有,您需要执行以下操作:
运行crontab -e
并输入:
* * * * * while true; do chown foobar:foobar -R /home/foobar/public_html/dev/* & sleep 1; done
保存,让cron接管权限
答案2
通过输入建立 ssh 隧道后将您的用户身份更改为 foobar,su foobar
并输入 foobar 的密码。
答案3
创建一个新组,说开发者 并将需要读取/写入文件的所有用户放入该组中。然后将该目录的组更改为开发者。
使用此命令:
chgrp -R devs /home/foobar/public_html/dev
之后设置设置组ID使用以下命令在该目录中:
chmod -R g+s /home/foobar/public_html/dev
从此时起,该目录中创建的所有文件将归组所有开发者并且该组中的所有用户都将对文件具有读/写访问权限(取决于权限)。
如果你想知道 setgid 是什么查看此链接。