我正在尝试编写一个脚本来创建虚拟主机vor apache(AWS上的CentOS 6.4) 我尝试过简单的写作:
$result = file_put_contents( '/etc/httpd/conf/vhosts/test.conf', 'teststring');
var_dump($result);
这是我的许可和所有者信息:
-rw-r--r--. 1 apache apache 34445 Jan 16 11:08 httpd.conf
-rw-r--r--. 1 apache apache 13139 Aug 13 17:30 magic
drwxrwxrwx. 2 apache apache 4096 Jan 17 04:29 vhosts
但我仍然有这个问题:
Warning: file_put_contents(/etc/httpd/conf/vhosts/test.conf): failed to open stream: Permission denied in /var/www/server-control/src/test.php on line 8 bool(false)
按ps aux|grep httpd
检查用户:
root 9804 0.0 0.0 246372 8712 ? Ss 03:57 0:00 /usr/sbin/httpd
apache 9808 0.0 0.0 247024 7972 ? S 03:57 0:00 /usr/sbin/httpd
apache 9809 0.0 0.0 248304 8644 ? S 03:57 0:00 /usr/sbin/httpd
apache 9810 0.0 0.0 247536 7872 ? S 03:57 0:00 /usr/sbin/httpd
apache 9811 0.0 0.0 247536 8020 ? S 03:57 0:00 /usr/sbin/httpd
apache 9812 0.0 0.0 247536 7876 ? S 03:57 0:00 /usr/sbin/httpd
apache 9813 0.0 0.0 247536 7948 ? S 03:57 0:00 /usr/sbin/httpd
请帮忙!!我可以通过将所有者更改为apache
来写入该文件夹的某个服务器,但这个服务器不是。
答案 0 :(得分:1)
我已经解决了这个问题。运行ls -laZ
,这是不同的:
我的当地人:
[root@localhost conf]# ls -laZ
drwxr-xr-x apache apache ? .
drwxr-xr-x apache apache ? ..
-rw-r--r-- apache apache ? httpd.conf
-rw-r--r-- apache apache ? magic
-rw-r--r-- apache apache ? ssl.crt
-rw-r--r-- apache apache ? ssl.key
drwxrwxrwx apache apache ? vhosts
EC2服务器:
[root@ip-172-31-0-37 conf]# ls -laZ
drwxr-xr-x. apache apache system_u:object_r:httpd_config_t:s0 .
drwxr-xr-x. apache apache system_u:object_r:httpd_config_t:s0 ..
-rw-r--r--. apache apache system_u:object_r:httpd_config_t:s0 httpd.conf
-rw-r--r--. apache apache system_u:object_r:httpd_config_t:s0 magic
drwxrwxrwx. apache apache unconfined_u:object_r:httpd_config_t:s0 vhosts
这意味着EC2服务器位于SELinux permission context
要解决问题,我再次运行了chcon -R --type=httpd_sys_content_t vhosts
和ls -laZ
:
[root@ip-172-31-0-37 conf]# ls -laZ
drwxr-xr-x. apache apache system_u:object_r:httpd_config_t:s0 .
drwxr-xr-x. apache apache system_u:object_r:httpd_config_t:s0 ..
-rw-r--r--. apache apache system_u:object_r:httpd_config_t:s0 httpd.conf
-rw-r--r--. apache apache system_u:object_r:httpd_config_t:s0 magic
drwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 vhosts
vhosts目录中的差异是httpd_sys_content_t
上下文
现在apache可以写入/etc/httpd/conf/vhosts
如果我做错了,请纠正我。