相同的权限,不同的权利?

时间:2013-06-17 16:39:05

标签: python linux apache permissions selinux

我通过CGI在Apache服务器中运行Python脚本。在脚本内部,我尝试读取驻留在/ home目录中的文件。但是,我可以读取一个文件而不是另一个文件。这对我理解权限以及可以阅读与否的目标非常令人沮丧。

# Works
file_tmp = open("/home/blastdbs/db_01.fasta", 'r')

# Fails
file_tmp = open("/home/blast_dbs/db_01.fasta", 'r')
<type 'exceptions.IOError'>: [Errno 13] Permission denied: '/home/blast_dbs/db_01.fasta' 

ls -l /home/
drwxr-xr-x.  2 myself myself  4096 Jun 17 18:18 blastdbs
drwxr-xr-x.  2 myself myself  4096 Jun 17 18:18 blast_dbs

ls -l /home/blastdbs/
-rwxr-xr-x. 1 myself myself   32484551 Jun 17 17:28 db_01.fasta
-rwxr-xr-x. 1 myself myself 2279012809 Jun 17 13:10 db_02.fasta

ls -l /home/blast_dbs/
-rwxr-xr-x. 1 myself myself  32484551 Jun 17 13:09 db_01.fasta

顺便说一下,尝试读取db_02会产生相同的异常。

我希望有人能对此有所了解。 谢谢

2 个答案:

答案 0 :(得分:1)

Apache服务器安装在启用了SELinux的Linux发行版中。 SELinux默认拒绝Apache读取/ home文件夹中的文件。通过使用ls -Z,可以检查SELinux文件标签。在我的情况下,虽然通常(DAC)权限相同且没有设置ACL,但SELinux上下文不同:

下一个可以从Apache守护程序和脚本中读取:

unconfined_u:object_r:httpd_sys_content_t:

下一个是SELinux拒绝访问Apache的文件:

unconfined_u:object_r:user_home_t

答案 1 :(得分:0)

使用以下操作,但使用httpd_sys_content_t标记目录。不要标记整个主目录,只是例如/ home / myuser / apache

https://superuser.com/questions/607409/configuring-selinux-to-allow-logging-to-a-file-thats-outside-var-log