一、用戶身份權限
0、id
小命令,查看用戶及其所屬的組。
root@kali:~# id ss
uid=1001(ss) gid=1001(ss) 組=1001(ss)
1、useradd
useradd命令用於創建新的用戶,格式爲“useradd [選項] 用戶名”。
使用該命令創建用戶賬戶時,默認的用戶家目錄會被存放在/home目錄中,默認的Shell解釋器爲/bin/bash,而且默認會創建一個與該用戶同名的基本用戶組。不過這些都可以在創建用戶的時候使用參數進行修改。
參數 | 作用 |
---|---|
-d | 指定用戶的家目錄(默認爲/home/username) |
-e | 賬戶的到期時間,格式爲YYYY-MM-DD. |
-u | 指定該用戶的默認UID |
-g | 指定一個初始的用戶基本組(必須已存在) |
-G | 指定一個或多個擴展用戶組 |
-N | 不創建與用戶同名的基本用戶組 |
-s | 指定該用戶的默認Shell解釋器 |
linux中有UID和GID,也就是用戶ID(用戶名)和組ID(羣組名),分別代表文件所屬的用戶和組。
root@kali:~# useradd ss
root@kali:~# id ss
uid=1001(ss) gid=1001(ss) 組=1001(ss)
2、groupadd
groupadd命令用於創建用戶組,格式爲“groupadd [選項] 羣組名”。
用戶組的作用和windows上的是一樣的,都是爲了方便權限的管理和分配。
一般直接添加羣組,不經常用到參數選項:
groupadd sea
3、usermod
usermod命令用於修改用戶的屬性,格式爲“usermod [選項] 用戶名”。
參數 | 作用 |
---|---|
-c | 填寫用戶賬戶的備註信息 |
-d -m | 參數-m與參數-d連用,可重新指定用戶的家目錄並自動把舊的數據轉移過去 |
-e | 賬戶的到期時間,格式爲YYYY-MM-DD |
-g | 變更所屬用戶組 |
-G | 變更擴展用戶組 |
-L | 鎖定用戶禁止其登錄系統 |
-U | 解鎖用戶,允許其登錄系統 |
-s | 變更默認終端 |
-u | 修改用戶的UID |
//把用戶ss添加到root用戶組中
usermod -G root ss
//修改用戶ss的UID號碼爲1234
usermod -u 1234 ss
用戶的信息保存在/etc/passwd文件中,也可以直接對文件進行修改,和usermod命令等效。
4、passwd
passwd命令用於修改用戶密碼、過期時間、認證信息等,格式爲“passwd [選項] [用戶名]”
參數 | 作用 |
---|---|
-l | 鎖定用戶,禁止其登錄 |
-u | 解除鎖定,允許用戶登錄 |
–stdin | 允許通過標準輸入修改用戶密碼,如echo “NewPassWord” |
-d | 使該用戶可用空密碼登錄系統 |
-e | 強制用戶在下次登錄時修改密碼 |
-S | 顯示用戶的密碼是否被鎖定,以及密碼所採用的加密算法名稱 |
//直接使用passwd命令可以修改當前用戶的密碼
reno@reno:~$ passwd
Changing password for reno.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
5、userdel
userdel命令用於刪除用戶及用戶信息,格式爲“userdel [選項] 用戶名”。
執行刪除操作時,被刪除用戶的家目錄時默認保留的,但可以使用-r參數吧家目錄也刪除
參數 | 作用 |
---|---|
-f | 強制刪除用戶 |
-r | 同時刪除用戶及用戶家目錄 |
二、文件權限
1、Linux中的文件類型
- -:普通文件
- d:目錄文件
- l:鏈接文件
- b:塊設備文件
- c:字符設備文件
- p:管道文件
這些就是Linux中常見的文件類型了
2、Linux中文件的一般權限
一般文件的權限有可讀(r)、可寫(w)、可執行(x),這些權限Windows上也是有的,但普通用戶平時用Windows的時候一般不會涉及權限問題,但在一文件組成的Linux系統上,文件的權限是一個大問題。
Linux中在表示權限的時候經常用數字,r、w、x分別對應的權限數字爲4、2、1,而文件的權限表示經常使用這些符號的組合:
reno@reno:~/Downloads$ ls -lh
total 53M
-rw-rw-r-- 1 reno reno 53M Sep 17 08:45 code_1.38.1-1568209190_amd64.deb
//開頭的-表示文件類型爲普通文件,然後rw-表示所有者的權限,中間的rw-表示所屬組的權限,最後的r--表示其他用戶的權限
這就是Linux中文件的一般權限
3、Linux中文件的特殊權限
很多時候在一些複雜環境下,我們需要更多更全面的權限來進行更進一步的管理,Linux面對一些文件設定了特殊的權限
1)SUID權限
- 專門針對二進制程序(對目錄無用)
- 讓二進制程序的執行者臨時擁有屬主的權限(該二進制程序必須可執行)
- 屬主仍是原來的屬主,不過可以暫時得到屬主的權限
//權限設置命令
chmod u+s filename
chmod u-s filename
2)SGID權限
- 讓執行者臨時擁有屬組的權限(對象可以是二進制文件和目錄)
- 屬組仍是原來的屬組
- 目錄中創建的文件自動繼承該目錄的用戶組
//權限設置命令
chmod g+s filename
chmod g-s filename
3)SBIT權限
也就是Sticky Bit(保護位)
- 確保用戶只能刪除自己的文件
- 目錄被設置SBIT之後,其中的文件只能被其所有者或root用戶刪除
- 只設置在目錄上,設置在文件上毫無意義
//權限設置命令
chmod o+t dir_name
chmod o-t dir_name
4)chmod和chown
chmod用法:
chmod [-cfvR] [ugoa…][[±=][rwxX]…] file
只看用法有點繁雜了
- u 表示該文件的擁有者,g 表示與該文件的擁有者屬於同一個羣體(group)者,o 表示其他以外的人,a 表示這三者皆是。
- - + 表示增加權限、- 表示取消權限、= 表示唯一設定權限。
- r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該文件是個子目錄或者該文件已經被設定過爲可執行。
- -c : 若該文件權限確實已經更改,才顯示其更改動作
- -f : 若該文件權限無法被更改也不要顯示錯誤訊息
- -v : 顯示權限變更的詳細資料
- -R : 對目前目錄下的所有文件與子目錄進行相同的權限變更(即以遞迴的方式逐個變更)
一般使用是這樣:
chmod u+w filename
chown用法:
chown [-cfhvR] user[:group] file
- user : 新的文件擁有者的使用者 ID
- group : 新的文件擁有者的使用者組(group)
- -c : 顯示更改的部分的信息
- -f : 忽略錯誤信息
- -h :修復符號鏈接
- -v : 顯示詳細的處理信息
- -R : 處理指定目錄以及其子目錄下的所有文件
需要強調的是,chown命令只能由管理員使用,按需要指定文件的擁有者改爲指定的用戶或組。
一般用法:
//指定flag.txt的擁有者爲ss,羣組爲root
chown ss:root flag.txt
//將目前目錄下的所有文件與子目錄的擁有者皆設爲ss,羣組都設爲root
chown ss:root *
4、Linux中文件的隱藏權限
隱藏權限也很特殊,是不會被用戶察覺到的權限,有時候明明有充足的權限卻無法刪除或修改文件,這就可能說明是隱藏權限的問題了,隱藏權限在一定程度上增加了文件的安全性。
1)隱藏權限設置命令chattr
格式爲“chattr [參數] 文件”
參數 | 作用 |
---|---|
i | 無法對文件進行修改;若對目錄設置了該參數,則僅能修改其中的子文件內容而不能新建或刪除文件 |
a | 僅允許補充(追加)內容,無法覆蓋/刪除內容(Append Only) |
S | 文件內容在變更後立即同步到硬盤(sync) |
s | 徹底從硬盤中刪除,不可恢復(用0填充原文件所在硬盤區域) |
A | 不再修改這個文件或目錄的最後訪問時間(atime) |
b | 不再修改文件或目錄的存取時間 |
D | 檢查壓縮文件中的錯誤 |
d | 使用dump命令備份時忽略本文件/目錄 |
c | 默認將文件或目錄進行壓縮 |
u | 當刪除該文件後依然保留其在硬盤中的數據,方便日後恢復 |
t | 讓文件系統支持尾部合併(tail-merging) |
X | 可以直接訪問壓縮文件中的內容 |
Linux中的命令總是特別多,但隱藏權限命令對於一般用戶來說還是不太常用的。
可以看到-a參數就可以設置文件不被刪除。
使用命令chattr +a flag.txt之後再進行刪除就無法刪除文件。
2)隱藏權限顯示命令lsattr
格式爲“lsattr [參數] 文件”
這個命令倒是沒有什麼參數,可以類比於ls命令,直接使用就可以顯示出文件的隱藏權限。
5、文件訪問控制列表(ACL-Access Control List)
權限本身就是爲了限制不同用戶對文件的使用程度而設置的。
如果想對某個指定的用戶進行單獨的權限控制,就要使用ACL了。使用ACL可以指定某個用戶對特定的文件或文件夾的權限。
1)ACL設置命令setfacl
setfacl使用下面的規則格式:
[d[efault]:] [u[ser]:]uid [:perms] 指定用戶的權限,文件所有者的權限(如果uid沒有指定)。
[d[efault]:] g[roup]:gid [:perms] 指定羣組的權限,文件所有羣組的權限(如果gid未指定)
[d[efault]:] m[ask][:] [:perms] 有效權限掩碼
[d[efault]:] o[ther] [:perms] 其他的權限
常用參數:
- -R:遞歸參數,用於目錄
- -m:針對普通文件
- -b:刪除文件的擴展ACL,基本的仍會保留
- -d:設定默認的acl規則
示例:
setfacl -Rm u:ss:rwx /root
2)ACL顯示命令getfacl
格式爲:getfacl 文件名
6、su和sudo命令
su命令用來切換用戶身份,可以讓當前用戶在切換不退出登錄的情況下切換到其他用戶。
管理員切換到其他用戶不需要密碼,普通用戶在進行用戶切換的時候需要輸入目的用戶的密碼。
//切換到ss用戶,中間的-號的作用是實現完全切換,此時環境變量等系統信息也完全切換爲目標用戶的信息
su - ss
對於普通用戶沒有權限的命令,需要root用戶實現,這樣普通用戶需要和root用戶進行切換,對於普通用戶工作不方便,root用戶的密碼也會變得不安全。sudo命令就是解決這個問題的,sudo命令會給普通用戶一些更高的權限來幫助其完成工作。
先說說用法:
sudo [參數] 命令名稱
參數 | 作用 |
---|---|
-h | 列出幫助信息 |
-l | 列出當前用戶可執行的命令 |
-u | 用戶名或UID值 以指定的用戶身份執行命令 |
-k | 清空密碼的有效時間,下次執行sudo時需要再次進行密碼驗證 |
-b | 在後臺執行指定的命令 |
-p | 更改詢問密碼的提示語 |
sudo命令具有如下功能:
- 限制用戶執行指定的命令:
- 記錄用戶執行的每一條命令;
- 配置文件(/etc/sudoers)提供集中的用戶管理、權限與主機等參數;
- 驗證密碼的後5分鐘內(默認值)無須再讓用戶再次驗證密碼。
如果擔心直接修改配置文件會出現問題,則可以使用sudo命令提供的visudo命令來配置用戶權限。這條命令在配置用戶權限時將禁止多個用戶同時修改sudoers配置文件,還可以對配置文件內的參數進行語法檢查,並在發現參數錯誤時進行報錯。
sudo進行權限操作時需要的是用戶的密碼,這就爲普通用戶提供了很大的便利。
示例:
當時用apt命令安裝應用的時候顯示有lock(鎖),不能進行操作,然後使用sudo進行暫時授權,輸入用戶自己的密碼即可,然後就可以成功使用較高權限的命令。
只有root管理員纔可以使用visudo命令編輯sudo服務的配置文件。
通過修改配置文件可以限定不同用戶可用的命令。
用戶可以通過sudo -l來查看可以執行的命令