每次我从“eclipse”创建一个新文件时,我需要运行这两行代码来获得读/写权限:
chmod -R 775 /var/www/folder/filename.extension
和/或
sudo chown -R www-data:www-data /var/www
而且,如果我将一些文件复制到该服务器文件夹上,并从浏览器 URL 访问它,例如:
localhost/folder/filename.extension
我收到 Apache 服务器的权限错误。
难道就没有什么办法可以让我摆脱这个问题吗?
*笔记:move_uploaded_file()
当我的函数尝试将文件移动到/var/www/MyProject/
目录时,会发生主要错误。
答案1
使用 SGID 位。
执行一次,然后忘记这个问题:
chmod g+s /var/www/folder
您可能想对所有子文件夹执行相同的操作:
find /var/www/folder -type d | xargs chmod g+s
并且,以防万一:
find /var/www/folder -type d | xargs chgrp www-data
/var/www/folder/
现在,无论如何,在其下创建的所有文件都将属于拥有包含文件夹的组。这将允许您创建任何文件或文件夹,而不必担心它们不属于,例如www-数据组,这就是你想要的。
请注意,这仅适用于在目录中创建的文件或文件夹。如果文件是在其他地方创建并移动到目录树中,您仍然需要手动更改所有权。
例子:
# Create folder that belongs to www-data group
$ mkdir test
$ chown john.www-data test
$ ls -l
drwxr-xr-x 2 john www-data 4096 Jun 17 10:14 test
# Create a file, check the ownership
$ touch test/file1
$ ls -l test/
-rw-r--r-- 1 john users 0 Jun 17 10:16 file1
# Set the SGID bit
$ chmod g+s test
$ ls -l
drwxr-sr-x 2 john www-data 4096 Jun 17 10:19 test
# Create a file, check the ownership
$ touch test/file2
$ ls -l test/
-rw-r--r-- 1 john users 0 Jun 17 10:18 file1
-rw-r--r-- 1 john www-data 0 Jun 17 10:19 file2
更多信息这里。
答案2
您可以使用默认 ACL 为新文件和目录分配用户和组权限:
setfacl -dR u:domain:rwx,g:www-data:rwx /var/www/folder/filename.extension
答案3
首先,我想指出的是,提问时应该更加具体;例如,您使用什么操作系统、Linux 发行版,因为这可以大大加快寻找解决方案的过程。话虽如此,您可以通过更改特定文件夹的所有权和联合应用中心(用户访问控制)递归地,如下所示:
chown domain:www-data /var/www/folder -chR
chmod 775 /var/www/folder -cR
笔记:通过排除尾部斜杠(/)在文件夹名称末尾,您的更改将应用到该文件夹及其所有内容。
至于在浏览器中访问文件(脚本?)时出现的权限错误,您必须确保您的用户具有正确的权限来提供apache
.应该通过编辑/etc/httpd/*/httpd.conf
文件并添加以下内容来解决这个问题:
User domain
Group www-data