用戶管理與權限管理
這節課講解用戶管理與權限管理的知識,這一節講的知識點在工作中可能不會由你來進行實操,但是你得知道怎麼回事。因爲下面大量的操作都涉及到一個用戶—root,root 是 Linux中級別最高的一個用戶,在企業中,也很少會給你 root 用戶的密碼。如果一個公司直接給你們root 密碼,那你就可以考慮寫一個辭職信了,因爲正經一點的大公司都會有一個專門的職位——運維工程師,專門負責root的密碼。
那我們爲什麼還要講這一節的知識點呢?因爲 Linux 服務器是多用戶、多任務的,一般是多個人、多個部門使用一臺服務器,或者是在一臺服務器上運行需要不同組件的管理員權限,這個時候肯定是會有角色的劃分的,你雖然不會去實操創建用戶、設置權限,但是你必須清楚你想要的是一個什麼樣的賬戶,以及這個賬戶需要有什麼樣的權限和能夠操作哪些文件。
整體來說,有一個三位一體的概念——用戶、權限、資源。這三個必須綁定在一起纔有意義。例如你只知道創建用戶,你就是創建一萬個用戶,也沒有什麼用,除非創建的用戶與某些資源捆綁起來,再施加一個權限給用戶,這樣的設置纔是一個有意義的具有特定權限能夠使用特定資源的用戶。
我們可以先舉一個簡單的例子,將我們要講的知識點以及具體操作串一下:
例子:假設公司有兩個獨立的項目組—group1和group2,起初的時候,這兩個項目組之間沒有任何的交集,這時我們只需要分別爲連個項目組創建兩個用戶和密碼即可。
通過 useradd 命令創建了三個用戶,group1、group2和其他用戶other(用於後續測試權限)。
接下來我們還需要分別給每個用戶設置密碼,如果不設置密碼,是無法登陸的。
設置密碼的命令爲 passwd,普通用戶只能使用這個命令設置自己的密碼,而 root 用戶可以通過這個命令修改別人的密碼。
然後我們就可以登陸了:
另外,我們還可以使用 id 命令,查看 用戶的 UID 和 GID 信息:
默認創建用戶(如果不分配組的話)會創建一個與用戶名同名的組,該用戶就屬於這個組。
接下來,我們先來看一下每個用戶 家目錄 的權限:
我們可以看到,默認情況下,每個用戶的家目錄只對所有者(即用戶本身)具有 rwx 權限,對 組內用戶和其它用戶都沒有權限。
另外,root 可以訪問任意用戶的家目錄:
通過 su 命令,可以切換用戶:
且 從 root 用戶切換到其它用戶不需要輸入密碼,由其它用戶切換到其它用戶需要輸入密碼。
接下來繼續說我們的例子:現在我們已經創建了兩個項目組的用戶,他們分別進行自己的開發,現在,他們需要都使用一個文件夾,且這個文件夾還不能被其他的用戶訪問。我們該怎麼處理:
我們如何在一個服務器中爲兩個用戶設置一個合適的環境呢?只能他們兩個訪問數據、操作數據,其他用戶訪問不了。
我們可以創建一個公共share區域,權限對這兩個用戶開放:
在 root 用戶的根目錄下創建一個 share 目錄:
我們先看一下默認的設置是怎樣的:創建者爲 root ,歸屬組爲 root ,權限設置爲:rwxr-xr-x。與兩個項目組的用戶沒有半毛錢關係。
所以我們現在需要創建一個組,group1 和 group2 歸屬於這個組,且 share 的歸屬組也爲這個組,對歸屬組的權限須設置爲 rwx,且無其它用戶的權限須設置爲 ---,步驟如下 1、2、3。
1、通過 groupadd 命令創建一個組groupshare,然後使用 usermod 命令將兩個用戶添加組groupshare中:
2、改變 share 的歸屬組:
3、更改 share 目錄的權限設置:
修改權限有兩種方式:字符型和數值型。這裏先使用字符型。
給組加上w的權限(g+w),給其它用戶減去 rx 的權限(o-rx)
到此,share 公共區域設置完成。
不過,這時,如果我們直接使用 group1 或者 group2 用戶訪問 share 目錄,還是沒有權限,
這是因爲我們在 對 share 進行設置之前就已經登錄了 group1 和 group2。這時候,我們需要重新登錄一下 group1 和 group2 用戶,以刷新一下各自對 share 目錄的權限。
OK 了。
接下來,我們使用 group1 用戶在 share 目錄下創建一個 1.py 文件。
之後,如果切換到 group2 用戶,嘗試編輯 1.py 文件,保存時就會報錯:
其實,我們仔細觀察一下,1.py 的 權限設置以及歸屬組就知道了:
group1 創建的 1.py 文件默認是屬於 group1 組的,對其他用戶的權限設置爲只讀 r。
所以,我們有兩種方法來解決問題:
1、修改 1.py 的歸屬組爲 groupshare。但是 chown 命令只有 root 用戶才能使用,如果每次創建一個文件都請求 root 用戶修改一次,也太繁瑣了,或許很快你就被開除了。
2、修改1.py 對其他用戶的權限。(其實其他用戶就只有group2,因爲share只對groupshare組開放,能進來的只有group1和group2),這裏選擇修改權限是爲了講一下權限的數值修改方式。
chmod
在設置權限時,可以簡單地使用三個數字分別對應 擁有者 / 組 和 其他 用戶的權限# 直接修改文件|目錄的 讀|寫|執行 權限,但是不能精確到 擁有者|組|其他 chmod +/-rwx 文件名|目錄名

- 常見數字組合有(
u
表示用戶/g
表示組/o
表示其他):
777
===>u=rwx,g=rwx,o=rwx
755
===>u=rwx,g=rx,o=rx
644
===>u=rw,g=r,o=r
所以,這裏我們就需要
然後,我們在 group2 用戶時就可以對 1.py 具有和 group1 一樣的 rw 權限了。
其實這節課的內容不是很難,主要在於理解和分析:你需要什麼權限,以及如何處理公共文件。
另外,到公司後,你也不會去進行實操,而是需要寫清楚一個郵件給運維:我需要一個什麼樣的用戶,能訪問什麼目錄、什麼文件,其它用戶能訪問什麼目錄、什麼文件。
本節課使用到的命令有以下幾個,現在分別講解:
1、useradd
Linux useradd命令用於建立用戶帳號。
useradd可用來建立用戶帳號。帳號建好之後,再用passwd設定帳號的密碼.而可用userdel刪除帳號。使用useradd指令所建立的帳號,實際上是保存在/etc/passwd文本文件中。
語法
useradd [-mMnr][-c <備註>][-d <登入目錄>][-e <有效期限>][-f <緩衝天數>][-g <羣組>][-G <羣組>][-s <shell>][-u <uid>][用戶帳號]
或
useradd -D [-b][-e <有效期限>][-f <緩衝天數>][-g <羣組>][-G <羣組>][-s <shell>]
參數說明:
- -c<備註> 加上備註文字。備註文字會保存在passwd的備註欄位中。
- -d<登入目錄> 指定用戶登入時的啓始目錄。
- -D 變更預設值.
- -e<有效期限> 指定帳號的有效期限。
- -f<緩衝天數> 指定在密碼過期後多少天即關閉該帳號。
- -g<羣組> 指定用戶所屬的羣組。
- -G<羣組> 指定用戶所屬的附加羣組。
- -m 自動建立用戶的登入目錄。
- -M 不要自動建立用戶的登入目錄。
- -n 取消建立以用戶名稱爲名的羣組.
- -r 建立系統帳號。
- -s<shell> 指定用戶登入後所使用的shell。
- -u<uid> 指定用戶ID。
實例
添加一般用戶
# useradd tt
爲添加的用戶指定相應的用戶組
# useradd -g root tt
創建一個系統用戶
# useradd -r tt
爲新添加的用戶指定home目錄
# useradd -d /home/myd tt
建立用戶且制定ID
# useradd caojh -u 544
2、passwd
Linux passwd命令用來更改使用者的密碼
語法
passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]
必要參數:
- -d 刪除密碼
- -f 強制執行
- -k 更新只能發送在過期之後
- -l 停止賬號使用
- -S 顯示密碼信息
- -u 啓用已被停止的賬戶
- -x 設置密碼的有效期
- -g 修改羣組密碼
- -i 過期後停止用戶賬號
選擇參數:
- –help 顯示幫助信息
- –version 顯示版本信息
實例
修改用戶密碼
# passwd w3cschool //設置w3cschool用戶的密碼 Enter new UNIX password: //輸入新密碼,輸入的密碼無回顯 Retype new UNIX password: //確認密碼 passwd: password updated successfully #
顯示賬號密碼信息
# passwd -S w3cschool w3cschool P 05/13/2010 0 99999 7 -1
刪除用戶密碼
# passwd -d lx138 passwd: password expiry information changed.
3、id
Linux id命令用於顯示用戶的ID,以及所屬羣組的ID。
id會顯示用戶以及所屬羣組的實際與有效ID。若兩個ID相同,則僅顯示實際ID。若僅指定用戶名稱,則顯示目前用戶的ID。
語法
id [-gGnru][--help][--version][用戶名稱]
參數說明:
- -g或–group 顯示用戶所屬羣組的ID。
- -G或–groups 顯示用戶所屬附加羣組的ID。
- -n或–name 顯示用戶,所屬羣組或附加羣組的名稱。
- -r或–real 顯示實際ID。
- -u或–user 顯示用戶ID。
- -help 顯示幫助。
- -version 顯示版本信息。
實例
顯示當前用戶信息
# id //顯示當前用戶ID uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t
顯示用戶羣組的ID
# id -g 0
顯示所有羣組的ID
# id -g 0 1 2 3 4 5 6 10
顯示指定用戶信息
# id hnlinux
4、su
Linux su命令用於變更爲其他使用者的身份,除 root 外,需要鍵入該使用者的密碼。
使用權限:所有使用者。
語法
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
參數說明:
- -f 或 –fast 不必讀啓動檔(如 csh.cshrc 等),僅用於 csh 或 tcsh
- -m -p 或 –preserve-environment 執行 su 時不改變環境變數
- -c command 或 –command=command 變更爲帳號爲 USER 的使用者並執行指令(command)後再變回原來使用者
- -s shell 或 –shell=shell 指定要執行的 shell (bash csh tcsh 等),預設值爲 /etc/passwd 內的該使用者(USER) shell
- –help 顯示說明文件
- –version 顯示版本資訊
- – -l 或 –login 這個參數加了之後,就好像是重新 login 爲該使用者一樣,大部份環境變數(HOME SHELL USER等等)都是以該使用者(USER)爲主,並且工作目錄也會改變,如果沒有指定 USER ,內定是 root
- USER 欲變更的使用者帳號
- ARG 傳入新的 shell 參數
實例
變更帳號爲 root 並在執行 ls 指令後退出變回原使用者
su -c ls root
變更帳號爲 root 並傳入 -f 參數給新執行的 shell
su root -f
變更帳號爲 clsung 並改變工作目錄至 clsung 的家目錄(home dir)
su - clsung
切換用戶
[email protected]:~$ whoami //顯示當前用戶 hnlinux [email protected]:~$ pwd //顯示當前目錄 /home/hnlinux [email protected]:~$ su root //切換到root用戶 密碼: [email protected]:/home/hnlinux# whoami root [email protected]:/home/hnlinux# pwd /home/hnlinux
切換用戶,改變環境變量
[email protected]:~$ whoami //顯示當前用戶 hnlinux [email protected]:~$ pwd //顯示當前目錄 /home/hnlinux [email protected]:~$ su - root //切換到root用戶 密碼: [email protected]:/home/hnlinux# whoami root [email protected]:/home/hnlinux# pwd //顯示當前目錄 /root
5、groupadd
用於創建一個新的工作組
補充說明
groupadd命令 用於創建一個新的工作組,新工作組的信息將被添加到系統文件中。
語法
groupadd(選項)(參數)
選項
-g:指定新建工作組的id;
-r:創建系統工作組,系統工作組的組ID小於500;
-K:覆蓋配置文件“/ect/login.defs”;
-o:允許添加組ID號不唯一的工作組。
參數
組名:指定新建工作組的組名。
實例
建立一個新組,並設置組ID加入系統:
groupadd -g 344 jsdigname
6、usermod
Linux usermod命令用於修改用戶帳號。
usermod可用來修改用戶帳號的各項設定。
語法
usermod [-LU][-c <備註>][-d <登入目錄>][-e <有效期限>][-f <緩衝天數>][-g <羣組>][-G <羣組>][-l <帳號名稱>][-s <shell>][-u <uid>][用戶帳號]
參數說明:
- -c<備註> 修改用戶帳號的備註文字。
- -d登入目錄> 修改用戶登入時的目錄。
- -e<有效期限> 修改帳號的有效期限。
- -f<緩衝天數> 修改在密碼過期後多少天即關閉該帳號。
- -g<羣組> 修改用戶所屬的羣組。
- -G<羣組> 修改用戶所屬的附加羣組。
- -l<帳號名稱> 修改用戶帳號名稱。
- -L 鎖定用戶密碼,使密碼無效。
- -s<shell> 修改用戶登入後所使用的shell。
- -u<uid> 修改用戶ID。
- -U 解除密碼鎖定。
實例
更改登錄目錄
# usermod -d /home/hnlinux root
改變用戶的uid
# usermod -u 777 root
7、chown
Linux/Unix 是多人多工操作系統,所有的文件皆有擁有者。利用 chown 將指定文件的擁有者改爲指定的用戶或組,用戶可以是用戶名或者用戶ID;組可以是組名或者組ID;文件是以空格分開的要改變權限的文件列表,支持通配符。 。
一般來說,這個指令只有是由系統管理者(root)所使用,一般使用者沒有權限可以改變別人的文件擁有者,也沒有權限可以自己的文件擁有者改設爲別人。只有系統管理者(root)纔有這樣的權限。
使用權限 : root
語法
chown [-cfhvR] [--help] [--version] user[:group] file...
參數 :
- user : 新的文件擁有者的使用者 ID
- group : 新的文件擁有者的使用者羣體(group)
- -c : 若該文件擁有者確實已經更改,才顯示其更改動作
- -f : 若該文件擁有者無法被更改也不要顯示錯誤訊息
- -h : 只對於連結(link)進行變更,而非該 link 真正指向的文件
- -v : 顯示擁有者變更的詳細資料
- -R : 對目前目錄下的所有文件與子目錄進行相同的擁有者變更(即以遞迴的方式逐個變更)
- –help : 顯示輔助說明
- –version : 顯示版本
實例
將文件 file1.txt 的擁有者設爲 users 羣體的使用者 jessie :
chown jessie:users file1.txt
將目前目錄下的所有文件與子目錄的擁有者皆設爲 users 羣體的使用者 lamport :
chmod -R lamport:users *
8、userdel
Linux userdel命令用於刪除用戶帳號。
userdel可刪除用戶帳號與相關的文件。若不加參數,則僅刪除用戶帳號,而不刪除相關文件。
語法
userdel [-r][用戶帳號]
參數說明:
- -r 刪除用戶登入目錄以及目錄中所有文件。
實例
刪除用戶賬號
# userdel hnlinux
9、groupdel
Linux groupdel命令用於刪除羣組。
需要從系統上刪除羣組時,可用groupdel(group delete)指令來完成這項工作。倘若該羣組中仍包括某些用戶,則必須先刪除這些用戶後,方能刪除羣組。
語法
groupdel [羣組名稱]
實例
刪除一個羣組
# groupdel hnuser