Linux系統的權限管理是保障系統安全的重要機制,以下詳細講解權限相關概念及操作指令:
一、基礎權限機制
1. 權限的三元組,讀(r)、寫(w)、執行(x)
每個文件或目錄有三組權限,分別對應三類用戶:
- 所有者(User):文件/目錄的創建者或當前所有者。
- 所屬組(Group):文件/目錄所屬的用戶組。
- 其他用戶(Others):非所有者且不屬于所屬組的用戶。
每組權限由三個字符組成:r
(讀)、w
(寫)、x
(執行)。
權限的作用
權限 | 對文件的作用 | 對目錄的作用 |
---|---|---|
r | 允許讀取文件內容 | 允許列出目錄中的文件名(如 ls ) |
w | 允許修改文件內容 | 允許在目錄中創建、刪除、重命名文件 |
x | 允許執行文件(如腳本或程序) | 允許進入目錄并訪問子文件(如 cd ) |
示例1:drwxr-xr--
d
:目錄類型。rwx
:所有者擁有讀、寫、執行權限。r-x
:組用戶有讀和執行權限。r--
:其他用戶僅有讀權限。
示例2:
-rwxr-xr-- 1 root dev 1024 Jan 1 10:00 script.sh
- 所有者(root):擁有
rwx
(讀、寫、執行)。 - 所屬組(dev):擁有
r-x
(讀和執行,不可寫)。 - 其他用戶:僅有
r--
(僅讀)。
二、權限設置指令
1. chmod
:修改文件/目錄權限
-
符號模式(操作對象 + 權限):
chmod [用戶類別][操作符][權限] 文件
- 用戶類別:
u
(所有者)、g
(組)、o
(其他)、a
(所有)。 - 操作符:
+
(添加)、-
(移除)、=
(覆蓋)。 - 示例:
chmod u+x file # 給所有者添加執行權限 chmod g-w,o=rx dir # 移除組的寫權限,設置其他用戶為rx chmod a+r file # 所有人添加讀權限
- 用戶類別:
-
數字模式(三位八進制數):
chmod 755 file # 所有者rwx(7),組和其他rx(5)
- 計算方式:r=4,w=2,x=1,相加得權限值(如
rwx=4+2+1=7
)。
- 計算方式:r=4,w=2,x=1,相加得權限值(如
2. chown
:修改所有者和所屬組
chown 用戶:組 文件 # 同時修改所有者和組
chown 用戶 文件 # 僅修改所有者
chown :組 文件 # 僅修改所屬組
- 示例:
chown root:admin /data # 設置所有者為root,組為admin chown alice file.txt # 設置所有者為alice
- 遞歸修改(目錄及其子項):
chown -R user:group dir/
3. chgrp
:修改所屬組
chgrp 組名 文件
- 等效于
chown :組名 文件
,逐漸被chown
替代。
三、特殊權限
1. SUID(Set User ID)
- 作用:執行文件時,以所有者身份運行。
- 設置:
chmod u+s file # 符號模式 chmod 4755 file # 數字模式(4表示SUID)
- 示例:
/usr/bin/passwd
允許普通用戶修改密碼(臨時獲得root權限)。
2. SGID(Set Group ID)
- 作用:
- 對文件:執行時以所屬組身份運行。
- 對目錄:新建文件繼承目錄的所屬組。
- 設置:
chmod g+s dir # 符號模式 chmod 2770 dir # 數字模式(2表示SGID)
3. 粘滯位(Sticky Bit)
- 作用:目錄中文件僅所有者可刪除(如
/tmp
)。 - 設置:
chmod +t dir # 符號模式 chmod 1777 dir # 數字模式(1表示粘滯位)
四、默認權限與umask
umask
:決定新建文件/目錄的默認權限。umask 022 # 默認設置(目錄權限755,文件644) umask -S # 查看當前符號格式的umask
- 計算:
默認權限 = 最大權限 - umask
- 目錄最大權限為
777
,文件為666
(無默認執行權限)。
- 目錄最大權限為
- 計算:
五、ACL(訪問控制列表)
提供更細粒度的權限控制(需文件系統支持):
setfacl
:設置ACL規則。setfacl -m u:alice:rwx file # 授予alice對文件的rwx權限 setfacl -m g:dev:rx dir # 授予dev組對目錄的rx權限
getfacl
:查看ACL規則。getfacl file
六、注意事項
- 目錄的執行權限:無
x
權限則無法進入目錄或訪問子項。 - 遞歸修改權限:使用
-R
時謹慎操作,避免開放敏感目錄。 - 特殊權限風險:不當的SUID/SGID可能導致提權漏洞。
- root用戶:不受普通權限限制,可訪問所有文件。
七、示例匯總
- 設置SUID并查看:
chmod u+s /usr/bin/script ls -l /usr/bin/script # 顯示 -rwsr-xr-x
- 設置目錄SGID:
chmod g+s /shared_dir ls -ld /shared_dir # 顯示 drwxr-sr-x
通過掌握這些權限機制和指令,可以有效管理Linux系統的文件安全與共享需求。
好的!Linux 的權限機制是系統安全的核心組成部分,其設計目的是控制用戶和進程對文件及目錄的訪問。以下是 權限的機制和作用 的詳細解析:
二、特殊權限機制
除了基礎權限,Linux 還支持三種特殊權限,用于更復雜的場景。
1. SUID(Set User ID)
- 機制:當用戶執行一個設置了
SUID
的文件時,程序會以文件所有者的身份運行。 - 作用:允許普通用戶臨時獲得文件所有者的權限(常用于需要特權操作的工具)。
- 示例:
/usr/bin/passwd
(修改密碼需要修改/etc/shadow
,普通用戶無權限,但passwd
設置了 SUID 并屬于 root)。 - 設置方式:
chmod u+s file # 符號模式 chmod 4755 file # 數字模式(4 表示 SUID)
- 顯示:權限中的
x
變為s
(如-rwsr-xr-x
)。
2. SGID(Set Group ID)
- 機制:
- 對文件:執行時以文件所屬組的身份運行。
- 對目錄:在目錄中新建的文件會繼承目錄的所屬組(而非用戶默認的組)。
- 作用:
- 文件:共享工具以組權限運行(類似 SUID)。
- 目錄:便于團隊協作(確保新建文件屬于同一組)。
- 設置方式:
chmod g+s dir # 符號模式 chmod 2770 dir # 數字模式(2 表示 SGID)
- 顯示:組權限的
x
變為s
(如drwxr-sr-x
)。
3. 粘滯位(Sticky Bit)
- 機制:設置后,目錄中的文件僅允許文件所有者或 root 刪除。
- 作用:防止用戶誤刪他人文件(常見于共享目錄如
/tmp
)。 - 設置方式:
chmod +t dir # 符號模式 chmod 1777 dir # 數字模式(1 表示粘滯位)
- 顯示:其他用戶的
x
變為t
(如drwxrwxrwt
)。
三、默認權限與 umask
1. 默認權限規則
- 目錄:默認最大權限為
777
(rwxrwxrwx)。 - 文件:默認最大權限為
666
(rw-rw-rw-),且默認不賦予執行權限(需手動設置)。
2. umask
的作用
- 機制:
umask
是一個掩碼值,用于從最大權限中“扣除”權限,得到文件/目錄的實際默認權限。 - 計算方式:
實際權限 = 最大權限 - umask
- 示例:
umask 022
:- 目錄默認權限:
777 - 022 = 755
(rwxr-xr-x)。 - 文件默認權限:
666 - 022 = 644
(rw-r–r–)。
- 目錄默認權限:
- 查看與設置:
umask # 顯示當前值(如 0022) umask -S # 顯示符號格式(如 u=rwx,g=rx,o=rx) umask 027 # 設置新的 umask 值
四、ACL(訪問控制列表)
1. 作用
- 提供更細粒度的權限控制,允許為特定用戶/組單獨設置權限,突破三元組的限制。
- 典型場景:允許用戶A讀寫文件,同時禁止用戶B訪問,而無需修改文件所屬組。
2. 設置與查看
- 設置 ACL:
setfacl -m u:alice:rwx file # 授予用戶 alice 對文件的 rwx 權限 setfacl -m g:dev:r-- dir # 授予組 dev 對目錄的讀權限
- 查看 ACL:
getfacl file # 輸出示例: # user::rw- # user:alice:rwx # group::r-- # mask::rwx # other::r--
五、權限機制的核心原則
- 最小權限原則:用戶僅獲得完成任務所需的最小權限。
- 繼承規則:
- 新建文件繼承目錄的所屬組(若目錄設置 SGID)。
- 權限受
umask
影響。
- 優先級順序:
- 用戶身份匹配順序:所有者 > 所屬組 > 其他用戶。
- root 的超級權限:root 用戶可無視權限限制,直接訪問或修改任何文件。
六、典型應用場景
1. 共享目錄協作
- 目標:團隊(組
dev
)共享目錄/project
。 - 設置:
chmod 2770 /project # SGID 確保新建文件繼承組 dev chown root:dev /project # 所有者 root,組 dev
- 效果:所有組成員可在目錄中創建文件,且文件自動屬于組
dev
。
2. 防止誤刪文件
- 目標:共享目錄
/shared
允許用戶創建文件,但僅允許所有者刪除。 - 設置:
chmod 1777 /shared # 粘滯位生效
3. 特權工具
- 目標:允許普通用戶執行需 root 權限的命令(如
ping
)。 - 設置:
chmod u+s /bin/ping # SUID 使 ping 以 root 身份運行
七、注意事項
- SUID/SGID 風險:若程序存在漏洞,攻擊者可能利用 SUID/SGID 提權。
- 目錄的執行權限:無
x
權限的目錄無法被訪問(即使有r
)。 - 遞歸修改權限:使用
chmod -R
時需謹慎,避免過度開放敏感目錄。
補充
dialout用戶組
在 Linux 系統中,dialout
用戶組是一個與串行端口(Serial Port)訪問權限相關的特殊用戶組。它的存在主要是為了管理用戶對串口設備(如 /dev/ttyS0
、/dev/ttyUSB0
等)的訪問權限。
1. 作用與背景
- 歷史背景:名稱 “dialout” 源于早期通過調制解調器(Modem)“撥號”(dial-out)上網的時代。該用戶組允許普通用戶直接操作調制解調器等串口設備。
- 現代用途:如今,
dialout
組主要用于控制對串行端口設備的訪問權限,例如:- 物理串口(如
/dev/ttyS0
)。 - USB 轉串口設備(如
/dev/ttyUSB0
)。 - 嵌入式開發板(如 Arduino、樹莓派)的通信接口。
- 物理串口(如
2. 權限管理
- 設備文件權限:串口設備的默認權限通常為
crw-rw----
,所有者是root
,所屬組是dialout
:$ ls -l /dev/ttyUSB0 crw-rw---- 1 root dialout 188, 0 Jun 10 15:30 /dev/ttyUSB0
- 只有
root
用戶和dialout
組成員有讀寫權限。
- 只有
- 為何需要加入該組:普通用戶若未加入
dialout
組,訪問串口時會報錯Permission denied
。
crw-rw----解釋
-
c:表示這是一個 字符設備文件(Character Device)。
-
字符設備以流式數據傳輸為特征(如鍵盤、串口、終端),與塊設備(如硬盤,標識為 b)不同。
-
例如:/dev/ttyS0(串口)、/dev/ttyUSB0(USB轉串口)等。
-
c rw- rw- ---
│ │ │ │
│ │ │ └─ 其他人(others)的權限:無權限(`---`)
│ │ └─ 所屬組(group)的權限:讀 + 寫(`rw-`)
│ └─ 所有者(owner)的權限:讀 + 寫(`rw-`)
└─ 文件類型標識符:字符設備文件(`c`)
3. 將用戶添加到 dialout 組
- 命令:
或sudo usermod -aG dialout 你的用戶名
sudo gpasswd -a 你的用戶名 dialout
- 生效方式:注銷后重新登錄,或重啟系統。
4. 安全注意事項
- 最小權限原則:僅將需要訪問串口的用戶加入該組,避免不必要的權限分配。
- 潛在風險:串口設備可能連接敏感硬件(如工業控制器),不當操作可能導致系統不穩定或數據泄露。
5. 替代方案
- 臨時權限:使用
sudo
臨時獲取 root 權限訪問設備(不推薦長期使用):sudo minicom -D /dev/ttyUSB0
- udev 規則:通過自定義 udev 規則永久修改設備權限(更安全且靈活):
- 創建規則文件
/etc/udev/rules.d/99-serial.rules
:SUBSYSTEM=="tty", ATTRS{idVendor}=="abcd", ATTRS{idProduct}=="1234", GROUP="users", MODE="0666"
- 重新加載 udev 規則:
sudo udevadm control --reload-rules
- 創建規則文件
6. 不同發行版的差異
- Ubuntu/Debian:默認使用
dialout
組管理串口。 - Arch Linux:可能使用
uucp
或lock
組。 - 檢查當前系統:查看設備文件的所屬組:
ls -l /dev/ttyUSB0
7. 常見使用場景
- 嵌入式開發:通過串口與開發板通信(如 Arduino 上傳程序)。
- 工業設備調試:連接 PLC、傳感器等設備的串口。
- 網絡設備配置:通過 Console 線管理路由器、交換機。
總結
dialout
用戶組是 Linux 中管理串口設備訪問權限的關鍵組。通過合理分配組成員或使用 udev 規則,可以在便利性和安全性之間找到平衡。處理硬件設備時,請始終遵循最小權限原則。