linux-文件權限

  • 2022 年 8 月 24 日
  • 筆記

一、/etc/passwd文件
Linux系統使用一個專門的文件來將用戶的登錄名匹配到對應的UID值。這個文件就是/etc/passwd 文件,它包含了一些與用戶有關的信息。

字段分別是:

  • 登錄用戶名
  • 用戶密碼
  • 用戶賬戶的UID(數字形式)
  • 用戶賬戶的組ID(GID)(數字形式)
  • 用戶賬戶的文本描述(稱為備註字段)
  • 用戶HOME目錄的位置
  • 用戶的默認shell

root用戶賬戶是Linux系統的管理員,固定分配給 它的UID是0。Linux為系統賬戶預留了500以下的UID值。有些服 務甚至要用特定的UID才能正常工作。為普通用 戶創建賬戶時,大多數Linux系統會從500開始, 將第一個可用UID分配給這個賬戶。/etc/passwd文件中的密碼字段都被設置成了x。絕大多數Linux系統都將用戶密碼保存在另 一個單獨的文件中(叫作shadow文件,位置 在/etc/shadow)。只有特定的程序(比如登錄程 序)才能訪問這個文件。

二、/etc/shadow文件
/etc/shadow文件對Linux系統密碼管理提供了更多 的控制。只有root用戶才能訪問/etc/shadow文 件,這讓它比起/etc/passwd安全許多。

在/etc/shadow文件的每條記錄中都有9個字段:

  1. 與/etc/passwd文件中的登錄名字段對應的登錄名
  2. 加密後的密碼
  3. 自上次修改密碼後過去的天數密碼(自1970 年1月1日開始計算)
  4. 多少天后才能更改密碼
  5. 多少天后必須更改密碼
  6. 密碼過期前提前多少天提醒用戶更改密碼
  7. 密碼過期後多少天禁用用戶賬戶
  8. 用戶賬戶被禁用的日期(用自1970年1月1日 到當天的天數表示)
  9. 預留字段給將來使用

添加新用戶:
useradd可以一次性創 建新用戶賬戶及設置用戶HOME目錄結 構。useradd 命令使用系統的默認值以及命令行 參數來設置用戶賬戶。系統默認值被設置 在/etc/default/useradd文件中。可以使用加入了-D 選項的useradd 命令查看所用Linux系統中的這些 默認值。

這個例子列出的默認值如下:

  1. 新用戶會被添加到GID為100 的公共組;
  2. 新用戶的HOME目錄將會位 於/home/loginname;
  3. 新用戶賬戶密碼在過期後不會被禁用;
  4. 新用戶賬戶未被設置過期日期;
  5. 新用戶賬戶將bash shell作為默認shell;
  6. 系統會將/etc/skel目錄下的內容複製到用戶的 HOME目錄下;
  7. 系統為該用戶賬戶在mail目錄下創建一個用 於接收郵件的文件。

useradd 命令允許管理員創建一份默認的HOME目錄配置,然後把它作 為創建新用戶HOME目錄的模板。這樣就能自動 在每個新用戶的HOME目錄里放置默認的系統文件。


創建用戶test並建立home目錄。

刪除用戶:
如果你想從系統中刪除用戶,userdel 可以滿足 這個需求。默認情況下,userdel 命令會只刪 除/etc/passwd文件中的用戶信息,而不會刪除系 統中屬於該賬戶的任何文件。如果加上-r 參數,userdel 會刪除用戶的HOME 目錄以及郵件目錄。然而,系統上仍可能存有已 刪除用戶的其他文件。這在有些環境中會造成問 題。

usermod
usermod 命令是用戶賬戶修改工具中最強大的一 個。它能用來修改/etc/passwd文件中的大部分字 段,只需用與想修改的字段對應的命令行參數就 可以了。

  • -l 修改用戶賬戶的登錄名。
  • -L 鎖定賬戶,使用戶無法登錄。
  • -p 修改賬戶的密碼。
  • -U 解除鎖定,使用戶能夠登錄
    -L 選項尤其實用。它可以將賬戶鎖定,使用戶無法登錄,同時無需刪除賬戶和用戶的數據。要讓 賬戶恢復正常,只要用-U 選項就行了。

passwd
更改用戶密碼。-e 選項能強制用戶下次登錄時修改密碼。

chpasswd
chpasswd 命 令能從標準輸入自動讀取登錄名和密碼對(由冒號分割)列表,給密碼加密,然後為用戶賬戶設 置。你也可以用重定向命令來將含 有userid:passwd 對的文件重定向給該命令。

chsh
chsh 命令用來快速修改默認的用戶登錄 shell。使用時必須用shell的全路徑名作為參數, 不能只用shell名。

chfn
chfn 命令提供了在/etc/passwd文件的備註字段中 存儲信息的標準方法。chfn 命令會將用於Unix的 finger 命令的信息存進備註字段,而不是簡單地存入一些隨機文本(比如名字或昵稱之類的), 或是將備註字段留空。

chage
管理用戶賬戶的有效 期。
chage 命令的日期值可以用下面兩種方式中的任 意一種:

  • YYYY-MM-DD格式的日期
  • 代表從1970年1月1日起到該日期天數的數值

chage 命令中有個好用的功能是設置賬戶的過期日期。


組權限允許多個用戶對系統中的對象(比如文 件、目錄或設備等)共享一組共用的權限。

/etc/group文件
/etc/group文件包含系統上用到的每個組的信息。

系統賬戶用的組通常會分配低於500的GID值,而 用戶組的GID則會從500開始分配。
/etc/group文件有4個字段:

  • 組名
  • 組密碼
  • GID
  • 屬於該組的用戶列表

用戶賬戶列表某種意義上有些誤導 人。你會發現,在列表中,有些組並沒有列 出用戶。這並不是說這些組沒有成員。當一 個用戶在/etc/passwd文件中指定某個組作為 默認組時,用戶賬戶不會作為該組成員再出 現在/etc/group文件中。

groupadd

usermod -G shared test 將test用戶加到shared組

groupmod
可以修改已有組的 GID(加-g 選項)或組名(加-n 選項)

文件權限

第一個字段的第一個字符代表了對象的類 型:

  • ‘-‘代表文件
  • d 代表目錄
  • l 代表鏈接
  • c 代表字符型設備
  • b 代表塊設備
  • n 代表網絡設備

之後有3組三字符的編碼。每一組定義了3種訪問 權限:

  • r 代表對象是可讀的
  • w 代表對象是可寫的
  • x 代表對象是可執行的

若沒有某種權限,在該權限位會出現單破折線。

這3組權限分別對應對象的3個安全級別:

  • 對象的屬主
  • 對象的屬組
  • 系統其他用戶

  • rwx :文件的屬主
  • r-x :文件的屬組
  • r-x :系統上其他人

默認文件權限
umask 命令用來設置所創建文件和目 錄的默認權限。

第一位代表了一項特別的安全特性,叫作粘着位。後面的3位表示文件或目錄對應的umask 八進制值。八進制模式的安全性設置先獲取這3個rwx 權限的 值,然後將其轉換成3位二進制值,用一個八進 制值來表示。在這個二進制表示中,每個位置代 表一個二進制位。因此,如果讀權限是唯一置位 的權限,權限值就是r– ,轉換成二進制值就是100 ,代表的八進制值是4。


創建的文件的八 進制權限是644。
對文件 來說,全權限的值是666 (所有用戶都有讀和寫 的權限);而對目錄來說,則是777 (所有用戶 都有讀、寫、執行權限)。文件一開始的權限是666 ,減去 umask 值022 之後,剩下的文件權限就成了644。

chmod
改變文件和目錄的安全性設置。
格式是:
chmod options mode file
mode 參數可以使用八進制模式或符號模式進行安 全性設置。比如chmod 760 newfile

符號模式
[ugoa…][[+-=][rwxXstugo…]
第一組字符定義了權限作 用的對象:

  • u 代表用戶
  • g 代表組
  • o 代表其他
  • a 代表上述所有

後面跟着的符號表示你是想在現有權限基礎上增加權限(+),還是在現有權限基礎上 移除權限(-),或是將權限設置成後面的值 (=)。,第三個符號代表作用到設置上的權限。
X :如果對象是目錄或者它已有執行權限, 賦予執行權限。
s :運行時重新設置UID或GID。
t :粘着位。
u :將權限設置為跟屬主一樣。
g :將權限設置為跟屬組一樣。
o :將權限設置為跟其他用戶一樣。

chown
改變文件的屬主.令也支持同時改變文件的屬 主和屬組。

chgrp
改變文件的默認屬組

以下轉自://blog.csdn.net/mChenys/article/details/84136801
SUID權限
當s這個標誌出現在文件所有者的x權限上時,此時就被稱為Set UID,簡稱SUID。
作用:

  • SUID權限僅對可執行文件有效
  • 執行者對於該可執行文件需要具有x權限
  • 在執行過程中,調用者會暫時獲得該文件的擁有者權限
  • 該權限只在程序執行的過程中有效


實際上這2個可執行文件的所有者是root,但是我們依然可以在普通賬號下使用這兩個命令,這是因為普通賬號在使用這2個命令的時候會暫時獲得其擁有者的權限。
SUID權限中的s有大小寫之分,如果強行給普通文件添加s權限,那麼現實的是大寫的S,因為普通文件沒有x權限,這樣顯示的suid其實沒什麼用,因為它並不是可執行文件。

只有給文件添加了x權限後,suid才有效。

SGID權限
當s出現在文件的所屬組x權限位置上時,表示所屬組有SGID的權限。

作用:

  • 既可以作用於目錄,也可以作用於可執行文件
  • 只要父目錄有SGID權限,所有的子目錄都會遞歸繼承
  • 執行者對於該可執行文件需要具有x權限
  • 在執行過程中,調用者會暫時獲得該文件的所屬組權限

下面演示對目錄和文件設置SGID權限

同樣SGID的s權限也是分大小寫的,當g權限組沒有x權限的時候,設置SGID後就會變成大寫的S,這點跟SUID一樣。

SBIT權限
當t出現在其他組的x權限位置時,表示其他組具有SBIT的權限。
SBIT(Sticky Bit)目前只針對目錄有效,對於目錄的作用是:當用戶在該目錄下建立文件或目錄時,僅有自己與 root才有權力刪除。
最具有代表的就是/tmp目錄,任何人都可以在/tmp內增加、修改文件(因為權限全是rwx),但僅有該文件/目錄建立者與 root能夠刪除自己的目錄或文件。


權限t也有大小寫之分,大寫說明沒有x權限,小寫說明有x權限,這點和權限s是一樣的。


SUID/SGID/SBIT權限設置
和rwx權限一樣通過chmod命令設置,s、t也有兩種設置方法:

1、符號表示:SUID: u+s ,SGID: g+s,SBIT: o+t
2、數字表示:SUID=4,SGID=2,SBIT=1,將原來的三位數擴展為四位數即可,把它們放在權限數字的最開頭。例如設置SUID,可以寫成4777,設置SGID可以寫成,2777,設置SBIT可以寫成1777;如果同時設置就是數字之和,例如suid,sgid和sbit都設置的話就是7777