You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python创建/etc/samba/目录时遇PermissionError权限拒绝问题求助

解决在/etc/samba/下创建目录的PermissionError问题

问题原因

/etc/samba/是Linux系统的系统级配置目录,默认仅root用户拥有写入权限。普通用户身份执行Python脚本创建该目录下的子目录时,会触发PermissionError: [Errno 13] Permission denied错误。

解决方案

1. 使用root权限运行脚本

直接通过sudo以root身份执行你的Python脚本,获取系统目录的写入权限:

sudo python3 your_script_name.py

⚠️ 注意:root权限拥有系统最高操作权限,确保脚本内容安全,避免误修改或删除系统文件。

2. 调整目录权限(不推荐,存在安全风险)

如果必须让普通用户操作/etc/samba/credentials目录,可先通过root权限创建目录并修改归属:

sudo mkdir /etc/samba/credentials
sudo chown your_username:your_username /etc/samba/credentials

之后普通用户即可对该子目录进行读写操作。但此方法会修改系统目录的权限配置,可能带来安全隐患,谨慎使用。

3. 更换到用户空间目录存储凭证(推荐)

将凭证目录改为用户主目录下的路径,无需root权限,更符合安全规范:
修改Python代码中的路径配置:

import os

# 改用用户主目录下的.samba目录存储凭证
samba_credentials_path = os.path.expanduser("~/.samba/credentials")

def create_credentials_file(user, password, domain):
    try:
        # 创建目录,权限设为0o700仅当前用户可访问
        os.makedirs(samba_credentials_path, 0o700, exist_ok=True)
        # 这里可以添加写入凭证文件的逻辑
        # 例如:with open(os.path.join(samba_credentials_path, "smb.conf"), "w") as f:
        #         f.write(f"username={user}\npassword={password}\ndomain={domain}")
    except Exception as e:
        print(f"创建目录时出错: {e}")

这种方式既避免了权限问题,又保证了凭证文件的访问安全性(仅当前用户可读)。

代码优化提示

原代码中os.makedirs的exist_ok=True参数会让函数在目录已存在时不抛出FileExistsError,因此你写的except FileExistsError分支永远不会触发,可以删除该分支,或者移除exist_ok=True参数来保留异常处理逻辑。

内容的提问来源于stack exchange,提问作者Andres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 22:30:03