激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

香港云服务器
服務器之家 - 腳本之家 - Python - Python實現(xiàn)在Linux系統(tǒng)下更改當前進程運行用戶

Python實現(xiàn)在Linux系統(tǒng)下更改當前進程運行用戶

2020-05-21 10:13腳本之家 Python

這篇文章主要介紹了Python實現(xiàn)在Linux系統(tǒng)下更改當前進程運行用戶,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下

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

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

那么,怎么樣在linux中更改子進程的運行身份呢?,實際上linux提供了這樣的函數(shù),來看一下python代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/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)

運行這個程序,輸入nginx(nginx為系統(tǒng)中已經(jīng)添加的用戶),然后用ps aux|grep python查看系統(tǒng)當中運行的python程序,可以看到,有一個woker進程的身份已經(jīng)改變了成為nginx了:

?
1
2
3
4
[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

因為身份為nginx的進程是用來處理請求的,那么一些屬于root的權限就不會被進程調用,也可以通過設置文件的權限,對進程操作單個文件進行限制,達到比較好的權限控制效果,減少安全隱患。

延伸 · 閱讀

精彩推薦
608
主站蜘蛛池模板: 毛片视| 亚洲国产成人久久一区www妖精 | 欧美一区成人 | 成人免费毛片在线观看 | 国产成人在线网站 | 色妞视频男女视频 | 午夜视频在线免费 | 91免费官网 | 国产1区2区3区在线观看 | 国产一区免费在线 | 91精品国啪老师啪 | 密室逃脱第一季免费观看完整在线 | 91久久国产综合精品女同国语 | 国产精品99久久久久久宅女 | 久久成人免费网 | 涩涩屋av| 中文字幕在线第二页 | 亚洲成人免费网站 | 久草在线视频看看 | 国产日韩免费观看 | 成人毛片免费看 | 91精品国产91久久久久久不卞 | 99sesese| 黄色网址免费进入 | 中国产一级毛片 | 一级黄色毛片a | 国产精品观看在线亚洲人成网 | 国产二区三区在线播放 | 久在线观看福利视频69 | 第四色成人网 | 成人综合区一区 | 欧美日韩国产成人在线观看 | 福利一区二区三区视频在线观看 | 日韩每日更新 | 青热久思思 | 国产男女 爽爽爽爽视频 | 亚洲欧洲av在线 | 国产免费最爽的乱淫视频a 午夜精品久久久久久久99热浪潮 | 国产日韩中文字幕 | 成人福利视频在线观看 | 久久精品日韩 |