Apache配置磁盘缓存时Permission denied的解决

最近,对网站完整性进行评估时,发现生产机现有的Apache存在一些漏洞需要修补。前两天,开始着手进行修补,考虑之后,还是觉得重新安装新版Apache比较稳妥,一方面把版本更新到我们需要的版本,另一方面,可以保留原版本,万一升级后出现问题,可以快速地恢复。

原版本是2.0.59,我们的目标是升级到2.2.10,没有别的原因,2.2.10是Sun官方的最新版本,呵呵。

安装过程就不必多说了,无非是 ./configuration,make,make install。安装好之后,在apache安装目录下建了一个cache目录作为磁盘缓存的目录。在httpd.conf文件中增加了配置项来启用缓存功能:

<IfModule mod_cache.c> CacheDefaultExpire 3600 CacheMaxExpire 86400 CacheLastModifiedFactor 0.1 <IfModule mod_disk_cache.c> CacheRoot /usr/local/apache2.2.10/cache CacheMaxFileSize 10000000 CacheMinFileSize 1 CacheEnable disk / CacheDirLevels 5 CacheDirLength 3 </IfModule> #<IfModule mod_mem_cache> # CacheEnable mem / # MCacheSize 4096 # MCacheMaxObjectCount 100 # MCacheMinObjectSize 1 # MCacheMaxObjectSize 2048 #</IfModule> </IfModule>

按照文档(官方和非官方)说明,前面的配置无误的话,启动Apache就应该能实现缓存功能了。

满心欢喜地敲入 bin/apachectl start ,启动没有报错,看来有戏。

先进入cache目录看看,有没有跟预想的一样有缓存文件产生.....咦!啥也没有啊,难道缓存没有生效吗?再看看日志:tail -f logs/error_4.log,发现日志有如下内容:

[Wed Nov 12 16:02:32 2008] [debug] mod_cache.c(131): Adding CACHE_SAVE filter for /content/9162.shtml
[Wed Nov 12 16:02:32 2008] [debug] mod_cache.c(138): Adding CACHE_REMOVE_URL filter for /content/9162.shtml
[Wed Nov 12 16:02:32 2008] [debug] mod_cache.c(639): cache: Caching url: /content/9162.shtml
[Wed Nov 12 16:02:32 2008] [debug] mod_cache.c(645): cache: Removing CACHE_REMOVE_URL filter.

看样子,缓存应该生效了呀,怎么在cache目录下没有文件生成呢?想既然日志中已有缓存日志,缓存应该生效了,就这样就可以了。后来想想还是不踏实,再找找原因。

再仔细看看日志,发现下面还有这样的内容:

[Wed Nov 12 16:02:32 2008] [debug] mod_cache.c(830): (13)Permission denied: cache: store_headers failed

原来是这里的鬼,缓存目录没有权限,把缓存目录先授权再说:

chmod -R 777 cahce

再看目录属性,已经由原来的:

drwxr-xr-x 2 root other 512 Nov 12 14:53 cache

变成

drwxrwxrwx 934 root root 11776 Nov 13 10:45 cache

再重启apache,没有报错,查看日志, (13)Permission denied: cache: 也不再报,进入cache目录,有文件生成!

OK,这样才算大功告成。


### 解决 Python 运行遇到的 `Permission denied` 问题 当遇到 `PermissionError: [Errno 13] Permission denied` 错误,通常意味着 Python 进程缺乏访问特定路径所需的权限[^1]。以下是几种常见的解决方案: #### 修改目标路径的权限 对于大多数情况而言,最直接的方法就是调整涉及文件夹或文件的权限设置。可以利用命令行工具如 Linux 或 macOS 的 chmod 命令更改相应对象的所有者及其读写执行属性。 ```bash sudo chown -R $USER:$USER /path/to/directory/ chmod -R u+rwx /path/to/directory/ ``` 这段脚本会将 `/path/to/directory/` 下所有的子项所有权赋予当前登录用户并给予其完整的控制权[^3]。 #### 使用超级用户权限运行程序 另一种方式是在启动应用程序之前临获取更高的特权级别。可以通过在命令前加上 `sudo` 关键字实现这一点;不过需要注意的是这种方法存在安全隐患,并不是长久之计。 ```bash sudo python your_script.py ``` 此指令会让系统提示输入管理员密码后以最高权限执行给定的 Python 脚本[^2]。 #### 更改工作目录至具有适当权限的位置 有改变保存数据的目标位置也能有效规避此类障碍。比如从根目录下切换到用户的家目录或其他允许自由操作的地方继续处理任务。 ```python import os new_path = "/home/user/safe_directory" if not os.path.exists(new_path): os.makedirs(new_path) with open(os.path.join(new_path, "output.txt"), 'w') as f: f.write("This is a test.") ``` 上述代码片段展示了如何安全地创建一个新的存储空间用于后续的数据写入动作。 #### 特殊操作系统配置 (针对 Mac OS) 如果是 MacOS 用户,则可能需要进入「系统偏好设置」-> 「安全性与隐私」 -> 「隐私」部分授予应用完全磁盘访问权限。具体步骤如下所示: 1. 打开系统偏好设置; 2. 寻找并点击“安全性与隐私”图标; 3. 切换到“隐私”标签页; 4. 向下滑动列表直到看到“完全磁盘访问”,解锁下方区域; 5. 添加正在使用的开发环境(例如 PyCharm、VSCode 等),确保它们被标记为拥有全面存取硬盘的权利[^5]。 通过以上措施应该能够有效地克服由权限不足引起的各种难题。当然每种策略都有各自的适用场景,请根据实际情况灵活选用最合适的一种来进行调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值