前段时间用python写了个cgi程序,今天换了台机器就不能用了,调试发现没有权限写文件了
提取其中的问题代码,做了个测试
/var/www/cgi-bin/c.py
- #!/usr/bin/env python
- import cgitb
- cgitb.enable()
- import cgi, os
- import sys
- # cgi header
- print "Content-type: text/plain"
- print os.getcwd()
- fw=open('/tmp/1','w');
- fw.write("test");
- fw.close()
访问http://192.168.1.2/cgi-bin/c.py之后,在/tmp目录下出现了文件1,
然后复制一下,修改权限
cd /tmp
cp 1 2
chown apache.apache 2
chmod a+w 2
ll
结果如下:2甚至比1的权限还多,任何人都可以修改2
-rw-r--r-- 1 apache apache 4 Oct 27 17:18 1
-rw-rw-rw- 1 apache apache 4 Oct 29 09:48 2
但使用cgi结果却不一样
/var/www/cgi-bin/t.py
- #!/usr/bin/env python
- import cgitb
- cgitb.enable()
- import cgi, os
- import sys
- # cgi header
- print "Content-type: text/plain"
- print os.getcwd()
- print os.access('/tmp/1', os.R_OK);
- print os.access('/tmp/2', os.R_OK);
- print os.access('/tmp/1', os.W_OK);
- print os.access('/tmp/2', os.W_OK);
访问http://192.168.1.2/cgi-bin/t.py,测试两个文件的权限,结果输出:
/var/www/cgi-bin
True
True
True
False
按道理2比1的权限还多,但是使用cgi却没有写权限,只有使用cgi创建的文件才有写权限!!!
开始我以为是apache的配置问题,看了下配置文件,没有发现问题,网上也没找到相关的文档,
后来请教高人,说是关掉selinux就好了
我看了一下/etc/selinux/config
SELINUX=enforcing
改成disabled后,重启httpd,无效!要重启机器?不干!
查了一下用这个命令可以关闭
setenforce 0
检查一下
getenforce
返回Permissive
再次测试,读写权限全有了。
SELINUX具体做什么用的,怎么配置,我暂时没有时间搞,先把这个解决办法记下。