初學Linux之用戶、組和權限
前面我們了解了計算機標準I/O 和管道的主要知識,理解了系統中的數據輸入端口和輸出端口,以及將數據以數據流進行傳遞的處理方法。有數據,就會有輸入數據的人,輸入的數據需要以文件的方式進行保存,為了數據的安全,不同的人對數據的所有權限是不同的,當使用的人多了,會有分組的情況。 若是我們將輸入數據的人稱作用戶,那么多個用戶也就形成了用戶組,不同的用戶都有自己的文件,為了數據的安全,有必要對自己或者組,以及他人文件的設置對應的操作權限,防止破壞他人的數據,也保護了自己的數據。
到此,我們需要學習對用戶、組和權限進行相關設置的方法,這是非常重要的。
一、用戶和組管理命令
在了解用戶和組管理命令之前,基于Linux一切皆文件的理念,我們有必要了解哪些文件是用戶和組相關的文件,以及這些文件的相關權限。
1、用戶相關
與用戶本身相關的文件是 /etc/passwd? ,這個文件包含了以下方面的信息:
?
通過這些簡單的信息,可以看出這個文件是存儲用戶基本的信息的文件,我們在主機登陸時提交的用戶名和密碼,必須要和這個文件中的相對應才能成功登陸系統。從這方面來看,這個文件本身也是非常重要,由于涉及到系統登陸信息,若是有任何的不慎造成刪除或者修改,都會導致某個用戶無法登陸,若是管理員(root)的信息被惡意修改,也會導致系統無法正常啟動的情況。文件中每個用戶處理本身的UID外還有一個 GID,除了系統或者人為指定的情況外,這個GID是和UID在數字上一般是相同的,這也說明,一個用戶在創建后,本身還會同時創建一個以這個用戶為組名的“組”。另外文件中的密碼都是X代替,沒有直接顯示,說明還有一個文件是針對密碼進行描述的,和用戶密碼對應的文件就是? /etc/shadow 。
? ??
使用 cat? 命令分別打開兩個文件,可以看到一個兩個文件的用戶是一一對應的,同時可以看到管理員帳戶(root)和下面那些 shell 為/sbin/nologin的用戶相比,多了很長的一段字符串,在這里可以知道,這個字符串本身就是密文加密過的用戶密碼。正常情況下,需要手動登陸的用戶也是有加密過的密碼,同時,只要加密的密碼才是正常有效的,若是明文密碼出現在 /etc/shadow 用戶名的后面,即使登錄時輸入一致也是無法登陸的。/etc/shadow 文件的信息格式如下(以分號隔開)?
對用戶進行管理的命令,就是對以上者這些信息進行管理的,一般包括 useradd、usermod、userdel,分別對應的是添加新用戶,對已有用戶進行修改,對已有用戶進行刪除的操作。
useradd 命令使用方法非常的通俗易懂,當然,若是缺省了這些選項的情況下,系統也有默認指定信息的。在 /etc/default/useradd 文件中,就定義了useradd 命令沒有任何選項指定的情況下,創建新用戶的信息。
顯示或更改默認設置的命令: useradd -D ;useradd –D -s SHELL ;useradd –D –b BASE_DIR ;useradd –D –g GROUP 。
由于都是對用戶本身的相關信息進行設置,所有 usermod 命令就有很多選項定義的內容和 useradd 相同,比如? -u、-g、-G、-s、-d、-c,這幾個選項也是比較常用的。
userdel 是刪除已有用戶的命令,它的使用比較簡單,只有一個 -r 選項,去除用戶的同時,刪除對應的家目錄。
還有一些常用的和用戶相關的命令:id ,su。
id 這個命令可以隨時查看用戶相關的ID信息,用法如右圖所示。
su?命令是在當前的端口不退出登陸的情況下,直接切換到指定用戶的身份進行操作的命令。可以使用 exit 命令回到原先的用戶。
newusers 命令根據數據格式和 /etc/passwd 文件相同的文件,批量地創建用戶。
以上以及描述了和用戶相關的命令,接下來是關于用戶密碼相關的命令:passwd ,chage。
passwd 命令是設置密碼的命令,沒有選項的情況下,可以對用戶的密碼進行修改;在使用選項的情況下,可以對密碼的屬性進行相關操作。而 chage 命令本身只是對密碼的相關屬性進行設置的命令,不能對用戶的密碼進行修改。
另外,chfn 命令可以交互式的指定用戶的GECOS信息,chsh 命令則是交互式的指定用戶的shell,finger 命令可以顯示用戶的相關信息。我們可以查詢 man 幫助列表,對這些命令作進一步的了解。
2、組相關
前文介紹了用戶相關的文件和命令,對應的,用戶的組也有對應的文件。文件包括 /etc/group 和/etc/gshadow ,它們分別對應的是用戶組基本的信息,以及用戶組密碼的管理。文件中的內容是一一對應,也有互相重復的情況,值得注意的是,/etc/gshadow 文件中的組管理員列表指定的是用戶組的管理員。
? ? ? ?
? ??
和用戶組相關的命令包括 groupadd、groupmod、groupdel,分別對應的是用戶組的添加(只有組沒有對應id的用戶),組屬性的修改,用戶組的刪除。
groupadd中的 -r? 選項是針對系統組的,useradd命令也是有這個選項的,系統用戶和系統組是Linux操作系統啟動過程中對一些啟動相關文件進行使用而建立的,系統安裝成功后自動存在的, 這些用戶和組的shell類型是/sbin/nologin? ,本身不具備登陸功能。這些組很簡單的對組本身的屬性(ID、名稱)進行了定義,但是對組內部的數據是無法修改的,比如說密碼、成員等等,這就需要下面兩個命令:gpasswd、groupmems。
??
gpasswd命令在不加選項的情況下,可以更改指定組的密碼,-A 選項也可以設置組管理員。
二、理解文件權限和默認權限
以上我們已經了解了用戶和組相關的文件、命令,是否是所有的成員對這些文件,命令都能任意使用呢?當然不是的,我們用su 命令臨時切換到wang用戶身份,使用 cat 命令可查看 /etc/passwd 文件的內容,當使用 nano 工具對這個文件進行修改時,退出保存出現了報錯提示: [ Error writing /etc/passwd: Permission denied ] 。說明wang 用戶的身份對于 /etc/passwd 這個文件,可以讀取數據,但是不能寫入更改。
讀寫的英文單詞分別是 read、write ,對應的首字母是 r、w ,我們列表顯示 /etc/passwd ,發現文件類型(文件系統)到大小之間的顯示是? :rw-r–r– ? root root? (略去鏈接數),這個信息就表示權限、所有者(創建用戶)、所屬組(創建時所在的組),權限有9個字符,前三個是和所有者相關,中間三個是所屬組相關,最后三個是和其他人相關。每三個分別對應 r 、w 、x,這里的 x 對應的英文單詞是 execute ,取第二個字母 x ,是執行權限,普通文件一般是不帶的,一般是二進制的程序文件或者是腳本文件帶有,目錄是要有 x 的,這個 x 項決定了對應的用戶是否能夠進入到目錄的內部。對文件權限的理解有以下總結:
使用管理員帳戶root 和普通用戶 wang 分別在自己的家目錄中創建文件和目錄,查看兩者的區別。
?
可以看到,不同用戶創建文件和目錄的默認權限是不相同的,為了方便輸入和表示,可以使用對應的數字進行代替(括號中的是二進制):r=4(100),w=2(010),x=1(001)。對應所有者、所屬組、其他用戶,再將這些單獨的數字進行相加,之后組合成三個數字的組合,上面圖片中的文件目錄權限的數字表示分別是:aaa(644)、ccc(755)、bbb(664)、ddd(775)。
這個是由用戶的 umask 值決定的,非特權用戶umask是 002 ,root 的 umask 是 022 ,umask 值可以使用 umask 命令設置并查看,用法如下:
? ? ? ??
對于umask值計算得到創建文件和目錄的默認權限的算法原理(以root為例)如下:
簡單的總結就是:新建FILE權限: 666-umask 如果所得結果某位存在執行(奇數)權限,則將其權限+1 。新建DIR權限: 777-umask。這些計算都是二進制計算后轉換成10進制表示的。
三、設置文件權限
? ? ? ? 當我們創建的文件或目錄的默認權限不滿足我們使用的情況下,有必要對一些文件的權限進行更改,比如,普通用戶對這個文件無法讀取,但是又需要讀取和了解文件的內容,這時可以對文件加上 r 權限,就能成功的解決,若是有的目錄,我不希望其他的用戶查看,更改,進入,則將這個文件的權限設置為770,那么除了所有者和屬組里的用戶,就沒有辦法訪問這個目錄了。
在更改具體的權限前,我們可以嘗試更改文件的所有者和所屬的組。chown 設置文件的所有者 ,chgrp 設置文件的屬組信息。
更改用戶權限的命令是:chmod? ,這個命令的用戶有兩者模式,一個是字母表示,另一個是數字表示,字母表示時:u 、g 、o 分別對應的是所有者(user)、所屬組(group)、其他用戶(others),這樣是比較直觀的。也可以使用數字法一步到位,輸入命令時是比較簡單的。具體的用法和示例如下:
? ?
四、特殊權限
前面我們提到了 /etc/shadow 這個文件是root?用戶才具有 w 權限的,但是實際中,我們登陸 wang 用戶,使用 passwd 命令,更改了用戶wang 的登陸密碼,之后打開/etc/shadow 文件,發現文件的密碼出現了變化,這是如何情況呢?其實這不是對文件的之間修改,只是通過一個命令實現的操作,我們可以查看這個命令對應的文件進行了解。
圖片中我們可以看到,這個/usr/bin/passwd 文件普通用戶是有執行權限的,但是對應 /etc/passwd,普通用戶是沒有執行權限的,但是在權限上的 所有者的權限 x 位是 s,不是x,這里就是后面的原因了,這個就是接下來學習的 文件的特殊權限。
文件的特殊權限有三個,分別是 SUID 、SGID、Stiky。
1、SUID
SUID 是在可執行文件上設置的特殊權限,在文件的權限位顯示位所有者的 x 位,以 s 顯示。這個特殊權限的作用是讓普通的用戶在執行有 x 權限的程序文件時,本身暫時成為了程序文件的所有者,這時,這個普通用戶就可以對文件所有者對應的文件進行程序文件對應的操作。還是以 passwd 這個命令為例,passwd 對應的程序文件 /usr/bin/passwd 已經設置了SUID,同時普通用戶有 x 權限,文件的所有者是 root ,當普通的用戶 wang 執行 passwd 命令時,由于SUID 的作用,此時,用戶wang暫時以root的身份執行 passwd 程序對應的操作,就對 所有者為root的文件具備了相應的權限,/etc/passwd 文件所有者是 root ,對應的權限是 r 和 w ,最終,用戶 wang通過這個命令,對/etc/passwd 文件完成了w操作。
需要注意的是 SUID 只對二進制可執行程序有效,若是對目錄進行設置,本身是沒有意義的。設定的方法是:(1)chmod u+s FILE… (2)chmod u-s FILE…(3)chmod 4755 (數字法) FILE….? ;
2、SGID
從SGID的名稱上,我們就可以看出,這個是作用在文件或者目錄權限的屬組 x 位上,它的數字表示位 2 ,特點是:作用在可執行程序文件上時,對文件有執行權限的普通用戶,將獲得屬組的身份,此時,對屬組的文件可以執行程序文件對應的操作;作用在目錄上,對目錄有 w 權限的用戶,在這個目錄下新建的目錄,將繼承目錄的所屬組,同時還會繼承 SGID,創建的文件不會繼承 SGID。
SGID的設定 :(1)chmod g+s FILE… ;(2)chmod g-s FILE… ;(3)chmod 2644 FILE… ; (4) ?chmod g+s DIR… ;(5)chmod g-s DIR…;(6)chmod 2755? DIR… ;
3、Stiky
Stiky 稱作為粘滯位 ,顯示在目錄權限 other 的 x 位,權限的字母表示為 t ,數字表示為 1 ,只能作用在目錄,具有sticky權限的目錄,普通用戶只能刪除自己的文件。
設置的方法:(1)chmod o+t 目標目錄… ;(2)chmod o-t 目標目錄… ;(3)chmod 1775 目標目錄…? 。
注:SUID 、SGID 、Stiky 三個特殊權限都是在對應的權限有 x 權限下生效的,若是文件或者目錄去除了 x 權限,那么三個特殊權限也會失效,此時在文件權限位上的表示,由原來的小寫變為大寫。
五、ACL
ACL:Access Control List,對文件和目錄實現靈活的權限管理 ,除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限。需要指出的是:CentOS7 默認創建的xfs和ext4文件系統具有ACL功能 ?CentOS7 之前版本,默認手工創建的ext4文件系統無ACL功能,需手動通過兩步命令增加? (1)tune2fs –o acl /dev/sdb1; (2)mount –o acl /dev/sdb1 /mnt/test 。ACL生效順序:所有者,自定義用戶,自定義組,其他人 。用戶權限優先 (若是匹配到用戶權限,組權限再大也不匹配), 多個組累加權限。
在沒有任何人為更改的情況下,文件和目錄本身是具備基礎的 ACL ,稱為 base ACL ,在對 ACL 進行的設置更改后,查詢的ACL將是 extended ACL 。base ACL 是不能清除的,清除了 extended ACL 后,將還原到文件最初的 base ACL 。
? ? ? ?
查看某個文件或者目錄的 ACL信息 :getfacl file | directory 。
設置ACL的命令是 setfacl ? ,具體的用法如下:
當我們設置了 extended? ACL 之后,ACL信息中會出現一個 mask 選項,ACL文件上的group權限是mask 值(自定義用戶,自定義組 ,擁有組的最大權限),而非傳統的組權限 ,自定義用戶、自定義組 、擁有組,只有在這個mask 值范圍內的權限才會生效,若是設定的超出了mask 權限的范圍,一般在ACL信息中會出現實際生效權限的提示。單獨設置ACL中的 mask 權限值的方法示例: ? setfacl -m mask::rx file? 。 ?
注意:通過ACL賦予目錄默認x權限,目錄內文件也不會繼承x權限 。
ACL是可以備份的,主要的文件操作命令cp和mv都支持ACL,只是cp命令需要 加上-p 參數。但是tar等常見的備份工具是不會保留目錄 和文件的ACL信息 。使用了不支持ACL 的命令對文件或者目錄進行操作,設置了extended ACL 的可以備份后再恢復即可。
(1)getfacl -R /tmp/dir1 > acl.txt ;(2) setfacl –restore acl.txt ? (在哪個目錄下備份 getfacl ,就在哪個目錄下操作)。
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/89680