天天看點

了解 Linux 檔案權限

contents

  • ​​Linux 的安全性​​
  • ​​/etc/passwd 檔案​​
  • ​​時間戳換算​​
  • ​​/etc/shadow​​
  • ​​添加新使用者​​
  • ​​使用者預設值配置檔案​​
  • ​​使用者模闆目錄​​
  • ​​使用者的家目錄 —— 添加使用者後自動建立​​
  • ​​删除使用者​​
  • ​​修改使用者指令​​
  • ​​usermod​​
  • ​​passwd 和 chpasswd​​
  • ​​chsh、chfn 和 chage​​
  • ​​使用者切換​​
  • ​​使用者管理指令 —— who​​
  • ​​使用者管理指令 —— w​​
  • ​​使用 Linux 組​​
  • ​​/etc/group 檔案​​
  • ​​建立新組​​
  • ​​修改組​​
  • ​​删除使用者組​​
  • ​​把使用者添加入組或從組中删除​​
  • ​​了解檔案權限​​
  • ​​使用檔案權限符​​
  • ​​預設檔案權限​​
  • ​​改變安全性設定​​
  • ​​改變權限​​
  • ​​改變所屬關系​​
  • ​​共享檔案​​
  • ​​SetUID​​
  • ​​SetGID​​
  • ​​Sticky BIT​​

Linux 的安全性

每個能進入 Linux 系統的使用者都會被配置設定唯一的使用者賬戶,使用者系統對各種對象的通路權限取決于他們登入系統時用的賬戶。使用者權限使用過建立使用者時配置設定的 UID 來跟蹤的,每個使用者都有唯一的 UID,在登入時,使用者用來登入系統的最長八字元的字元串,會關聯一個對應的密碼。

/etc/passwd 檔案

Linux 系統有一個專門的檔案來将使用者的登入名比對到對應的 UID 值。這個檔案就是 /etc/passwd 。

Linux 系統會為各種各樣的功能建立不同的使用者賬戶,而這些賬戶并不是真正的使用者。這些賬戶叫做系統賬戶,是系統上運作的各種服務程序通路資源用的特殊賬戶,所有運作在背景的服務都需要一個系統使用者賬戶登入到 Linux 系統上,即使有人攻入了某個服務,也無法通路整個系統。

Linux 為系統賬戶預留了 200 以下的 UID 值。

登陸使用者名:使用者密碼:UID(0:超級使用者、1-499:系統使用者、500-65535:普通使用者):GID(初始組:就是指使用者一登陸就立刻擁有這個使用者組的相關權限,每個使用者的初始組隻能有一個,一般就是和這個使用者的使用者名相同的組名作為這個使用者的初始組。每個使用者隻能有一個初始組。不推薦修改初始組。附加組:指使用者可以加入多個其他的使用者組,并擁有這些組的權限,附加組可以有多個。):使用者賬戶的文本描述:使用者HOME目錄的位置:使用者的預設shell

其中密碼字段均被設定成x的原因是,Linux系統将使用者密碼儲存在另一個單獨的檔案中,隻有特定的程式才能夠通路這個檔案。

雖然可以使用文本編輯器編輯 /etc/passwd 檔案,但是操作不當容易造成使用者無法登陸,是以,使用标準的使用者管理工具去執行這些使用者管理功能會安全很多。

時間戳換算

  • 時間戳換算為日期

    date -d “1970-01-01 16006 dayg”

  • 日期換算為時間戳

    echo(date --date=“2014/0106”+%s)/86400+1))

/etc/shadow

隻有 root 使用者可以通路。

與/etc/passwd檔案中的登入名字段對應的登入名:加密後的密碼:自上次修改密碼後過去的天數:多少天後才能更改密碼:多少天後必須更改密碼:密碼過期前提前多少天提醒使用者更改密碼:密碼過期後多少天禁用使用者賬戶:使用者賬戶被禁用的日期:預留字段給将來使用

使用者名:加密密碼(加密算法更新為 SHA512 散列加密算法。如果密碼位是 !! 或 * 代表沒有密碼,不能登入):密碼最後一次修改日期(使用1970.1.1作為标準時間,每過一天加1):設定兩次密碼的修改間隔時間:密碼有效期:密碼修改到期警告時間:密碼過期後的寬限天數(0:密碼到期後失效,-1:密碼永遠不會失效):賬号失效時間:保留

添加新使用者

指令名稱: useradd

指令英文原意:

指令所在路徑: /usr/sbin/useradd

執行權限: root

功能描述: 添加新使用者

文法: useradd [選項] 使用者名

user [選項]使用者名      
useradd -u 550 -G root,bin -d /home/lamp1 -c "test user" -s /bin/bash sc      
參數 描述
-c comment 給新使用者添加備注
-d home_dir 為主目錄指定一個名字
-e expire_date 用 YYYY-MM-DD 格式指定一個賬戶過期的日期
-f inactive_days 指定這個賬戶密碼過期多少天這個賬戶被禁用,0表示密碼已過期就立即禁用,1表示禁用這個功能
-g initial_group 指定使用者登陸組的GID或組名
-G group… 指定使用者除登陸組之外所屬的一個或多個附加組
-k 必須和 -m 一起使用,将 /etc/skel 目錄的内容複制到HOME目錄
-m 建立使用者的HOME目錄
-M 不建立使用者的HOME目錄
-n 建立一個與使用者登入名同名的新組
-r 建立系統賬戶
-p passwd 為使用者賬戶指定預設密碼
-s shell 指定預設的登入shell
-u uid 為賬戶指定唯一的 UID

使用者預設值配置檔案

/etc/default/useradd      
參數 說明
GROUP=100 使用者預設組
HOME=/home 使用者家目錄
INACTIVE=-1 密碼過期寬限天鼠
EXPIRE= 密碼失效時間
SHELL=/bin/bash 預設shell
SKEL=/etc/skel 模闆目錄
CREATE_MAIL_SPOOL=yes 是否建立郵箱
/etc/login.defs      
參數 說明
PASS_MAX_DAYS 99999 密碼有效期
PASS_MIN_DAYS 0 密碼修改間隔
PASS_MIN_LEN 5 密碼最小5位
PASS_WARN_AGE 7 密碼到期警告
UID_MIN 500 最小和最大 UID 範圍
GID_MAX 60000
ENCRYPT_METHOD SHA512

系統預設值被設定在/etc/default/useradd檔案中,可以使用 -D 選項檢視預設值。

useradd 指令允許管理者建立一份預設的HOME目錄配置,然後把它作為建立新使用者HOME目錄的模闆,這樣就能自動在每個新使用者的HOME目錄裡放置預設的系統檔案。

預設情況下,useradd指令不會建立HOME目錄,但是 -m指令行選項會使其建立HOME目錄,将/etc/skel目錄中的檔案複制過來。

useradd 更改預設值的參數

參數 描述
-b default_home 更改預設的建立使用者 HOME 目錄的位置
-e expiration_date 更改預設的新賬戶的過期日期
-f inactive 更改預設的新使用者從密碼過期到賬戶被禁用的天數
-g group 更改預設的組名稱或 GID
-s shell 更改預設的登入 shell

使用者模闆目錄

​/etc/skel/​

​ 使用者家目錄的預設檔案的根拷貝。

使用者的家目錄 —— 添加使用者後自動建立

  • 普通使用者

    /home/使用者名/,所有者和所屬組都是此使用者。權限是 700.

  • 超級使用者

    /root/,所有者和所屬組都是 root 使用者,權限是 550

    将普通使用者改為 root,需要将 UID 改為 0。

删除使用者

userdel 使用者名      

預設情況下,userdel指令隻會删除/etc/passwd檔案中的使用者資訊,而不會删除系統中屬于該賬戶的任何檔案,如果加上 -r 參數,userdel會删除使用者的HOME目錄以及郵件目錄,然而,系統上仍可能存在有已删除使用者的其他檔案。

在有大量使用者的環境中使用-r參數時要小心,該使用者在他的HOME目錄下是否存放了其他使用者需要的檔案。

修改使用者指令

指令 描述
usermod 修改使用者賬号的字段,還可以指定主要組以及附加組的所屬關系
passwd 修改已有使用者的密碼
chpasswd 從檔案中讀取登入名密碼對,并更新密碼
chage 修改密碼的過期日期
chfn 修改使用者賬戶的備注資訊
chsh 修改使用者賬戶的預設登入 shell

usermod

  • -l 修改使用者賬戶的登入名。
  • -L 鎖定賬戶,使使用者無法登入。
  • -p 修改賬戶的密碼。
  • -U 解除鎖定,使使用者能夠登入。
usermod [選項] 使用者名      
參數 說明
-u UID 修改使用者的 UID 号
-c 使用者說明 修改使用者的說明資訊
-G 組名 修改使用者的附加組
-L 臨時鎖定使用者
-U 解鎖使用者鎖定

passwd 和 chpasswd

改變使用者密碼的一個簡單方法就是用 passwd 指令,制用 passwd 指令,它隻會改你自己的密碼,系統上的任何使用者都能改自己的密碼,但隻有 root 使用者才能夠改别人的密碼。

passwd test      

chpasswd 指令可以為系統中大量使用者修改密碼,它能夠從标準輸入自動讀取登入名和密碼對(由冒号分隔)清單,給密碼加密,然後為使用者賬戶設定,使用重定向指令來将含有 userid:passwd 對的檔案重定向給該指令。

chpasswd < users.txt      
passwd [選項] 使用者名      
參數 說明
-S 查詢使用者密碼的密碼狀态,root 使用者可用。使用者名 密碼設定時間 密碼修改時間 密碼有效期 警告時間 密碼失效時間
-l 暫時鎖定使用者,root 可用
-u 解鎖使用者,root 可用
–stdin 可以通過管道符輸出的資料作為使用者的密碼

如果隻用 passwd 指令,它會改變你自己的密碼。系統上的任何使用者都能更改自己的秘密,但隻有root使用者才有權限更改别人的密碼。

如果需要為系統中的大量使用者修改密碼,可以使用 chpasswd 指令,它能從标準輸入自動讀取登入名和密碼對(由冒号分隔)清單,給密碼加密,然後為使用者賬戶設定。

chsh、chfn 和 chage

chsh 、chfn 和 chage 工具專門用來修改特定的賬戶資訊。

chsh 指令用來快速修改預設的使用者登入 shell。 使用時必須用 shell 的全路徑名作為參數,不能隻用 shell 名。

chsh -s /bin/csh test      

chfn 指令提供了在 /etc/passwd 檔案的備注字段中存儲資訊的标準方法。 chfn 指令會将用于 Unix 的 finger 指令的資訊存進備注字段,而不是簡單地存入一些随即文本,或是将備注字段留白。finger 指令可以很友善地檢視 Linux 系統上地使用者資訊。

chage 指令用來幫助管理使用者賬戶的有效期。

chage [選項] 使用者名      
參數 說明
-l 列出使用者的詳細密碼狀态
-d 日期 修改密碼最後一次更改日期
-m 天數 兩次密碼修改間隔
-M 天數 密碼有效期
-W 天數 密碼過期前警告天數
-I 天數 密碼過期後寬限天數
-E日期 賬号失效時間

一般用此指令來強制使用者修改密碼。

chage -d 0 lamp      

使用者切換

su [選項] 使用者名      
參數 說明
- 連帶使用者的環境變量一起切換
-c 僅執行一次指令,而不切換使用者身份
su - root -c "useradd user3"      

使用者管理指令 —— who

指令名稱: who

指令英文原意:

指令所在路徑: /usr/bin/who

執行權限: 所有使用者

功能描述: 檢視使用者登陸的資訊

文法: who

使用者名 登入終端(tty:本地終端、pts:遠端終端 /n:終端号) 登入時間 (IP位址,如果沒有表示本機登入)

使用者管理指令 —— w

指令名稱: w

指令英文原意:

指令所在路徑: /usr/bin/w

執行權限: 所有使用者

功能描述: 檢視使用者登陸的詳細資訊

文法: w

UP:伺服器累計開機時間

load average: 0.0 0.00 0.00 (CPU、記憶體負載情況 1min 5min 15min)

IDLE:累計空閑時間

PCPU:操作占用CPU時間

WHAT:執行了什麼操作

使用 Linux 組

組權限允許多個使用者對系統中的對象共享一組共用的權限,有些發行版會為每個使用者單獨建立一個組。

每個組都有唯一的GID,還有唯一的組名。

/etc/group 檔案

組名: 組密碼标志 (小組長可以替代 root 來添加使用者):GID:組中附加使用者      

不要直接修改/etc/group檔案來添加使用者到一個組,要用usermod指令,在添加使用者到不同組之前,應該先建立組。

建立新組

在系統上建立新組,預設沒有使用者被配置設定到該組,groupadd 指令沒有提供将使用者添加到組中的選項,但可以用 usermod 指令來彌補這一點,​

​usermod -G shared test​

​。

groupadd [選項] 組名      
選項 說明
-g GID 指定組 ID

如果更改了已登入系統賬戶所屬的使用者組,該使用者必須登出系統後再登入,組關系的更改才能生效。

為使用者賬戶配置設定組時,如果加了 -g 選項,指定的組名會替換掉該賬戶的預設組,-G 選項則将該組添加到使用者的屬組的清單裡,不會影響預設組。

修改組

groupmod 指令可以修改已有組的 GID(加 -g 選項)或組名(-n 選項),修改組名時,GID 群組成員不會變,隻有組名改變。

groupmod 組名      
選項 說明
-g GID 修改組 ID
-n 新組名 修改組名
groupmod -n testgrp group1 将group1修改為testgrp      

删除使用者組

groupdel 組名      

組中如果有初始使用者則不可以删除使用者組。

groupadd tg
useradd -g tg lamp
useradd -G tg lamp1      

并不會生成 lamp 組,lamp1會有。

把使用者添加入組或從組中删除

gpasswd [選項] 組名      
選項 說明
-a 使用者名 把使用者加入組
-d 使用者名 把使用者從組中删除

當然也可以直接修改檔案 /etc/group

了解檔案權限

使用檔案權限符

ls -l      

第一個字段:

  • -:檔案
  • d:目錄
  • l:連結
  • b:塊裝置
  • c:字元型裝置
  • n:網絡裝置

權限字段:對象的屬主;對象的屬組;系統其它使用者。

預設檔案權限

檔案權限的預設值從 umask 中得到。

umask隻是個掩碼。對于檔案來說全權限是666,而對于目錄來說是777,檔案一開始的權限666減去umask022後,剩下的權限就變成了644。

在大多數 Linux 發行版中,umash值通常會設定在 /etc/profile 啟動檔案中。

指令名稱: umask

指令英文原意: the user file-creation mask

指令所在路徑: shell 内置指令

執行權限: 所有使用者

功能描述: 顯示、設定檔案的預設權限 檔案不具有可執行權限

文法: umask [-S] 以rwx形式顯示建立檔案預設權限

umask 值同樣會作用在建立目錄上。檔案一開始的預設權限是 666,減去 umask 的值 022 後,權限是 644,即檔案建立時預設權限是 644,由于目錄的預設權限是 777,umask 作用後生成的目錄權限不同于生成的檔案權限,從 777 中減去 umask 後,留下來 751 作為目錄權限。

改變安全性設定

改變權限

指令名稱: chmod

指令英文原意: change the permissions mode of a file

指令所在路徑: /bin/chmod

執行權限: 檔案所有者、root

功能描述: 改變檔案或目錄權限

文法: chmod [{ugoa}{±=}{rwxXstugo…}][檔案或目錄]

​chmod [-R] [u+x, o-r,g=rwx,a+r] 777 Japanlovestory.list​

代表字元 權限 對檔案的含義 對目錄的含義
r 讀權限 可以檢視檔案内容 cat、more、less、head、tail 可以列出目錄中的内容 ls
w 寫權限 可以修改檔案内容 vim 可以在目錄中建立、删除檔案 touch、rmdir、rm
x 執行權限 可以執行檔案内容 script、command 可以進入出目錄 cd

改變所屬關系

改變檔案的屬主,chown指令改變檔案的屬主,chgrp指令用來改變檔案的預設屬組。

指令名稱: chown

指令英文原意: change file ownership

指令所在路徑: /bin/chown

執行權限: root

功能描述: 改變檔案或目錄的所有者、該所有者必須存在 useradd

文法: chown[選項][使用者][檔案或目錄]

選項 說明
-R 配合通配符可以遞歸地改變子目錄和檔案的所屬關系
-h 改變該檔案的所有符号連結檔案的所屬關系

​chown options owner[.group] file​

​​

​chown dan newfile​

同時改變檔案的屬主和屬組。

​​

​chown dan.shared newfile​

​​ 隻改變一個目錄的預設屬組。

​chown .rich newfile​

​ 如果你的 Linux 系統采用和使用者登入名比對的組名,可以隻用一個條目就改變二者。

​chown test. newfile​

指令名稱: chgrp

指令英文原意: change file group ownership

指令所在路徑: /bin/chgrp

執行權限: 所有使用者

功能描述: 改變檔案或目錄的所屬組 groupadd

文法: chgrp [使用者組][檔案或目錄]

共享檔案

在大範圍環境中建立文檔并将文檔與他人共享,Linux 還為每個檔案和目錄存儲了3個額外的資訊位。

  • 設定使用者 ID(SUID):當檔案被使用者使用時,程式會以檔案屬主的權限運作。
  • 設定組 ID(SGID):對檔案來說,程式會以檔案屬組的權限運作;對目錄來說,目錄中建立的新檔案會以目錄的預設屬組作為預設屬組。
  • 黏着位:程序結束後檔案還駐留在記憶體中。

SetUID

  1. SetUID 的功能
  • 隻有執行的二進制程式才能設定 SUID 權限
  • 指令執行者要對該程式擁有 x 權限
  • 指令執行者在執行該程式時獲得該程式檔案屬主的身份。
  • SetUID 權限隻在該程式執行過程中有效,也就是說身份改變隻在程式執行過程中有效。

    passwd 所有者擁有 SetUID 權限,普通使用者在執行 passwd 時,暫時行使 root 權限的功能,普通使用者可以修改自己的密碼。

    cat 指令沒有 SetUID 權限,是以普通使用者不能檢視 /etc/shadow 檔案内容。

啟用 SGID 位後,你可以強制在一個共享目錄下建立的新檔案都屬于該目錄的屬組,這個組也就成為了每個使用者的屬組。

  1. 設定 SetUID 的方法

    4 代表 SUID

    在權限碼前面加上 (4,2,1)—— SetUID、SetGID、Sticky BIT

chmod 4755 檔案名
或者
chmod u+s 檔案名      
  1. 取消 SetUID 的方法
chmod 777 檔案名 # 或是其他三位數字
或者
chmod u-s 檔案名      
  1. 危險的 SetUID

    關鍵目錄應嚴格控制寫權限。

    使用者的密碼設定要嚴格遵守密碼三原則。

    對系統中預設應該具有SetUID權限的檔案做一清單,定時檢查有沒有之外的檔案被設定了 SetUID 權限。

SetGID

  1. SetGID 針對二進制檔案的作用

    隻有可執行的二進制程式才能設定SGID權限

    指令執行者要對該程式擁有x權限

    指令執行在執行程式的時候,組身份更新為該程式檔案的屬組

    SetGID 權限同樣隻在該程式執行過程中有效,也就是說組身份改變隻在程式執行過程中有效

  1. SetGID針對目錄的作用

    普通使用者必須對此目錄擁有r和x權限,才能進入此目錄

    普通使用者在此目錄中的有效組會變成此目錄的屬組

    若普通使用者對此目錄擁有w權限時,建立的檔案的預設屬組是這個目錄的屬組

  2. 取消 SetGID
chmod 755 檔案名
或者
chmod g-s 檔案名      
  1. 設定 SetGID

    2 代表 SetGID

chmod 2755 檔案名
或者
chmod g+s 檔案名      

Sticky BIT

  1. SBIT 黏着位作用

    黏着位目前隻對目錄有效

    普通使用者對該目錄擁有 w 和 x 權限,即普通使用者可以在此目錄擁有寫入權限。

    如果沒有黏着位,因為普通使用者擁有 w 權限,是以可以删除此目錄下所有檔案,包括其他使用者建立的檔案。一旦賦予了黏着位,除了 root 可以删除所有檔案,普通使用者就算擁有了 w 權限,也隻能删除自己建立的檔案,但是不能删除其他使用者建立的檔案。

  2. 設定黏着位
chmod 1755 目錄名
chmod o+t 目錄名      
  1. 取消黏着位
chmod 755 目錄名
chomod o-t 目錄名      

繼續閱讀