Max*_*Max 14 php apache permissions file
我正在尝试用PHP读取文件,虽然每个人都有对该文件的读取权限,但我收到了一个权限被拒绝的错误.
PHP代码:
$config=file_get_contents('/opt/jenkins/home/config.xml');
Run Code Online (Sandbox Code Playgroud)
错误:
Warning: file_get_contents(/opt/jenkins/home/config.xml): failed to open stream: Permission denied in [...]
Run Code Online (Sandbox Code Playgroud)
文件系统权限:
有一个符号链接指向/opt/jenkins/home/,/var/lib/jenkins并且每个人都对符号链接,实际文件夹和文件具有读取权限.
$ ls -lh /opt/jenkins/
lrwxrwxrwx 1 sysadmin sysadmin 16 2011-08-04 08:12 home -> /var/lib/jenkins
$ ls -lh /var/lib/ | grep jenkins
drwxr-xr-- 6 jenkins adm 4.0K 2011-08-04 10:04 jenkins
$ ls -lh /var/lib/jenkins/config.xml
-rwxr-xr-- 1 jenkins adm 3.9K 2011-08-04 10:05 /var/lib/jenkins/config.xml
Run Code Online (Sandbox Code Playgroud)
Apache配置
配置为删除符号链接(Options All).添加Directory指令/var/lib/jenkins/没有任何区别.
<Directory /opt/jenkins/home/>
Options All
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
Run Code Online (Sandbox Code Playgroud)
附加信息
无论我使用通过符号链接("/opt/jenkins/home/config.xml")或真实路径("/var/lib/jenkins/config.xml")的路径,我都有同样的问题.
apache2 version=2.2.14-5ubuntu8.4
php version=5.3.2-1ubuntu4.9
Run Code Online (Sandbox Code Playgroud)
知道我为什么会收到这个错误吗?
net*_*der 12
您的目录需要execute权限才能生效.它似乎没有世界执行,并且因为jenkins可能不是apache用户,并且apache用户不在adm组中,所以它不起作用:
$ ls -lh /var/lib/ | grep jenkins
drwxr-xr-- 6 jenkins adm 4.0K 2011-08-04 10:04 jenkins
Run Code Online (Sandbox Code Playgroud)
每个例子:
netcoder@netcoder:~$ mkdir foo
netcoder@netcoder:~$ echo hello > foo/bar
netcoder@netcoder:~$ chmod 777 foo/bar
netcoder@netcoder:~$ ls -lsah foo/bar
4.0K -rwxrwxrwx 1 netcoder netcoder 6 2011-08-04 08:22 foo/bar
netcoder@netcoder:~$ chmod 444 foo/
netcoder@netcoder:~$ ls -lsah | grep foo
4.0K dr--r--r-- 2 netcoder netcoder 4.0K 2011-08-04 08:22 foo
netcoder@netcoder:~$ cat foo/bar
cat: foo/bar: Permission denied
Run Code Online (Sandbox Code Playgroud)
即使foo/bar具有0777权限,如果目录没有执行权限,则拒绝读取其内容.
您需要为目标目录和符号链接设置权限.
您需要在层次结构中的所有目录上设置执行位,直到该文件.
chmod o+x /var/lib/jenkins
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.
(注意:ls -lhd /var/lib/jenkins有点好ls -lh ...|grep jenkins)
许多现代机器(数字海洋、机架空间等)都带有用于 RedHat 兼容操作系统(如 CentOS)的 SELinux(安全增强型 Linux)。这将另一个扳手投入到您需要牢记的工作中。您可以完美设置您的权限,但它仍然会说权限被拒绝。你需要为 SELinux 定义一个可写的上下文:
sudo chcon -t httpd_sys_rw_content_t /data/www/html/sites/mysite -R