• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python实现在Linux系统下更改当前进程运行用户

Python实现在Linux系统下更改当前进程运行用户

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了linux很多python进程,linux python,linux python安装,python linux下载,linux安装python2.7等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在上一篇文章中,我们讲了如何在linux上用python写一个守护进程。主要原理是利用linux的fork函数来创建一个进程,然后退出父进程运行,生成的子进程就会成为一个守护进程。细心观察的可能会发现,这个守护进程的运行身份是执行这个程序的用户,如果把这个守护程序加入到系统的服务项,那么这个守护程序的执行身份应该是root。

一个情况出现了,root的权限比较大,如果通过这个root身份的守护程序来进行操作,危险性是比较大的。一种好的办法是生成一个身份为root的master进程用来接受请求,生成若干个woker进程用来处理请求,这样就不会出现权限过大问题。事实上,现在很多软件,nginx,mysql,apache,vsftpd等几乎都是这样做的。

那么,怎么样在linux中更改子进程的运行身份呢?,实际上linux提供了这样的函数,来看一下python代码:

#!/usr/bin/env python
import time,os,pwd,sys,signal
logfile="/tmp/d2.log"
#step one, get the username you want to running with
try:
    user=sys.argv[1]
except:
    user=raw_input('Please input a username in this machine you want to run this program: ')
if user=="":sys.exit(-1)
try:
    uid=pwd.getpwnam(user)
    uid=uid.pw_uid
except:
    print "Uer not exists!"
    sys.exit(-1)
#step two:Generation of daemon
pid=os.fork()
if(pid):sys.exit(0)
os.setsid()
os.chdir("/")
os.umask(0)
#step three :fork again
pid=os.fork()
if(pid==0):
    os.setuid(uid)
    os.setsid()
    os.chdir("/")
    os.umask(0)
log=open(logfile,'a')
log.write('Daemon start up at %s\n'%(time.strftime('%Y:%m:%d',time.localtime(time.time()))))
log.close()
def reload(a,b):
  log=open(logfile,'a')
  log.write('Daemon reload at %s\n'%(time.strftime('%Y:%m:%d',time.localtime(time.time()))))
  log.close()
while True:
  signal.signal(signal.SIGHUP,reload)
  time.sleep(2)

</div>

运行这个程序,输入nginx(nginx为系统中已经添加的用户),然后用ps aux|grep python查看系统当中运行的python程序,可以看到,有一个woker进程的身份已经改变了成为nginx了:

[root@home ~]# ps aux|grep python
root   1139 0.0 0.5  5288 2372 ?    Ss  22:40  0:00 python ./d2.py nginx
nginx   1140 0.0 0.5  5288 2360 ?    S  22:40  0:00 python ./d2.py nginx
root   1151 0.0 0.1  2336  648 pts/0  S+  22:50  0:00 grep python

</div>

因为身份为nginx的进程是用来处理请求的,那么一些属于root的权限就不会被进程调用,也可以通过设置文件的权限,对进程操作单个文件进行限制,达到比较好的权限控制效果,减少安全隐患。

</div>

您可能想查找下面的文章:

  • Python实现在Linux系统下更改当前进程运行用户
  • 使用Python编写Linux系统守护进程实例

相关文章

  • python制作websocket服务器实例分享
  • Python开发的实用计算器完整实例
  • 零基础写python爬虫之神器正则表达式
  • Python中的Classes和Metaclasses详解
  • python定时器(Timer)用法简单实例
  • Python中实现远程调用(RPC、RMI)简单例子
  • python查找第k小元素代码分享
  • 详解Python中列表和元祖的使用方法
  • python分割列表(list)的方法示例
  • 简单谈谈Python中的几种常见的数据类型

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python 基础知识之字符串处理
    • 深入讲解Python编程中的字符串
    • Python上传package到Pypi(代码简单)
    • 用Python实现QQ游戏大家来找茬辅助工具
    • Python实现多线程抓取妹子图
    • Python的Flask框架标配模板引擎Jinja2的使用教程
    • 深入解读Python解析XML的几种方式
    • 用Python中的wxPython实现最基本的浏览器功能
    • python使用win32com在百度空间插入html元素示例
    • python使用PyGame模块播放声音的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有