Python脚本创建文件/目录默认权限异常排查:RHEL7.9与8.6差异
Python 2.7在RHEL7.9与RHEL8.6中创建文件/目录权限差异的原因分析
可能的影响因素及排查步骤
1. 实际生效的umask值差异
尽管你提到两个环境默认umask设置一致,但脚本运行时的实际umask可能因会话配置不同而变化:
- 在两个环境中,分别在脚本执行前后通过
umask命令查看当前值;也可在脚本临时添加一行代码(不修改原有逻辑):import os; orig_umask = os.umask(0); print(orig_umask); os.umask(orig_umask),直接输出运行时的umask - 检查用户级配置(
~/.bashrc、~/.bash_profile)和系统级配置(/etc/profile、/etc/bashrc),确认是否存在不同的umask设置 - 检查PAM配置文件(如
/etc/pam.d/login、/etc/pam.d/sshd),RHEL8可能默认启用了pam_umask.so的严格参数,导致会话umask被强制覆盖
2. Python 2.7编译依赖的系统库差异
两个环境的Python 2.7为独立安装,依赖的glibc版本差异会影响权限处理逻辑:
- RHEL8使用glibc 2.28,RHEL7使用glibc 2.17,后者对文件创建权限的默认处理更宽松
- 对比两个Python环境的默认创建参数:在Python交互环境执行
import os; print(oct(os.makedirs.__defaults__[0])),查看os.makedirs的默认mode值(Python 2.7标准默认是0777,会被umask过滤,若该值被编译修改则会直接影响权限) - 检查Python编译时的配置参数,RHEL8编译可能启用了安全相关的编译选项,限制了默认权限范围
3. 共享卷的挂载选项差异
共享卷在两个环境的挂载参数可能直接覆盖用户umask:
- 在两个环境执行
mount命令,查看共享卷的挂载选项,重点排查是否存在umask=077、fmask=077、dmask=077或mode=700这类参数 - 部分共享存储(如NFS)在RHEL8中可能默认启用了更严格的权限挂载策略,强制限制创建的文件/目录权限
4. SELinux安全策略影响
RHEL8的SELinux默认配置更严格,可能通过安全上下文影响权限继承:
- 执行
ls -Z查看共享卷中文件/目录的SELinux上下文,对比两个环境的差异 - 临时执行
setenforce 0关闭SELinux后重新运行脚本,若权限恢复正常,则需调整SELinux上下文(如semanage fcontext命令)或放宽相关策略
5. Python环境的自定义配置差异
检查两个Python环境是否加载了修改umask的自定义脚本:
- 查看Python的
site-packages目录,确认是否存在sitecustomize.py或其他自定义模块修改了os.umask值 - 对比两个环境的
PYTHONPATH环境变量,确认是否加载了不同的自定义代码路径
内容的提问来源于stack exchange,提问作者George Hernando
相关产品推荐
相关产品推荐

