python makedirs权限被拒绝
我有一个使用django框架和mod_wsgi运行python代码的apache httpd服务器。 我的view.py我需要做一个子进程调用来执行另一个python文件,在这个过程中需要创建一些目录。python makedirs权限被拒绝
但是,我得到OSERROR 13:无论我尝试创建目录的位置,权限被拒绝。
只在/ tmp中创建目录是成功的。
任何人都可以指导我如何解决这个问题?
在此先感谢!
编辑: 我在serverfault.com找到了答案。这里是供参考的 apache2在根目录下运行,但它分叉在'www-data'组下运行的进程。要创建文件/目录
sudo mkdir /srv/www/writable
变化 因此,创建一个目录组
sudo chgrp www-data /srv/www/writable
格兰特组写访问
sudo chmod g+w /srv/www/writable
和你做。现在,您可以使用apache2运行的脚本在此目录中创建任何文件/目录。
我在serverfault.com找到了答案。这里仅供参考
apache2在根目录下运行,但它分叉在'www-data'组下运行的进程。因此,创建要在其中创建文件的目录/目录
须藤的mkdir/SRV /网络/写 更改组
须藤chgrp命令www数据/ SRV /网络/写 格兰特组写访问
sudo chmod g + w/srv/www /可写 你就完成了。现在,您可以创建任何文件/使用脚本在这个目录中的目录由Apache2的运行
也许值得补充说,这也可以在Python
import os
import pwd
path = '/var/www/myapp/foo/'
if not os.path.exists(path):
os.makedirs(path) # creates with default perms 0777
uid, gid = pwd.getpwnam('root').pw_uid, pwd.getpwnam('www-data').pw_uid
os.chown(path, uid, gid) # set user:group as root:www-data
此外,os.makedirs应该默认情况下在0777设置权限,但我发现这并非总是如此。要明确地做到这一点:os.chmod(path,0777) – igniteflow 2013-01-09 10:42:07
“我发现这并非总是如此”......这是因为在Unix上创建文件系统对象时,umask应用于创建模式。另外,由于安全原因,0777是一个不好的选择,这就是为什么'umask'存在于第一位。 – arielf 2015-11-05 20:05:24
实现你显然有一个权限问题,由于正在运行Apache作为一个用户帐户不同于拥有父目录的用户帐户,您正尝试创建新目录。 – Keith 2012-07-23 06:00:24
是的,我可以解决这个问题。我使用apt-get安装了apache,当我做ps aux | grep apache2时,我看到在根用户下运行的apache2 ... – 2012-07-23 06:19:25
主要的apache线程以超级用户身份运行,但它通常会切换到另一个用户,通常是www数据。 – 2012-07-23 06:56:02