1. 程式人生 > >linux-特殊許可權

linux-特殊許可權

許可權細分

檔案分類

雖說檔案許可權不過三類三組,不過想理解特殊許可權,還得把檔案再分類。

  • 操作檔案

一般的操作檔案,對應的就是rw讀寫許可權,常被命令作為元素所操作。

  • 執行檔案

可執行檔案,對應的就是x等其他許可權。此類檔案可以直接進行執行,是命令一類。

命令分兩類

  • 純命令

指令碼或程式當中不需要外部引數,不操作其他檔案,單純執行操作。

  • 操作命令

需要操作其他檔案,對其他檔案進行操作,依賴其他檔案許可權。

許可權依賴

  • 操作檔案

單純的rw

許可權,對於自身而言沒有任何意義。

提供給執行檔案進行操作的許可權依據,由rw判斷執行檔案是否擁有操作許可權。

  • 執行檔案

單純的判斷使用者是否擁有執行此命令的許可權。

  • 相互關聯
  1. 命令許可權

判斷此使用者是否擁有此命令的執行許可權。

  1. 操作許可權

判斷此使用者是否擁有此檔案的操作許可權。

許可權判斷

  • 執行許可權
  • 操作許可權
  • 程序歸屬

當兩個部分歸納完畢,命令執行的程序的屬主就看命令執行時的執行角色了。

other運行了一個屬主為godme的命令,啟動的程序屬主是other

程序不看命令歸屬,只看啟動角色,誰啟動的誰就是程序的屬主。

特殊許可權

基本許可權

符號 許可權 說明
r 讀取內容
w 寫入內容
x 執行 作為命令執行

三個許可權,全部依照上述流程,大部分的許可權不外乎這三個。

SUID

許可權設定

命令 效果
chmod u+s file 新增s許可權
chmod u-s file 移除s許可權
chmod u=rws,go= file 設定許可權
  • 許可權分類

該特殊許可權為執行許可權,通用x第三位置,與rw操作許可權無關。

  • 特殊顯示

原操作許可權為x+s後顯示許可權為s

原操作許可權為-+s後顯示許可權為S

許可權操作

s雖然作為執行許可權,但是影響的卻是操作許可權

執行許可權的鑑權階段,和一般許可權一致,在檔案許可權的判斷階段有特殊邏輯。

邏輯梳理

  • 舊邏輯
  • 新邏輯

可以發現,整個過程增添了額外一步。

  1. 執行許可權鑑權
  2. 更換操作許可權
  3. 操作許可權鑑權

預設沒有第二步更換操作許可權。s的作用就是更換操作許可權。

同時,程序的歸屬,也會被替換。

程序的屬主不再是先到先得的啟動者,而是標記了s命令的屬主。

例子詳解

  • 基本檔案

/etc/passwd

chmod u=rw,go= /etc/passwd

/bin/cat

chmod u=rwx, go= /bin/cat
  • 直接執行

root

cat /etc/passwd
# 成功

other

cat /etc/passwd
# 失敗,沒有cat的執行許可權
  • 執行許可權

/bin/cat

chmod a+x /bin/cat

other

cat /etc/passwd
# 失敗,沒有passwd的操作許可權
  • 檔案許可權

/etc/passwd

chmod a+r /etc/passwd

other

cat /etc/passwd
# 成功,但是不安全
  • 許可權替換

/bin/cat

chmod u=rws,go= /bin/cat

other

cat /etc/passwd
# 執行成功

沒有操作許可權卻能夠操作檔案,這是因為在檔案操作鑑權的時候更換了鑑權物件

預設情況下,執行鑑權操作鑑權鑑權物件是同一個。

但是s會修改操作鑑權的物件,從而讓有些沒有許可權的使用者可以操作某些檔案。

再次宣告,這樣更換身份後,程序的屬主也會對應的更換為命令的屬主,而不是啟動者。

SGID

SUID一樣,SGID也是s許可權。

SUID是針對屬主的操作鑑權角色替換。

SGID是針對屬組的操作鑑權角色替換。

  • 設定
chmod g+s cat
chmod g-s cat
  • 邏輯

邏輯同SUID

  • 特殊
chmod a+s cat

同時設定了SUIDSGID,不具有實用意義。

普通使用者other不具備s許可權,因為把自己替換為自己實在是…

實際作用

  • 檔案共享

半路更換了鑑權物件,讓其他使用者(組)擁有特定的檔案操作許可權。

相當於是把檔案共享給了使用者(組)。

不過是通過命令進行的共享,必須通過特定的命令才有所謂的共享。

  • 程序歸納

啟動者啟動,程序歸屬卻是命令屬主(組)

可以很明確的對程序進行分類管理,不過人太多了也會變得更雜亂。

迴歸一句話,誰啟動的程序,誰就是程序的屬主。

關鍵看頂著的誰的名,而不是誰做的。

s在啟動過程當中,把名號給換了。

所以後續的一切都變了,操作鑑權物件換了,啟動的程序屬主(組)也換了,啟動者已不重要了。

Sticky

SUIDSGID針對的是執行許可權,那麼sticky針對的就是操作許可權

操作許可權

  • 基本許可權
符號 許可權
r 讀取
w 修改
x 執行

之前因為顯示佔據的位置是x所在的位置,劃分的不夠明確,現在重申一遍。

  • 基本許可權

rwx是基本許可權,x不是特殊許可權。

  • 顯示合併

特殊許可權的顯示合併x一起顯示,原來沒有x顯示為大寫,原來有x顯示成小寫。但是並不覆蓋。

  • 操作許可權

操作許可權是什麼,就是rw

所謂的SUIDSGID是針對x的特殊許可權設定。影響後續歸納。

先說說讀寫許可權rw算什麼。

說實話,讀寫沒啥更多東西,關鍵是目錄的讀寫。

把讀寫進行擴充套件,目錄的讀寫也即是建立刪除

問題就出在這,多個使用者同時工作時,必然屬於同一個組。

如果能夠建立,必然能夠刪除。

也就是說,使用者之間可以刪除別人的檔案,除非每個人都沒權利刪除任何檔案。

許可權設定

命令 說明
chmod o+t dir 新增t許可權
chmod o-t dir 移除t許可權

xt,是-就是T

反正和x相關,有則小寫,無則大寫。

執行邏輯

  • 預設邏輯
  • 新邏輯

例子詳解

  • 基本檔案

users

useradd judas
usermod -a -G foreva judas
useradd godme
usermod-a -G foreva godme

dir

mkdir -p /tmp/project
chgrp -R foreva
chmod a=rwx /tmp/project
  • 操作

judas

cd /tmp/project
touch judas
# 成功

godme

cd /tmp/project
rm judas
# 成功
  • 修改

dir

chmod o=r /tmp/project 

judas

touch judas
# 成功
rm judas
# 失敗

godme

rm judas
# 失敗
  • 特殊

dir

chmod -o=rt /tmp/project

judas

touch judas
rm judas
# 成功
touch judas

godme

rm judas
# 失敗

設定了t,只能管理自己的檔案,別人或可檢視,不可刪除。

擴充套件許可權

基本擴充套件

所謂特殊許可權,不過是擴充套件而已

基本許可權 擴充套件許可權 說明
r -
w t 檔案操作
x s 程序啟動

數值許可權

  • umask

還記得這篇文章麼,其中說到了umask,我們簡單的說了一下。

  • 檢視辦法
umask
  • 設定辦法
umask 0022
  • 影響

檔案預設許可權666,資料夾預設許可權777

新建檔案許可權為0666-umask。新建資料夾許可權為0777-umask

新建型別 umask 許可權
file umask 0666-umask
dir umask 0777-umask
  • 第四組

最大的疑問就是,許可權不是三組三類的麼?

  • 組別
  • 屬主
  • 屬組
  • 其他
  • 類別
  • r
  • w
  • x

-表示空

umask為什麼有四位?有第四組?

SUID SGID Sticky
us gs t

就是這個意思了,而它,就是最前面的那一組。

例子詳解

  • us
mkdir us
chmod a= us
ls -l us
# ---------
chmod 4000 us
# --S------
  • gs
mkdir us
chmod a= gs
ls -l gs
# ---------
chmod 2000 gs
# -----S---
  • t
mkdir t
chmod a= t
ls -l t
# ---------
chmod 1000 t
# --------T

數值對照

SUID SGID Sticky Oct power
0 0 0 0 ---
0 0 1 1 --T
0 1 0 2 -S-
0 1 1 3 -ST
1 0 0 4 S--
1 0 1 5 S--
1 1 0 6 SS-
1 1 1 7 SST