在多用戶(能夠不一樣時)計算機系統的管理中,權限是指某個特定的用戶具備特定的系統資源使用權力,像是文件夾、特定系統指令的使用或存儲量的限制。面試
在Linux中分別有讀、寫、執行權限:vim
對於目錄來講,讀權限影響用戶是否可以列出目錄結構數組
對於文件來講,讀權限影響用戶是否能夠查看文件內容bash
對目錄來講,寫權限影響用戶是否能夠在文件夾下「建立/刪除/複製到/移動到」文檔ui
對於文件來講,寫權限影響用戶是否能夠編輯文件內容操作系統
對於目錄來講:執行權限影響用戶是否能夠執行cd操做視頻
對於文件來講,特別腳本文件。執行權限影響文件是否能夠運行繼承
因爲Linux是多用戶、多任務的操做系統,所以可能經常有多人同時在某臺主機上工做,但每一個人都可在主機上設置文件的權限,讓其成爲我的的「私密文件」,即我的全部者。由於設置了適當的文件權限,除本人(文件全部者)以外的用戶沒法查看文件內容。遞歸
與文件全部者同組最有用的功能就體如今多個團隊在同一臺主機上開發資源的時候。例如主機上有A、B兩個團體(用戶組),A中有a1,a2,a3三個成員,B中有b1,b2兩個成員,這兩個團體要共同完成一份報告F。因爲設置了適當的權限,A、B團體中的成員都能互相修改對方的數據,可是團體C的成員則不能修改F的內容,甚至連查看的權限都沒有。同時,團體的成員也能設置本身的私密文件,讓團隊的其它成員也讀取不了文件數據。在Linux中,每一個帳戶支持多個用戶組。如用戶a一、b1便可屬於A用戶組,也能屬於B用戶組【主組和附加組】。圖片
這個是個相對概念。打個比方,大明、二明、小明一家三兄弟住在一間房,房產證上的登記者是大明(owner全部者),那麼,大明一家就是一個用戶組,這個組有大明、二明、小明三個成員;另外有我的叫張三,和他們三沒有關係,那麼這個張三就是其餘人(others)了。
同時,大明、二明、小明有各自的房間,三者雖然能自由進出各自的房間,可是小明不能讓大明看到本身的情書、日記等,這就是文件全部者(用戶)的意義。
在Linux中,還有一個神同樣存在的用戶,這就是root用戶,由於在全部用戶中它擁有最大的權限 ,因此管理着普通用戶。
[root@li yum.repos.d]# ls -l /root
總用量 8
-rw-------. 1 root root 1536 5月 16 22:41 anaconda-ks.cfg
-rw-r--r--. 1 root root 1584 5月 16 22:43 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 5月 16 22:51 公共
drwxr-xr-x. 2 root root 6 5月 16 22:51 模板
drwxr-xr-x. 2 root root 6 5月 16 22:51 視頻
drwxr-xr-x. 2 root root 6 5月 16 22:51 圖片
drwxr-xr-x. 2 root root 6 5月 16 22:51 文檔
drwxr-xr-x. 2 root root 6 5月 16 22:51 下載
drwxr-xr-x. 2 root root 6 5月 16 22:51 音樂
drwxr-xr-x. 2 root root 6 5月 16 22:51 桌面
十位字符表示含義:
第1位:表示文檔類型,取值常見的有「d表示文件夾」、「-表示文件」、「l表示軟鏈接」、「s表示套接字」、「c表示字符設備」、「b表示塊狀設備」等等;
第2-4位:表示文檔全部者的權限狀況,第2位表示讀權限的狀況,取值有r、-;第3位表示寫權限的狀況,w表示可寫,-表示不可寫,第4位表示執行權限的狀況,取值有x、-。
第5-7位:表示與全部者同在一個組的用戶的權限狀況,第5位表示讀權限的狀況,取值有r、-;第6位表示寫權限的狀況,w表示可寫,-表示不可寫,第7位表示執行權限的狀況,取值有x、-。
第8-10位:表示除了上面的前2部分的用戶以外的其餘用戶的權限狀況,第8位表示讀權限的狀況,取值有r、-;第9位表示寫權限的狀況,w表示可寫,-表示不可寫,第10位表示執行權限的狀況,取值有x、-。
權限分配中,均是rwx的三個參數組合,且位置順序不會變化。沒有對應權限就用 – 代替。
語法:#chmod 選項 權限模式 文檔
經常使用選項:
-R:遞歸設置權限 (當文檔類型爲文件夾的時候)
權限模式:就是該文檔須要設置的權限信息
文檔:能夠是文件,也能夠是文件夾,能夠是相對路徑也能夠是絕對路徑。
注意點:若是想要給文檔設置權限,操做者要麼是root用戶,要麼就是文檔的全部者。
給誰設置:
u:表示全部者身份owner(user)
g:表示給全部者同組用戶設置(group)
o:表示others,給其餘用戶設置權限
a:表示all,給全部人(包含ugo部分)設置權限
若是在設置權限的時候不指定給誰設置,則默認給全部用戶設置
r:讀
w:寫
x:表示執行
-:表示沒有權限
+:表示給具體的用戶新增權限(相對當前)
-:表示刪除用戶的權限(相對當前)
=:表示將權限設置成具體的值(注重結果)【賦值】
例如:須要給/root/anaconda-ks.cfg文件(-rw——-.)設置權限,要求全部者擁有所有的權限,同組用戶擁有讀和寫權限,其餘用戶只讀權限。
答案:
全部者:所有權限(rwx)
同組用戶:讀寫(rw)
其餘:只讀(r)
[root@li yum.repos.d]# chmod o=rwx,g=rw,o=rw /root/anaconda-ks.cfg
[root@li yum.repos.d]# ls -l /root
-rw-rw-rw-. 1 root root 1536 5月 16 22:41 anaconda-ks.cfg
-rw-r--r--. 1 root root 1584 5月 16 22:43 initial-setup-ks.cfg
常常會在一些技術性的網頁上看到相似於#chmod 777 a.txt 這樣的一個權限,這種形式稱之爲數字形式權限(777)。
讀:r 4
寫:w 2
執行:x 1
沒有任何權限:0 對應—
例如:須要給anaconda-ks.cfg設置權限,權限要求全部者擁有所有權限,同組用戶擁有讀執行權限,其餘用戶只讀。
全部者權限 = 所有權限 = 讀 + 寫 +執行 = 4 + 2 + 1 = 7
同組用戶權限 = 讀權限 + 執行權限 = 4 + 1 = 5
其餘用戶權限 = 讀權限 = 4
最終得出的結果是754
[root@li ~]# chmod 754 /root/anaconda-ks.cfg
[root@li ~]# ls -l /root
總用量 8
-rwxr-xr--. 1 root root 1536 5月 16 22:41 anaconda-ks.cfg
chmod +r test #表示對test文件的ugo三類用戶都添加r讀權限
chmod +w test #表示對test文件的u屬主添加w寫權限,屬組和其餘人無讀權限
chmod +x test #表示對test文件的ugo三類用戶都添加x執行權限
面試題:用超級管理員設置文檔的權限命令是#chmod -R 731 aaa,請問這個命令有沒有什麼不合理的地方?
全部者 = 7 = 4 + 2 + 1 = 讀 + 寫 + 執行
同組用戶 = 3 = 2 + 1 = 寫 + 執行
其餘用戶 = 1 = 執行
問題在權限731中3表示寫+執行權限,可是寫又沒必要鬚鬚要能打開以後才能夠寫,所以必須須要具有讀權限,所以權限不合理。之後建議各位在設置權限的時候不要設置這種「奇葩權限」。
單獨出現二、3的權限數字通常都是有問題的權限。
做用:更改文檔的所屬用戶(change owner)
語法:#chown -R 新的username 文檔路徑
-R:表示選項 文件不須要-R
目錄須要加-R
若是你要對目錄進行操做,加參數 -R
案例:
chown user:group filename 好比:chown hr:san a.txt 把文件的屬主和屬組改成hr,san
chown user filename 好比:chown san a.txt 把文件的屬主改成san用戶
chown :group filename 好比: chown :miao a.txt 把文件的屬組改成miao這個組
chown user: filename 好比:chown san: a.txt 自動繼承這個用戶全部的組
chgrp hr filename 好比: chgrp hr f.txt
-R :遞歸(目錄下的全部內容都更改,不然只修改目錄)
1.SUID(set uid設置用戶ID):限定:只能設置在二進制可執行程序上面。對目錄設置無效
功能:程序運行時的權限從執行者變動成程序全部者的權限
[litong@li ~]$ cat /etc/shadow
cat: /etc/shadow: 權限不夠(在普通用戶下沒法查看shadow文件)
[root@li ~]# chmod u+s /usr/bin/cat(把cat命令賦予特殊權限,發現普通用戶能夠查看shadow文件)
[root@li ~]# su - litong
上一次登陸:五 5月 17 17:43:50 CST 2019pts/0 上
[litong@li ~]$ cat /etc/shadow
root:$6$Gl199M/OSXJkob7M$d6p8J/jSaiiVWqyOJvwPCYew2PxDU6F6ysNW7vmnHC71oAfAm74sAVo20IXDg61GSoke/GdyOmPWb9aszCddv0::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::
lp:*:17110:0:99999:7:::
sync:*:17110:0:99999:7:::
shutdown:*:17110:0:99999:7:::
2.SGID
限定:既能夠給二進制可執行程序設置,也能夠給目錄設置。
功能:在設置了SGID權限的目錄下創建文件時,新建立的文件的所屬組會繼承上級目錄的權限。
chmod g+s 目錄
3.SBIT
對於設置sbit權限的文件,用戶只能刪除本身建立的文件,沒法刪除其餘用戶的文件。
4.ACL文件擴展權限
例:設置用戶ken對文件a.txt擁有的rwx權限 ,ken不屬於a.txt的所屬主和組,ken是other。怎麼作?
setfacl -m u:li:rwx a.txt
-m表示設置的意思
查看擴展權限getfacl
去除權限
setfacl -R -m u:ken:rw- testdirectory/ #-R必定要在-m前面,表示目錄下全部文件
setfacl -x u:ken /tmp/a.txt # 去掉單個權限
setfacl -b /tmp/a.txt# 去掉全部權限
5.實戰sudo
問題:reboot、shutdown、init、halt、user管理,在普通用戶身份上都是操做不了,可是有些特殊的狀況下又須要有執行權限。又不可能讓root用戶把本身的密碼告訴普通用戶,這個問題該怎麼解決?
該問題是能夠被解決的,可使用sudo(switch user do)命令來進行權限設置。Sudo可讓管理員(root)事先定義某些特殊命令誰能夠執行。
默認sudo中是沒有除root以外用戶的規則,要想使用則先配置sudo。
Sudo配置文件:/etc/sudoers
該文件默認只讀,不容許修改,所以不能直接修改。
a. 配置sudo文件請使用「#visudo」,打開以後其使用方法和vim一致
b. 配置普通用戶的權限
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
在文件內92行處:
Root表示用戶名,若是是用戶組,則能夠寫成「%組名」
ALL:表示容許登陸的主機(地址白名單)
(ALL):表示以誰的身份執行,ALL表示root身份
ALL:表示當前用戶能夠執行的命令,多個命令可使用「,」分割
案例:建立一個用戶,自己該用戶不能添加用戶,要求使用sudo配置,將其設置爲能夠添加用戶。
[litong@li ~]$ useradd ti
-bash: /usr/sbin/useradd: 權限不夠
修改sudo文件
91 ## Allow root to run any commands anywhere
92 root ALL=(ALL) ALL
93 litong ALL=(ALL) /usr/sbin/useradd
注意:在寫sudo規則的時候不建議寫直接形式的命令,而是寫命令的完整路徑。
路徑可使用which命令來查看
語法:#which 指令名稱
在添加好對應的規則以後就能夠切換用戶,切換到普通用戶,再去執行:
此時要想使用剛纔的規則,則以如下命令進行:
#sudo 須要執行的指令
[root@li ~]# su - litong
上一次登陸:五 5月 17 18:03:04 CST 2019pts/0 上
[litong@li ~]$ sudo useradd ti
咱們信任您已經從系統管理員那裏瞭解了平常注意事項。
總結起來無外乎這三點:
#1) 尊重別人的隱私。
#2) 輸入前要先考慮(後果和風險)。
#3) 權力越大,責任越大。
[sudo] litong 的密碼:
在輸入sudo指令以後須要輸入當前的用戶密碼進行確認的操做(不是root用戶密碼),輸入以後在接下來5分鐘內再次執行sudo指令不須要密碼。