OSError - Errno 13 权限被拒绝
Posted
技术标签:
【中文标题】OSError - Errno 13 权限被拒绝【英文标题】:OSError - Errno 13 Permission denied 【发布时间】:2014-07-15 06:25:29 【问题描述】:我正在尝试通过管理页面上传图片,但它一直说:
[Errno 13] Permission denied: '/path/to/my/site/media/userfolder/2014/05/26'
文件夹userfolder/2014/05/26
是在上传时动态创建的。
在 Traceback 中,我发现执行此命令时出现错误:
在 /usr/lib64/python2.6/os.py 第 157 行。调用时
mkdir(name, mode)
意思是,它不能创建任何文件夹,因为它没有这样做的权限
我有 OpenSuse 作为服务器中的操作系统。在 httpd.conf 中,我有这个:
<Directory /path/to/my/site/media>
Order allow,deny
Allow from all
</Directory>
我必须 chmod 或 chown 吗?
【问题讨论】:
确保目录/path/to/my/site/media
可被Web 服务器进程写入。
ps aux | grep apache
会告诉你哪个用户拥有这个进程。
@falsetru 这告诉我root
。所以这是我的 django 代码,对吧?
ps aux | grep httpd | grep -v grep
或 ps aux | grep apache | grep -v grep
怎么样?
chown -R httpd:httpd /path/to/my/site/media
(第二个httpd
是组名,如果httpd
的组与httpd
不同,则需要更改)
【参考方案1】:
您需要更改目录权限,以便Web服务器进程可以更改目录。
要更改目录的所有权,请使用chown
:
chown -R user-id:group-id /path/to/the/directory
查看哪个用户拥有网络服务器进程(相应地更改httpd
):
ps aux | grep httpd | grep -v grep
或
ps -efl | grep httpd | grep -v grep
【讨论】:
我正在使用 gunicorn。我收到相同的错误消息。我想授予 gunicorn 对 /home/portfolio 下文件夹的读/写访问权限。我该怎么办? @Rexford,你最好用gevent
标签发布一个单独的问题。
@falsetru 我通过将主文件夹的所有者及其子目录/文件更改为 www-data 解决了这个问题。我正在使用flask+apache作为后端服务器。感谢您的指导。【参考方案2】:
如果文件夹名称前有斜杠,也可能发生这种情况:
path = '/folder1/folder2'
OSError: [Errno 13] Permission denied: '/folder1'
出现了一个错误,但这个工作正常:
path = 'folder1/folder2'
【讨论】:
值得解释为什么会发生这种情况。 Unix 中文件夹名称前的/
表示该文件夹应存在于根目录中,该目录还包含所有主要的敏感系统文件夹,例如/usr/
、/bin/
等(试试看,做 cd /
看看你在哪里着陆)。不允许普通进程修改根目录。省略前导 /
会将文件夹默认为当前工作目录,这是非常安全的,Unix 将为您完成。
@mjp 当我尝试从“folder1/”中删除第一个斜杠时,它确实有效并且错误消失了,但是我不知道那个文件夹现在是?那么它在哪里呢?我如何访问它?谢谢
我在您的当前目录中创建了一个名为 folder1 的文件夹【参考方案3】:
当 base.py 文件中的 maybe_download 函数调用发出下载请求时,您可能会遇到问题。
临时文件的权限存在冲突,我自己无法找到更改权限的方法,但能够解决该问题。
执行以下操作...
从链接 (http://yann.lecun.com/exdb/mnist/) 下载 MNIST 数据集的四个 .gz 文件 然后创建一个名为 MNIST_data 的文件夹(或您在 tensorflow\examples 文件夹中的工作目录/站点包文件夹中选择)。 直接将文件复制粘贴到文件夹中。 复制文件夹的地址(可能是 ( C:\Python\Python35\Lib\site-packages\tensorflow\examples\tutorials\mnist\MNIST_data )) 将“\”更改为“/”,因为“\”用于转义字符,以访问文件夹位置。 最后,如果您按照教程进行操作,您的调用函数将是 ( mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) ) ; 将 "MNIST_data/" 参数更改为您的文件夹位置。在我的情况下是 ( mnist = input_data.read_data_sets("C:/Python/Python35/Lib/site-packages/tensorflow/examples/tutorials/mnist/MNIST_data", one_hot=True) )然后一切都完成了。 希望它对你有用。
【讨论】:
【参考方案4】:另一种选择是确保文件没有在您机器上的其他任何地方打开。
【讨论】:
这仅适用于 Windows。看起来这个问题是针对 Linux 的。那里不存在这些限制【参考方案5】:试试吧:
sudo cp /source /destination
【讨论】:
【参考方案6】:补充@falsetru 的答案:在终端中运行 id 以获取您的 user_id 和 group_id
转到您面临挑战的目录/分区。 打开终端,输入 id 然后回车。 这将显示您的 user_id 和 group_id
然后输入
chown -R user-id:group-id .
替换用户 ID 和组 ID
末尾的.
表示当前分区/存储库
// chown -R 1001:1001 . (这是我的情况)
【讨论】:
请添加更多细节,以便您的答案独立。【参考方案7】:只需关闭文件,以防它在后台打开。错误自行消失
【讨论】:
以上是关于OSError - Errno 13 权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
Android 10 API 29(操作系统错误:权限被拒绝,errno = 13)保存文件(颤振)
FileSystemException:创建失败,路径 = '/storage/emulated/0/4k'(操作系统错误:权限被拒绝,errno = 13)颤振
如何修复错误无法打开文件,路径 = '/storage/emulated/0/DCIM/Camera/20200818_123041.jpg'(操作系统错误:权限被拒绝,errno = 13)
apache配置中的权限被拒绝:[Errno 13]权限被拒绝