文章目錄
- Linux權限的概念
- Linux權限管理
- 檔案訪問者的分類(人)
- 檔案型別和訪問權限(事物屬性)
- 檔案權限值的表示方法
- 1)字符表示方法
- 2)8進制數值表示方法
- 檔案訪問權限的相關設定方法
- a)chmod
- b)chown
- 關于sudo
- c)chgrp
- d)umask
- file指令:
- 目錄的權限
- 粘滯位
- 關于權限的總結
Linux權限的概念
Linux下有兩種用戶:超級用戶(root)、普通用戶,
超級用戶:可以再linux系統下做任何事情,不受限制
普通用戶:在linux下做有限的事情,
超級用戶的命令提示符是“#”,普通用戶的命令提示符是“$”,
命令: su [用戶名]
功能:切換用戶,
例如,要從root用戶切換到普通用戶user,則使用 su user, 要從普通用戶user切換到root用戶則使用 su
root(root可以省略),此時系統會提示輸入root用戶的密碼口令,
Linux權限管理
檔案訪問者的分類(人)
檔案和檔案目錄的所有者: u—User
檔案和檔案目錄的所有者所在的組的用戶: g—Group
其它用戶: o—Others
舉個例子:一個公司有A、B兩個小組需要完成同一個任務,但公司只有一臺服務器,A小組的張三自己寫了一些代碼后,不想給B組的成員看,所以就有了User和Others的區別,Others不能查看張三寫的代碼,但同時,A組的其他人也不能查看該代碼,所以有了Group,Group內的人有權限查看代碼或修改代碼,所以Others就是除了User和Group外的人,
超級用戶、普通用戶與檔案訪問者(User/Group/Others)是不沖突的,比如我們在家里是主人,在公司是員工,有著不同的權限,
檔案型別和訪問權限(事物屬性)
此時我們就可以解釋ls指令時,檔案資訊對應的是哪些屬性了
檔案權限這一組中,共用9個字符(不包括.),
三三為一組,第一組為User的權限,第二組為Group的權限,第三組為Others的權限
a) 檔案型別
d:檔案夾
-:普通檔案 (源代碼,圖片,動靜態庫,可執行程式,視頻音頻)
l:軟鏈接(類似Windows的快捷方式)
b:塊設備檔案(例如硬碟、光驅等)
p:管道檔案
c:字符設備檔案(例如螢屏等串口設備)
s:套介面檔案
b)基本權限
i.讀(r/4): Read,對檔案而言,具有讀取檔案內容的權限;對目錄來說,具有瀏覽該目錄資訊的權限
ii.寫(w/2): Write,對檔案而言,具有修改檔案內容的權限;對目錄來說具有洗掉移動目錄內檔案的權限
iii.執行(x/1): execute,對檔案而言,具有執行檔案的權限;對目錄來說,具有進入目錄的權限
iv.“-”表示不具有該項權限
檔案權限值的表示方法
1)字符表示方法
-表示不具有相應的權限
| Linux 表示 | 說明 | Linux表示 | 說明 |
|---|---|---|---|
| r– | 只讀 | -w- | 僅可寫 |
| –x | 僅可執行 | rw- | 可讀可寫 |
| -wx | 可寫和可執行 | r-x | 可讀可執行 |
| rwx | 可讀可寫可執行 | — | 無權限 |
2)8進制數值表示方法
1表示有權限,0表示無權限
r w x分別對應三個二進制位,范圍在0-7,所以可以用八進制表示
| 權限符號(讀寫執行) | 八進制 | 二進制 |
|---|---|---|
| r– | 4 | 100 |
| -w- | 2 | 010 |
| –x | 1 | 001 |
| rw- | 6 | 110 |
| r-x | 5 | 101 |
| -wx | 3 | 011 |
| rwx | 7 | 111 |
| — | 0 | 000 |
檔案訪問權限的相關設定方法
a)chmod
功能: 設定檔案的訪問權限
格式: chmod [引數] 權限 檔案名
常用選項:
- R -> 遞回修改目錄檔案的權限
- 說明:只有檔案的擁有者和root才可以改變檔案的權限
chmod命令權限值的格式
① 用戶表示符+/-/=權限字符
+:向權限范圍增加權限代號所表示的權限
-:向權限范圍取消權限代號所表示的權限
=:向權限范圍賦予權限代號所表示的權限
用戶符號:
u:擁有者
g:擁有者同組用
o:其它用戶
a:所有用戶
實體:
chmod u+w /home/abc.txt 給擁有者增加對abc.txt的寫權限
chmod o-x /home/abc.txt 給其他用戶增加對abc.txt的可執行/進入權限
chmod a=x /home/abc.txt 設定所有用戶對abc.txt的權限為可執行
將abc.txt的所有權限設定為無:
執行chmod u+w /home/abc.txt
此時abc.txt的user就擁有了對其讀的權限
執行chmod o+x /home/abc.txt
此時abc.txt的others就擁有了對其執行的權限
執行chmod a=x /home/abc.txt
此時所有的訪問者型別都被設定成了對abc.txt只有執行的權限
②三位8進制數字
實體:
chmod 664 /home/abc.txt
chmod 640 /home/abc.txt
664:6對應的二進制形式是110,4對應的二進制形式是100,所以第一個6表示user的權限是110,即可讀可寫(rw),但不可執行/進入;第二個6表示group的權限與user相同;4表示其他用戶的權限是只讀?,不可寫和執行,
640:同樣,6對應的二進制形式是110,4對應的二進制形式是100,0對應的二進制形式是000,所以6表示user的權限是110,即可讀可寫,但不可執行/進入;4表示所在組的權限是只讀,不可寫和執行;0表示其他用戶不具有任何權限,
b)chown
功能:修改檔案的擁有者(user)
格式: chown [引數] 用戶名 檔案名
**注意:**根據上文所說的,只有檔案的擁有者和root才可以改變檔案的權限 ,一般我們修改檔案的擁有者是無法直接成功的,因為這個檔案是其他人的,我們要先經過別人的同意,才能擁有該檔案,所以在指令前加上sudo,表示權限的提升,輸入后一般要再輸入原擁有者的密碼,
比如下面,我們看到test.c的user是ysj,現在想把它改為root
如果我們直接輸入chown root test.c,結果會失敗:
所以要加上sudo,下面第二行就是輸入原擁有者ysj的密碼,密碼正確后即可完成擁有者的轉換,
此時test.c的user就變成了root
實體:
sudo chown -R root test 將目錄test的所有內容的擁有者遞回改為root,如果不用-R,則只會改變test的擁有者
關于sudo
可能我們使用sudo時會出現這種情況:

這種情況需要在sudoers信任組中加入我們自己
操作步驟:
-
先按
su,輸入密碼后,進入root身份 -
如果有安裝vim,則輸入vim/etc/sudoers;否則,輸入vi /etc/sudoers,注意:vi后要加一個空格
1、2的步驟:
-
進入sudoers后,輸入
:,再輸入set nu,顯示行號:
-
再用向下的方向鍵,翻到大概106行的樣子,找到以下段落:
-
先輸i,看見左下方出現
后,輸入ysj ALL=(All) ALL,當然ysj是我需要添加的用戶名,你只需要改成你自己的用戶名即可,
-
再按Esc,輸入
:w!,再輸入:q,就完成了
c)chgrp
功能:修改檔案或目錄的所屬組
格式: chgrp [引數] 用戶組名 檔案名
常用選項:
-R 遞回修改檔案或目錄的所屬組
實體:
chgrp users /abc/f2 將/abc/f2的所屬組改為users
d)umask
功能:
查看或修改檔案掩碼
新建檔案夾默認權限0666
新建目錄默認權限0777
我們暫且先不管第一位的0是什么意思,
驗證一下:
創建一個新的tmp.c的普通檔案和tmp的目錄,他們的默認權限如下:
根據上面的8進制數值表示方法表,rwx rwx r-x對應的三個8進制數字為775,rw-rw-r–對應的三個8進制數字為664,那么疑問來了,為什么不是777和666呢?這就要引入我們的umask了
假設默認權限是mask,則實際創建的出來的檔案權限是: mask & ~umask
運算比較復雜,我們可以理解成去除umask中的權限
格式: umask 權限值
說明:將現有的存取權限減去權限掩碼后,即可產生建立檔案時預設權限,超級用戶默認掩碼值為0022,普通用
戶默認為0002,
上面驗證中,我們就是以普通用戶的身份進行的創建,所以0775和0664就是簡單的0777減2和0666減2嗎?
當然不是,我們說了,是去除umask中的權限,既然umask是002,所以代表的權限就是其他人的只讀,對于tmp目錄,本來是擁有rwx的others,去除了只讀權限,就變成了r-x,
同樣,對于tmp.c普通檔案,本來是擁有rw權限的others,去除了w權限,就變成了r–
我們可以將權限值修改為0003,進而觀察umask對權限的影響
umask 查看權限值
umask 0003 設定 權限值為0003

0003表示的是others的w和x權限
對于tmp目錄(默認權限位rwx),原來擁有rwx權限的others,去除了w和x,就變成了r–
對于tmp.c檔案(默認權限為rw-),原來擁有rw權限的others,當然,它本身就沒有x權限,去不去除都是-,所以去除w和x后,就變成了r–
file指令:
功能說明:辨識檔案型別,
語法: file [選項] 檔案或目錄…
常用選項:
-c 詳細顯示指令執行程序,便于排錯或分析程式執行的情形
-z 嘗試去解讀壓縮檔案的內容
使用 sudo分配權限
(1)修改/etc/sudoers 檔案分配檔案
# chmod 740 /etc/sudoers
# vi /etc/sudoer
格式:接受權限的用戶登陸的主機 =(執行命令的用戶) 命令
(2)使用 sudo 呼叫授權的命令
$ sudo –u 用戶名 命令
實體:
$sudo -u root /usr/sbin/useradd u2
目錄的權限
上面說了那么多的r、w、x,我們卻不知道r、w、x權限到底是什么權限,沒有這些權限有什么后果呢?
- r(Read,讀取):對檔案而言,具有讀取檔案內容的權限;對目錄來說,具有瀏覽目錄的權限, 如果目錄沒有可讀權限, 則無法用ls等命令查看目錄中的檔案內容
- w(Write,寫入):對檔案而言,具有新增,修改,洗掉檔案內容的權限;對目錄來說,具有新建,洗掉,修改,移動目錄內檔案的權限,如果目錄沒有可寫權限, 則無法在目錄中創建檔案, 也無法在目錄中洗掉檔案
- x(eXecute,執行):對檔案而言,具有執行檔案的權限;對目錄來說該用戶具有進入目錄的權限,如果目錄沒有可執行權限, 則無法cd到目錄中
我們(我們是user)將test.c(空檔案)的user權限設定為只可寫:
chmod u=w test.c

說明我們對test.c可以寫入內容
echo “hello” > test.c
那我們怎么知道將hello寫入test.c了呢?
之前我們特地設定test.c為空檔案(記憶體為0),所以寫入hello后,記憶體就不為0了

我們現在了解了r和w的權限,那么x權限是干嘛的呢?上面提到了x對目錄來說是具有進入目錄的權限,
我們將hehe目錄的user權限設定為rw-,也就是可讀可寫,但不可進入,
chmod u=wr hehe
所以目錄hehe的權限被改成了rw-,此時就進入不了hehe了:
那么我們再多思考一下,既然我們不能進入hehe,那我們可以讀或者寫hehe嗎?
就比如我們買了新房,但是我們沒鑰匙進不去,那我們還可以參觀或者裝修嗎?
所以答案顯然是,沒有x權限,我們也不能對目錄里的檔案讀或者寫了
hehe中包含以下幾個檔案(在設定rw權限之前才可以用tree指令訪問hehe,沒有x權限后就無法訪問了):
試圖對hehe/test2進行寫操作:
結果很明顯,我們的行為是不被允許的
那么我們試試讀取hehe/test2:
同樣,還是失敗了,
即使使用tree指令,hehe的子節點也不會展示:
總結:訪問者沒有對目錄的x權限,也就意味著失去了對其中檔案r和w的權限,
對于以上操作,我們都是以普通用戶的身份進行操作的,如果我們以root的身份操作,就不存在權不權限的問題了,
使用su進入root身份,再進入目錄hehe,我們發現什么錯誤都沒有發生
再試試讀和寫:
所以,root的身份是沒有權限限制的,無視讀寫和進入的權限,當然,有些情況還是無法對其隨意訪問修改的,比如一個檔案被別人打開后且正在使用,root就無法對其修改,
那么,在特定目錄下,普通用戶可以洗掉別人的檔案嗎?
答案是:可以的,
換句話來講,就是只要用戶具有目錄的寫權限,,用戶就可以洗掉目錄中的檔案,,而不論這個用戶是否有這個檔案的寫權限,
這好像不太科學啊, 我張三創建的一個檔案, 憑什么被你李四可以刪掉?
我們印證一下 :
-
我們當前的身份是普通用戶ysj,觀察hehe的權限及擁有者(user)情況:

我們看到hehe是用戶ysj的,且具有rwx權限,
-
再進入hehe,觀察其各檔案的權限及擁有者(user)情況:

test1、test2是普通用戶ysj的,test3、test4是超級用戶root的,
-
我們現在的身份是普通用戶ysj,能不能以ysj的身份洗掉root的內容呢?
結果證明,這是沒問題的,那這不是一個超大的bug嗎?
為了解決這個不科學的問題, Linux引入了粘滯位的概念,
粘滯位
語法:chmod +t 目錄
功能:使用戶只能洗掉自己的檔案或目錄,當然,root不受限制,
chmod +t hehe
此時我們再進入hehe,洗掉test4是否會成功呢?
為什么還是成功了呢?
當一個目錄被設定為"粘滯位"(用chmod +t),則該目錄下的檔案只能由
一、超級管理員(root)洗掉
二、該目錄的所有者洗掉
三、該檔案的所有者洗掉
我們看目錄hehe的所有者,是ysj,而當前正是ysj在執行rm命令,所以是可以執行洗掉的,如果將hehe的所有者改為root,那么使用ysj的身份,就不能再洗掉test4了
sudo touch test4 …/hehe 再次在目錄hehe創建所有者為root的test4
sudo chown root …/hehe 將hehe的所有者改為root
rm test4 試圖洗掉test4

關于權限的總結
- 目錄的可執行權限是表示你可否在目錄下執行命令,
- 如果目錄沒有-x權限,則無法對目錄執行任何命令,甚至無法cd 進入目錄, 即使目錄仍然有-r 讀權限(這個地方很容易犯錯,認為有讀權限就可以進入目錄讀取目錄下的檔案)
- 而如果目錄具有-x權限,但沒有-r權限,則用戶可以執行命令,可以cd進入目錄,但由于沒有目錄的讀 權限 ,所以在目錄下,即使可以執行ls命令,但仍然沒有權限讀出目錄下的檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/350943.html
標籤:其他
上一篇:幾分鐘帶你解決資料結構問題-------單鏈表(超詳細)
下一篇:演算法給小碼農二叉樹魂鎧戰衣
