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
相关产品推荐
相关产品推荐

