我正在建立一个共享主机。我的用户具有SFTP访问服务器的权限以上传其内容。我正在使用作为各自用户运行的单独PHP进程(每个站点一个)。我希望用户默认不会看到其他用户的内容(除了通过Web服务器,因为任何其他非特权客户端),但Web服务器(作为www-data用户/组运行)应该能够读取所有内容。现在我将www中的文件所有权授予特定用户,并将组所有权授予www-data,并使用set GID位将组所有权传播到新文件/目录(用户不在www-data组中)。 / p>
它工作正常,但现在我遇到了问题。一些站点使用wordpress,当他们上传文件时,设置的GID位丢失意味着Web服务器无法访问它。有没有办法将chmod文件和目录的PHP或wordpress(更有可能)配置为正确的权限?
注意:我没有在PHP中使用安全模式,所以它应该能够添加设置的GID位。
更新:我尝试在wordpress配置中调整 FS_CHMOD_DIR 和 FS_CHMOD_FILE 值。我认为这将允许我将上传的文件chmod到我想要的任何内容。但是,它不会影响新上载文件的权限。从codex中的信息我想这些设置仅适用于核心更新功能。
谢谢!
答案 0 :(得分:3)
答案 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%