4

我正在设置共享主机。我的用户可以通过 SFTP 访问服务器来上传他们的内容。我正在使用单独的 PHP 进程作为各自的用户(每个站点一个)运行。我希望用户默认看不到其他用户的内容(除了通过网络服务器作为任何其他非特权客户端),但网络服务器(作为 www-data 用户/组运行)应该能够读取所有内容。现在,我将 www 中的文件的所有权授予特定用户,并将组所有权授予 www-data,并使用 set GID 位将组所有权传播到新文件/目录(用户不在 www-data 组中)。

它工作得很好,但现在我面临一个问题。一些网站正在使用 wordpress,当他们上传文件时,设置的 GID 位会丢失,这意味着 Web 服务器无法访问它。有没有办法将 PHP 或 wordpress(更有可能)配置为 chmod 文件和目录到正确的权限?

注意:我没有在 PHP 中使用安全模式,所以应该可以添加设置的 GID 位。

更新:我尝试在 wordpress 配置中调整FS_CHMOD_DIRFS_CHMOD_FILE值。我认为这将允许我将上传的文件更改为我想要的任何内容。但是,它并不影响新上传文件的权限。根据codex中的信息,我猜这些设置仅适用于核心更新功能。

谢谢!

4

1 回答 1

3

这不是确切问题的答案,而是一般问题的解决方案。将用户的 web 目录的所有权分配给 user/www-data 并将权限设置为 750,无 SGID 位。用户不得属于 www-data 组。但是,在该目录中,可以将组所有权设置为用户的主组(例如用户)。里面的权限可以分别是文件和子目录的644和755。其他用户将无法进入或遍历此 Web 目录,因此即使他们有足够的权限自行访问文件,也无法访问其中的任何文件,从而提供了安全性。这将限制通过 SFTP 连接和执行 PHP 命令的用户。

由于此解决方案不使用设置 GID 位,因此它解决了原始问题。上传的文件可以保留其默认所有权和权限。

一个小示范:

transistor# mkdir www
transistor# chown :www-data www
transistor# chmod 750 www
transistor# ls -l
total 4
drwxr-x--- 2 root www-data 4096 Feb 20 20:59 www
transistor# touch www/file1.txt
transistor# mkdir www/subdir
transistor# touch www/subdir/file2.txt
transistor# ls -l www
total 4
-rw-r--r-- 1 root root    0 Feb 20 21:00 file1.txt
drwxr-xr-x 2 root root 4096 Feb 20 21:00 subdir
transistor# ls -l www/subdir 
total 0
-rw-r--r-- 1 root root 0 Feb 20 21:00 file2.txt
transistor# exit
giedrius@transistor:/tmp/sandbox$ cd www
bash: cd: www: Permission denied
giedrius@transistor:/tmp/sandbox$ ls www/subdir
ls: cannot access www/subdir: Permission denied
giedrius@transistor:/tmp/sandbox$ cat www/file1.txt
cat: www/file1.txt: Permission denied
giedrius@transistor:/tmp/sandbox$ cat www/subdir/file2.txt
cat: www/subdir/file2.txt: Permission denied
giedrius@transistor:/tmp/sandbox$ sudo -su www-data
transistor% ls www 
file1.txt  subdir
transistor% cat www/file1.txt 
transistor% cat www/subdir/file2.txt 
transistor% 
于 2013-02-20T21:16:18.653 回答