文件權限及目錄
初學Linux,感覺這個東西該復雜,而且邏輯非常的強。難~!
自己根據學習到的理論和實踐,得出的對文件權限,進程,以及特殊權限的深入理解。希望能解決初學者對于權限的困惑。如有錯誤請指正。
文件的權限,指定的是什么?
是文件的權限位上的權限,針對三類用戶,任何用戶都必須是三類用戶中的一種,屬主屬組和其他人的權限rwx -rw-r--r--. 1 root root 3 Jul 23 16:20 a -rw-------. 1 root root 1482 Jul 20 17:12 anaconda-ks.cfg -rw-r--r--. 1 root root 21 Jul 23 16:38 bc drwxr-xr-x. 7 root root 4096 Jul 20 18:46 cheat drwxr-xr-x. 2 root root 4096 Jul 20 17:19 Desktop
系統時如何識別用戶?
登錄系統的時候,輸入用戶名和密碼。這時系統就通過用戶名解析出用戶的uid和gid。以后就靠這個識別用戶的身份。解析使用的文件 /etc/passwd
Linux是多用戶操作系統,同一用戶名登錄兩個用戶,操作系統又是如何知道那個用戶運行了什么,而且不同用戶的進程互不影響?
根據馬哥視頻將的Linux運行機制,我的個人理解如下 用戶空間,系統空間。每個用戶都有自己的用戶空間。即使是同名用戶登錄,使用的也不是相同的用戶空間。用戶空間是相互隔離的。用戶空間不能訪問系統空間。但是系統空間可以訪問用戶空間。 用戶運行程序,在內存中表現為進程,進程是用戶的代理。它繼承了用戶的uid和gid。
系統如何為用戶分配權限?。
例如一個程序cat運行了,文件的權限不是相對于cat程序本身,而是相對于cat在內存中的進程的身份uid和gid而言的。從而實現權限分配。 [user1@yangyouwei ~]$ ll /bin/cat -rwxr-xr-x. 1 root root 48568 May 11 16:59 /bin/cat [user1@yangyouwei ~]$ id uid=702(user1) gid=702(user1) groups=702(user1) [user1@yangyouwei ~]$ ll /tmp total 124 -rw-r--r--. 1 root root 29 Jul 23 15:40 code -rw-r--r--. 1 root root 2 Jul 29 22:13 homework.txt 對cat程序的權限設置是任何人都能運行,但是/tmp/code文件的權限設置是,任何人都能讀取,但是只有root用戶能夠修改該文件。其他的用戶都只能讀取不能寫入內容。
權限匹配過程
系統先比較用戶的uid與文件的屬主的uid是否同一人,是的話應用屬主權限 否則繼續比較用戶的gid與文件的屬組的gid是否一致,一致應用屬組的權限 否則應用其他人的權限。
特殊權限—身份變換的過程。
經過上面的介紹,我個人理解,suid和sgid只是系統在用戶運行程序為進程后,改變進程的屬主和組。只是個身份變換的過程。用戶(用戶發起的進程)獲取是身份而非權限。要說權限,那就是具體到,該進程要訪問那個文件,而那個文件的權限的設置才能決定用戶進程訪問該文件的權限。
通過實驗得到的結果是:先運行程序為進程后再獲取相應的身份
user1不是屬主也不是屬組。但是匹配了cat哪個權限位的x權限生效的?是其它人的x權限還是屬主的x?
[root@yangyouwei ~]# ll /tmp/cat -rwsr-xr-x. 1 root root 48568 Aug 1 15:05 /tmp/cat [user1@yangyouwei ~]$ /tmp/cat ##cat已經運行,等待用戶通過標準輸入輸入內容。 [root@yangyouwei ~]# ps aux root 2616 0.0 0.0 100944 552 pts/0 S+ 15:08 0:00 /tmp/cat 程序已經執行,進程的屬主為root。但是沒有回答上面的問題 先將屬主的x權限去掉。在執行以user1身份運行。 為了看清,先去掉執行權限,在添加suid [root@yangyouwei ~]# chmod u-x /tmp/cat [root@yangyouwei ~]# ll /tmp/cat -rw-r-xr-x. 1 root root 48568 Aug 1 15:05 /tmp/cat [root@yangyouwei ~]# chmod u+s /tmp/cat [root@yangyouwei ~]# ll /tmp/cat -rwSr-xr-x. 1 root root 48568 Aug 1 15:05 /tmp/cat 大S表示沒有指向權限 再執行cat [user1@yangyouwei ~]$ /tmp/cat 可以執行,cat運行,等待用戶通過標準輸入輸入內容。 [root@yangyouwei ~]# ps aux root 2670 0.0 0.0 100944 548 pts/0 S+ 15:20 0:00 /tmp/cat 看到已經cat已經運行。并且屬主是root
另一個蛋疼實驗??梢哉f明問題
如還有懷疑請將/tmp/cat的屬主執行權限加上,在把其他人的執行權限去掉??纯催€能運行嗎? 不做演示了,結果是user1不能運行cat程序。設置了suid的程序的屬主權限位,對于能夠運行該程序的用戶沒有影響。 即使把/tmp/cat的權限改為屬主無任何權限,其他人有執行權限,user1可以運行該程序。 對于使用/tmp/cat讀取/tmp/cat,也就是catcat自己,這種蛋疼的問題的結果是。cat可以以root身份運行,但是cat不能讀取cat程序文件。也就是執行成功,讀取失敗。 注:cat讀取cat程序,就是讀取自己程序文件,正常情況是可讀取的,就是一堆亂碼。 -rwxr-xr-x. 1 root root 48568 May 11 16:59 /bin/cat 用戶沒有權限執行程序的報錯是如下,要是做該實驗自己對比實驗結果。 [user1@yangyouwei ~]$ useradd -bash: /usr/sbin/useradd: Permission denied 用戶沒有讀取權限cat的報錯如下: [user1@yangyouwei ~]$ cat /etc/shadow cat: /etc/shadow: Permission denied
同時設置了suid和sgid的情況下,用戶是其他人,用戶運行的進程可以同時獲得文件屬主和屬組的身份。
[root@yangyouwei ~]# ll /tmp/cat -rwSr-sr-x. 1 root root 48568 Aug 1 15:05 /tmp/cat #cat的屬主x權限還沒有恢復也不影響結果。 [user1@yangyouwei ~]$ /tmp/cat #user1運行cat [root@yangyouwei ~]# ps axo user,ruser,group,rgroup,cmd root user1 root user1 /tmp/cat root root root root ps axo user,ruser,group,rgroup,cmd
對目錄操作,改名,刪除文件
根據老師所講自己整理出,目錄與文件(普通文件和目錄)的關系。 要先擺脫windows形成的慣性思維,摒棄文件夾的概念。圖形化的東西對于我們理解Linux下的原理有誤導。 目錄是什么? 目錄是文件,目錄的內容是目錄下的文件列表--有吻合了Linux一切皆文件的理論。 文件列表內容包括:由文件(目錄)名+文件(目錄)的inod 是一一對應的關系。 文件名不是文件的一部分。文件對于系統而言僅是inod元數據+數據。文件名是給用戶(人)用的。 改名和刪除目錄下的文件 改名是改變文件列表,名字改變,但是inod不變。 mv命令的工作原理: 在同一文件系統上,mv只是針對目錄操作,將目錄下的文件列表中刪除(移動到不同目錄下,且在同一文件系統下)或改名(文件位置不變,僅僅是改了名字) [root@yangyouwei ~]# ll -i /tmp total 124 3937387 -rwSr-sr-x. 1 root root 48568 Aug 1 15:05 cat 3937395 -rw-r--r--. 1 root root 29 Jul 23 15:40 codechange [root@yangyouwei ~]# mv /tmp/codechange /tmp/code #改名 [root@yangyouwei ~]# ll -i /tmp/code 3937395 -rw-r--r--. 1 root root 29 Jul 23 15:40 /tmp/code 文件的inod沒有變化。 刪除,是刪除文件名,隨之文件的硬鏈接次數發生改變,為0時,inod釋放掉,也就刪除了文件。如果inod不為零,文件(數據)也沒有被刪除, cp命令的工作原理: 先建立一個空文件(新的inod),在將文件讀取到內存中,以數據流的方式填充到新建的空文件里,完成后再刪除原文件。 [root@yangyouwei ~]# cp /tmp/code ./codecp root@yangyouwei ~]# ll -i ./code 3937395 -rw-r--r--. 1 root root 29 Jul 23 15:40 /tmp/code [root@yangyouwei ~]# ll -i ./codecp 1442418 -rw-r--r--. 1 root root 29 Aug 1 16:02 ./codecp
原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/31873