linux用戶身份和文件權限
1.用戶身份與能力
root管理員是linux 的超級用戶,他擁有系統的所有權,能夠管理系統的各項功能,如添加/刪除用戶,啟動/關閉服務進程,開啟/禁用硬件設備……
"Linux系統中的管理員就是root",這句話是錯誤的,Linux系統管理員之所以是root,並不是因為他叫root,而是因為用戶的身份號碼(UID)的數值為0,。UID相當於是身份證號,其用戶身份大致分為:
- UID=0:系統的管理員用戶。
- 1<=UID<=999:系統用戶,服務程序會有獨立的系統用戶負責運行。
- UID>=1000:普通用戶,有管理員創建用於日常工作的用戶。
用戶組:我們可以把多個用戶加入到同一個用戶組,從而便於為組中的用戶統一規劃權限或指定任務。另外,在管理員創建用戶時,將為該用戶自動創建一個與其同名的基本用戶組,而且這個基本用戶組只有該用戶一個人,如果該用戶以後被歸納到其他的用戶組,則這些其他用戶組對該用戶來說是擴展用戶組。
1.1 useradd命令
創建新用戶,格式:useradd [option] 用戶名
創建新用戶時,默認的用戶家目錄會被存放在/home目錄中,默認的Shell解釋器為/bin/bash,而且默認會創建一個與該用戶同名的基本用戶組。其中option:
參數 |
作用 |
-d | 指定用戶的家目錄(默認為/home/username) |
-u | 指定該用戶的默認UID |
-g | 指定一個初始的用戶基本組(已存在的) |
-G | 指定一個或多個擴展用戶組 |
-N | 不創建與用戶同名的基本用戶組 |
-s | 指定默認的默認Shell解釋器 |
$ useradd -u 6666 hah $ id hah uid=6666(hah) gid=6666(hah) groups=6666(hah)
1.2 groupadd 命令
用於創建用戶組,格式為 groupadd [option] groupname
$ groupadd haha
1.3 usermod 命令
usermod用於修改用戶的屬性,格式為usermod [option] username
其中option:
參數 | 作用 |
-c | 填寫用戶賬戶的備註信息 |
-d -m | 二者連用,可重新指定用戶的家目錄並自動把舊的數據轉移過去 |
-g | 變更所屬用戶組 |
-G | 變更擴展用戶組 |
-L | 鎖定用戶禁止登陸系統 |
-U | 解鎖用戶 |
-s | 變更默認終端 |
-u | 修改用戶的UID |
$ id hah uid=6666(hah) gid=6666(hah) groups=6666(hah) $ usermod -G root hah $ id hah uid=6666(hah) gid=6666(hah) groups=6666(hah),0(root) $ usermod -u 8888 hah uid=8888(hah) gid=6666(hah) groups=6666(hah),0(root)
1.4 passwd 命令
修改用戶密碼,格式為passwd [option] username
其中option:
參數 | 作用 |
-d | 使該用戶可用空密碼登錄系統 |
-e | 強制用戶在下次登錄時修改密碼 |
另外,普通用戶只能用來修改自身密碼,而root管理員則有權限修改其他所有用戶的密碼,而且不需要輸入舊密碼驗證。
$ passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully.
$ passwd hah Changing password for user limingxing. New password: Retype new password: passwd: all authentication tokens updated successfully.
1.5 userdel 命令
刪除用戶,格式userdel [option] username
其中option:
參數 | 作用 |
-f | 強制刪除用戶 |
-r | 同時刪除用戶和用戶家目錄 |
2.文件權限與歸屬
linux中文件類型不盡相同:
- -:普通文件
- d:目錄文件
- l:鏈接文件
- b:塊設備文件
- c:字符設備文件
- p:管道文件
每個文件都有所屬的所有者和所有組,以及所有者,所有組和其他人對文件的可讀(r)、可寫(w)、可執行(x)的權限。
文件的讀、寫、執行權限可以簡寫為rwx,也可分別用數字4、2、1表示。
文件權限的數字法表示基於字符表示權限計算而來,例如某文件的權限為7(4+2+1)代表可讀可寫可執行,6(4+2)代表可讀可寫。
在linux系統中,查看文件的權限時,其表示方法為rwxrwxrwx。例如某文件的所有者權限為rwx,所有組權限為rw,其他人為r,那麽則表示為rwxrw-r--,數組表示為764。
補充:在創建一個普通文件時,其默認權限是rw-r--r--。
2.1chmod命令和chown命令:
chmod用來設置文件或目錄的權限,格式為chmod [option] 權限 文件或目錄名稱
如果把一個文件權限設置為任何人可讀可寫可執行,則執行:
$ chmod -Rf 777 text.txt
-R表示遞歸其子目錄,-f表示 若無權限操作該文件時不顯示報錯信息。
chown用來設置文件的所有者和所有組,格式為: chown [option] 所有者:所有組 文件或目錄名稱
3.su命令與sudo服務
su命令用於切換用戶身份,使得當前用戶在不退出登錄的情況下,順暢地切換到其他用戶:
$ su - username
su 和用戶名之間的 ‘-’ 表示完全切換到新的用戶,即把環境變量信息也變為新用戶的相應信息,而不是保留原始的信息。另外,當從root用戶切換到其他用戶時不需要進行密碼驗證,而從普通用戶到root用戶需要驗證密碼。
上述普通用戶需要進行特殊權限時需要登錄到root用戶,這樣就容易泄露root用戶密碼,而sodu命令可以把特定命令的執行權賦予給指定的用戶。
sudo命令用於給普通用戶提供額外的權限來完成原本root管理員才能完成的任務,格式為sudo [option] 命令名稱。
該命令可以使得我們的當前用戶以另外一個用戶的身份去執行某個命令,但是並不需要切換到目標用戶的身份,只不過在執行對應命令的那一刻,當前用戶暫時擁有了目標用戶的權限,這種機制有一點類似於SUID,二者同樣表示的都是在執行命令的時候使用的不是當前用戶的身份而是目標用戶的身份,而且不用切換至目標用戶的身份,卻可以以目標用戶的身份去執行某條命令,但是當前用戶使用sudo所能執行的命令僅僅限於目標用戶定義給當前用戶的那些命令,其它未定義的命令就算使用了sudo也不能使用,事實上sudo就是用來定義某個用戶能夠以目標用戶(未必是管理員,但是該用戶我們可以自己指定)的身份通過某主機執行某條命令的機制,說的通俗一點就是誰可以以另外哪一個人的身份在哪個主機上執行哪個命令,但是這種機制有一種安全措施,只要某用戶想要使用目標用戶定義給他的可以使用的管理系統類命令的時候,必須向服務器提供他自己的密碼,這種安全機制可以防範別人惡意冒充某用戶使用sudo利用目標用戶的身份去執行一些系統管理類的命令,以上就是sudo提供給我們的所有管理功能,總的來說,sudo的功能就是管理員所有可以執行的命令或者其他用戶所有可以執行的命令都可以授權給另外一個用戶來執行,一般來講我們使用sudo的時候,都是將管理員用戶的身份授權給其他用戶來執行一些系統管理類命令。
(摘自:https://blog.51cto.com/zhubo/1883195)
其中option:
參數 | 作用 |
-h | 列出幫助信息 |
-l | 列出當前用戶可執行的命令 |
-u用戶名或UID | 以指定的用戶身份執行命令 |
-k | 清空密碼的有效時間,下次執行sudo時需要再次進行密碼驗證 |
-b | 在後臺執行指定的命令 |
-p | 更改詢問密碼的提示語 |
sudo的配置文件:
sudo的配置文件是/etc/sudoers,這個文件的安全性很重要,所以為了避免其他用戶查看該文件,這個文件的權限是440:
$ ls -l /etc/sudoers -r--r----- 1 root root 3937 Apr 10 23:38 /etc/sudoers
文件時只讀的,linux提供visudo命令來修改此文件中的內容,此命令與vim編輯器一樣,
/etc/sudoers這個配置文件的語法格式其實很簡單,如果不是語法自身的某些關鍵字定義的某些功能的話,那麽它的每一行通常表示定義了一個sudo條目,而一個sudo條目其實就是定義了哪個用戶能夠以另外哪個用戶的身份在哪些主機上執行哪些命令的意思。而且此文件中有大量的註釋信息供我們參考和理解。
sudo條目的語法格式
who(誰) which_hosts(能夠在哪些主機上)=(runas(以誰的身份)) COMMAND(運行哪些命令)
例如在
root ALL=(ALL) ALL #100行左右
後面加上
hah ALL=(ALL) ALL
則hah用戶可以使用sudo執行任何的命令。
但是考慮到生產環境中不允許某個用戶擁有系統中所有命令的最高執行權,因此ALL參數就不合適了。因此只能賦予普通用戶具體的命令以滿足工作需求即可。如果需要讓某個用戶只能使用root管理員的身份執行指定的命令,切記一定要給出該命令的絕對路徑,否則系統識別不出。我們可以試用whereis命令找出命令所對應的保存路徑,例如:
$ whereis cat cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz $ visudo ... root ALL=(ALL) ALL hah ALL=(ALL) /usr/bin/cat ...
$ su - hah
hah$ sudo cat text.txt
[sudo] password for hah:
.....
如果有其他需求的話,可以按照註釋內容進行配置。
linux用戶身份和文件權限