我是一名 Web 开发人员,因此在办公室里设置了一台旧机器作为 Ubuntu 服务器,用于测试网站。
我已经设置了 LAMP 并创建了一个 /var/www 文件夹,我的所有本地站点都从该文件夹提供服务。问题在于用户权限,即我复制到该文件夹的任何文件(通过网络从我的 Windows 计算机复制)都会自动将我(daniel)视为其所有者。问题是我想让 www-data 成为所有者。
我做了一些研究,发现应该可以使用 setuid(和 setgid)自动将 www-data 设置为自动放入 /var/www 的所有文件的所有者,但到目前为止我还没有成功让它发挥作用。
有人能帮忙吗?谢谢
更新:这会实现我想要的效果吗?php 用户 www-data 的默认文件权限
更新 2:我通过更改 Samba 设置解决了这个问题。使用 Webmin,我可以进入并更改默认设置(如下所示:http://imageshack.us/photo/my-images/521/captureon.png/)
答案1
用户通过使用 Webmin 设置以下文件权限解决了这个问题:
- 新的 Unix 文件模式:664
- 新的 Unix 目录模式:775
- 强制 Unix 用户:www-data
- 强制 Unix 组:www-data
- 允许共享之外的符号链接吗?:是[有疑问]
- 可以删除只读文件吗?:否
- 强制 Unix 文件模式:000
- 强制 Unix 目录模式:000
看:
答案2
您可以启动终端并输入:
sudo chown -R www-data /var/www
-R 代表对 /var/www 下的每个文件和目录进行递归,并且 www-data 将是所有者。
答案3
首先将您的用户添加到www-data
组中。
sudo usermod -a -G www-data your_user
然后你可以暂时将 www-data 设为你的群组
newgrp www-data
这将启动一个新的 shell。您创建的任何新文件都将归 www-data 所有。
然后让 root 拥有并读写 /var/www。www-data
sudo chown -R root:www-data /var/www
在“生产服务器”上,我将保留由 root 拥有的文件,并且尽可能保留由 www-data 拥有的文件,但这可能不切实际。
您可以使用 usermod 将 www-data 设为您的主要组
sudo usermod -g www-data your_user
答案4
Linux 系统忽略权限标志setuid
,但您可以将setgid
标志应用于每个目录/var/www
:
find /var/www -type d -exec chmod g+s {} +
这将使每一个新的文件继承目录的组,而用户保留所有权,例如daniel:www-data
。
但是,如果您确实需要文件具有特定的所有者,则可以设置一个 cron 作业来定期修复它。