我想知道Linux中的進程如何決定它擁有什麼特權? 假設有一個從文件/home/myname/data.txt讀取的二進制程序「Read_File」,並將其內容顯示到STD輸出,現在Read_File如何決定它是否有權讀取data.txt,它檢查什麼類型的ID來確定特權?Linux中的進程如何決定分配給它的權限
回答
首先,有點背景:
該過程通常由特定用戶運行。例如,如果您自己登錄並運行該程序,它將以與您自己相同的權限運行。您可以使用stat
或ls -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被分解成名稱(在這種情況下爲malbert
和domain users
)。您可以使用ls -u
將它們看作數字值。
如果你想要運行的應用程序作爲不同用戶爲自己,你既可以使用su
,sudo
或您的應用程序本身可以刪除權限的,改變正在運行的用戶。這通常是系統守護進程執行操作的方式。
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。但是,你不知道,這不是一個發展問題,但更多與操作系統有關,我覺得我應該無論如何;)
祝你好運,玩得開心!
這個過程並不決定什麼;每當它嘗試一個操作時,操作系統檢查它是EUID並決定是否具有所需的權限。
例如,當它試圖訪問文件時,將檢查文件的所有者和權限。如果進程的EUID沒有足夠的操作權限,則該操作將失敗(通常使用EPERM
)。
- 1. Linux設備驅動程序:如何分配組/用戶權限並使用它?
- 2. 如何給sudo權限運行進程
- 3. Yii/Linux上的Web進程權限
- 4. 如何將權限分配給laravel4中的不同用戶?
- 5. 如何將有限的控制檯程序訪問權限分配給IIS 6?
- 6. 如何改進分配網格權限的方法
- 7. 如何給Linux應用程序提供root權限
- 8. 如何生成具有繼承權限和權限的進程
- 9. 在linux中爲進程分配內存
- 10. 如何在asp.net中以編程方式分配頁面權限?
- 11. 如何解決給定內存限制的給定場景?
- 12. 如何通過PHP將只讀權限分配給excel中的單元格?
- 13. 因爲它是PID的進程在Linux中的所有權因爲它是PID
- 14. 爲IIS應用程序分配權限
- 15. 如何在窗口中提供特定進程權限
- 16. Linux中子進程的系統限制
- 17. ptrace PTRACE_ATTACH失敗 - 用戶擁有進程的Linux權限
- 18. Linux更改組權限以匹配所有者權限
- 19. 如何在具有高度受限特權的Linux上啓動進程?
- 20. Drupal:分配給「文件」文件夾的權限
- 21. 的Solaris 10 - 如何查看限制給定進程
- 22. Unix/Linux系統的權限
- 23. 給予自定義權限
- 24. 給程序寫權限
- 25. 分配文件夾VBA的權限
- 26. 如何解決安裝定製內置gem的權限錯誤?
- 27. 如何在停止狀態下分配Linux進程?
- 28. Linux文件權限
- 29. Linux權限問題
- 30. Linux文件權限
是否UID扮演任何角色? – Yadnesh 2011-06-10 11:08:44
@Yadnesh閱讀http://en.wikipedia.org/wiki/User_identifier – cnicutar 2011-06-10 11:10:17