最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)在Linux系統(tǒng)下更改當(dāng)前進(jìn)程運(yùn)行用戶

 更新時間:2015年02月04日 08:56:02   投稿:junjie  
這篇文章主要介紹了Python實(shí)現(xiàn)在Linux系統(tǒng)下更改當(dāng)前進(jìn)程運(yùn)行用戶,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下

上一篇文章中,我們講了如何在linux上用python寫一個守護(hù)進(jìn)程。主要原理是利用linux的fork函數(shù)來創(chuàng)建一個進(jìn)程,然后退出父進(jìn)程運(yùn)行,生成的子進(jìn)程就會成為一個守護(hù)進(jìn)程。細(xì)心觀察的可能會發(fā)現(xiàn),這個守護(hù)進(jìn)程的運(yùn)行身份是執(zhí)行這個程序的用戶,如果把這個守護(hù)程序加入到系統(tǒng)的服務(wù)項(xiàng),那么這個守護(hù)程序的執(zhí)行身份應(yīng)該是root。

一個情況出現(xiàn)了,root的權(quán)限比較大,如果通過這個root身份的守護(hù)程序來進(jìn)行操作,危險性是比較大的。一種好的辦法是生成一個身份為root的master進(jìn)程用來接受請求,生成若干個woker進(jìn)程用來處理請求,這樣就不會出現(xiàn)權(quán)限過大問題。事實(shí)上,現(xiàn)在很多軟件,nginx,mysql,apache,vsftpd等幾乎都是這樣做的。

那么,怎么樣在linux中更改子進(jìn)程的運(yùn)行身份呢?,實(shí)際上linux提供了這樣的函數(shù),來看一下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)

運(yùn)行這個程序,輸入nginx(nginx為系統(tǒng)中已經(jīng)添加的用戶),然后用ps aux|grep python查看系統(tǒng)當(dāng)中運(yùn)行的python程序,可以看到,有一個woker進(jìn)程的身份已經(jīng)改變了成為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

因?yàn)樯矸轂閚ginx的進(jìn)程是用來處理請求的,那么一些屬于root的權(quán)限就不會被進(jìn)程調(diào)用,也可以通過設(shè)置文件的權(quán)限,對進(jìn)程操作單個文件進(jìn)行限制,達(dá)到比較好的權(quán)限控制效果,減少安全隱患。

相關(guān)文章

最新評論

天柱县| 内黄县| 阳新县| 上杭县| 灌阳县| 黑水县| 阳新县| 信宜市| 上杭县| 轮台县| 民县| 鸡泽县| 西乌珠穆沁旗| 冷水江市| 栾川县| 阳城县| 清新县| 新平| 汝南县| 景东| 河南省| 中超| 姜堰市| 白水县| 利津县| 文山县| 江阴市| 张掖市| 连云港市| 合江县| 西乌| 东山县| 平昌县| 玉田县| 高青县| 东莞市| 万源市| 渭南市| 隆林| 碌曲县| 万全县|