设为首页 收藏本站
查看: 1735|回复: 0

[经验分享] Python标准库09 当前进程信息 (os包)

[复制链接]

尚未签到

发表于 2015-4-25 09:28:25 | 显示全部楼层 |阅读模式
  作者:Vamei 出处:http://www.iyunv.com/vamei 欢迎转载,也请保留这段声明。谢谢!
  
  我们在Linux的概念与体系,多次提及进程的重要性。Python的os包中有查询和修改进程信息的函数。学习Python的这些工具也有助于理解Linux体系。
  

进程信息

  os包中相关函数如下:
  uname() 返回操作系统相关信息。类似于Linux上的uname命令。
  umask() 设置该进程创建文件时的权限mask。类似于Linux上的umask命令,见Linux文件管理背景知识
  
  get*() 查询 (*由以下代替)
      uid, euid, resuid, gid, egid, resgid :权限相关,其中resuid主要用来返回saved UID。相关介绍见Linux用户与“最小权限”原则
      pid, pgid, ppid, sid                 :进程相关。相关介绍见Linux进程关系
  
  put*() 设置 (*由以下代替)
      euid, egid: 用于更改euid,egid。
      uid, gid  : 改变进程的uid, gid。只有super user才有权改变进程uid和gid (意味着要以$sudo python的方式运行Python)。
      pgid, sid : 改变进程所在的进程组(process group)和会话(session)。
  
  getenviron():获得进程的环境变量
  setenviron():更改进程的环境变量
  
  例1,进程的real UID和real GID



import os
print(os.getuid())
print(os.getgid())
  将上面的程序保存为py_id.py文件,分别用$python py_id.py和$sudo python py_id.py看一下运行结果
  

saved UID和saved GID
  我们希望saved UID和saved GID如我们在Linux用户与“最小权限”原则中描述的那样工作,但这很难。原因在于,当我们写一个Python脚本后,我们实际运行的是python这个解释器,而不是Python脚本文件。对比C,C语言直接运行由C语言编译成的执行文件。我们必须更改python解释器本身的权限来运用saved UID机制,然而这么做又是异常危险的。
  比如说,我们的python执行文件为/usr/bin/python (你可以通过$which python获知)
  我们先看一下
  $ls -l /usr/bin/python
  的结果:
  -rwxr-xr-x root root
  
  我们修改权限以设置set UID和set GID位 (参考Linux用户与“最小权限”原则)

  $sudo chmod 6755 /usr/bin/python
  /usr/bin/python的权限成为:
  -rwsr-sr-x root root
  
  随后,我们运行文件下面test.py文件,这个文件可以是由普通用户vamei所有:



import os
print(os.getresuid())
  我们得到结果:
  (1000, 0, 0)
  上面分别是UID,EUID,saved UID。我们只用执行一个由普通用户拥有的python脚本,就可以得到super user的权限!所以,这样做是极度危险的,我们相当于交出了系统的保护系统。想像一下Python强大的功能,别人现在可以用这些强大的功能作为攻击你的武器了!使用下面命令来恢复到从前:
  $sudo chmod 0755 /usr/bin/python
  
  关于脚本文件的saved UID/GID,更加详细的讨论见
  http://www.faqs.org/faqs/unix-faq/faq/part4/section-7.html
  

总结
  get*, set*
  umask(), uname()

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60445-1-1.html 上篇帖子: 用Python模拟浏览器操作 下篇帖子: 不可错过的MSDN TV —— IronPython: Python on the .NET Framework (上)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表