2011-06-10 72 views
1

我想知道Linux中的進程如何決定它擁有什麼特權? 假設有一個從文件/home/myname/data.txt讀取的二進制程序「Read_File」,並將其內容顯示到STD輸出,現在Read_File如何決定它是否有權讀取data.txt,它檢查什麼類型的ID來確定特權?Linux中的進程如何決定分配給它的權限

回答

3

首先,有點背景:

該過程通常由特定用戶運行。例如,如果您自己登錄並運行該程序,它將以與您自己相同的權限運行。您可以使用statls -l檢查文件的權限。

使用stat

[email protected]:/tmp$ stat foo 
    File: `foo' 
    Size: 0    Blocks: 0   IO Block: 4096 regular empty file 
Device: fb00h/64256d Inode: 618   Links: 1 
Access: (0644/-rw-r--r--) Uid: (11204/ malbert) Gid: (10513/domain users) 
Access: 2011-06-10 13:03:27.181227226 +0200 
Modify: 2011-06-10 13:03:27.181227226 +0200 
Change: 2011-06-10 13:03:27.181227226 +0200 

重要的相關信息這裏有:

Access: (0644/-rw-r--r--) Uid: (11204/ malbert) Gid: (10513/domain users) 

這告訴你的老闆(rw-),組(r--)和其他人(權限r--)。它還會顯示當前所有者ID(Uid)和當前組ID(Gid)。

的縮寫代表:

  • r =讀訪問
  • w =寫訪問
  • x =執行/遍歷目錄的訪問

使用ls -l

ls -l給你一個快速摘要:

[email protected]:/tmp$ ls -l /tmp 
total 48 
drwx------ 2 malbert domain users 4096 2011-06-10 08:51 akonadi-malbert.zOSngu 
-rw-r--r-- 1 malbert domain users 0 2011-06-10 13:03 foo 
drwx------ 2 kdm  nogroup  4096 2011-06-10 08:51 kde-kdm 
drwx------ 3 malbert domain users 4096 2011-06-10 08:51 kde-malbert 
[snip] 

在這裏你可以看到相同的信息與stat,但作爲一個總結。另外,uid和gid被分解成名稱(在這種情況下爲malbertdomain users)。您可以使用ls -u將它們看作數字值。

如果你想要運行的應用程序作爲不同用戶爲自己,你既可以使用susudo您的應用程序本身可以刪除權限的,改變正在運行的用戶。這通常是系統守護進程執行操作的方式。

ACLs /擴展屬性

請注意擴展屬性。使用ls -l列出文件時,可以通過附加的+符號來顯示這些文件。例如:

[email protected]:/tmp$ ls -l 
total 48 
drwx------ 2 malbert domain users 4096 2011-06-10 08:51 akonadi-malbert.zOSngu 
-rw-rwxr--+ 1 malbert domain users 0 2011-06-10 13:03 foo 
drwx------ 2 kdm  nogroup  4096 2011-06-10 08:51 kde-kdm 
drwx------ 3 malbert domain users 4096 2011-06-10 08:51 kde-malbert 
[snip] 

通知下面的行:

-rwxr--+ 1 malbert domain users 0 2011-06-10 13:03 foo 

+符號在-rwxr--+點擴展屬性。這些可能是ACL。 SuSE文檔中有an excellent document on ACLs。如果需要,請去看看它。解釋ACL肯定會爆炸這篇文章,所以我不會討論這些。

擴展屬性也可能與文件系統有關。有關更多信息,請參閱the man page of chattr

現在,作爲旁註:這是StackOverflow。問題應該與發展有關。對於這樣的問題,有http://www.serverfault.com。但是,你不知道,這不是一個發展問題,但更多與操作系統有關,我覺得我應該無論如何;)

祝你好運,玩得開心!

1

這個過程並不決定什麼;每當它嘗試一個操作時,操作系統檢查它是EUID並決定是否具有所需的權限。

例如,當它試圖訪問文件時,將檢查文件的所有者和權限。如果進程的EUID沒有足夠的操作權限,則該操作將失敗(通常使用EPERM)。

+0

是否UID扮演任何角色? – Yadnesh 2011-06-10 11:08:44

+0

@Yadnesh閱讀http://en.wikipedia.org/wiki/User_identifier – cnicutar 2011-06-10 11:10:17