2009-09-30 33 views
9

在一個Linux機器上,我想運行一個Python腳本作爲另一個用戶。作爲另一個用戶運行python腳本

我已經用C++編寫了一個調用腳本的包裝程序,因爲我意識到運行腳本的所有權取決於Python解釋器的所有權。之後,我將C++程序更改爲不同的用戶並運行C++程序。

這種設置似乎沒有工作。有任何想法嗎?

+0

你的其他用戶沒有權限運行'python'嗎? – Arkady 2009-09-30 16:35:40

+2

這不是一個運行Python的問題。腳本需要做一些需要特定權限的事情。我不想給所有用戶這些權限。該腳本的行爲有點像控制權限授予者,但首先腳本需要權限本身... – johannix 2009-09-30 16:37:14

+0

@johannix我也遇到了確切的問題。你有沒有找到任何解決方法? – Anubis 2014-08-01 04:55:33

回答

4

這聽起來像你想使用的setuid

+0

請記住,這不會更改所有環境變量。即'〜/'仍然會擴展到'/ home/old_user /',這可能會導致更多的麻煩。 – 2014-05-01 21:34:10

0

使用命令sudo

爲了以用戶身份運行程序,系統必須「認證」該用戶。

顯然,root可以像任何用戶一樣運行任何程序,任何用戶都可以用su給另一個用戶使用密碼。

程序sudo可以配置爲允許一組用戶將特定的命令作爲特定的用戶。

例如,您可以創建組scriptUsers和用戶scriptRun。然後,配置sudo以讓scriptUsers中的任何用戶成爲scriptRun,僅用於運行腳本。

+0

不能使用sudo,因爲腳本需要被其他人使用。 – johannix 2009-09-30 16:34:37

1

爲這些用戶提供sudo su $dedicated_username的能力,並定製系統上的權限,以便$dedicated_user具有足夠的訪問權限,但不是過度訪問權限。

11

您可以設置os.setuid(用戶),你可以得到與PWD的UID。 像這樣:

>>> import pwd, os 
>>> uid = pwd.getpwnam('root')[2] 
>>> os.setuid(uid) 

顯然,這只是工作,如果用戶或執行有這樣做的權限。究竟如何設置我不知道。如果你是根,它顯然是有效的。我認爲你可能需要Python可執行文件中的setuid標誌,這會留下一個WHOPPING安全漏洞。如果你設置的用戶也是一個專門的受限用戶,除了你需要做的事情不能做任何事情,這可能是可以允許的。

基於用戶和設置以及其他東西的Unix安全性不是很好或不實用,而且很容易留下大的安全漏洞。一個更安全的選項實際上是做這種客戶端服務器類型,所以你有一個惡魔,做任何事情,並與客戶談話。然後,惡魔可以以比用戶更高的安全性運行,但是用戶在運行腳本時必須提供名稱和密碼,或者使用某些公鑰/私鑰或其他身份標識自己。

+0

我在從Ubuntu初始化腳本運行的腳本中使用此代碼,並且它不需要python可執行文件上的setuid位。 – EarlCrapstone 2014-11-13 02:43:28

+0

如果您是root或sudo腳本,它將無setuid位工作。 – 2014-11-14 11:16:56

相關問題