本篇文章主要講解Linux系統中賬號許可權的管理。希望對大家有所幫助 ...
用戶賬號和組賬號概述
用戶賬號
- 超級用戶:
root
用戶是Linux
操作系統中預設的超級用戶賬號,對本主機擁有至高無上的許可權。 - 普通用戶:需要管理員用戶創建,擁有的許可權受到一定限制,一般只在用戶自己的宿主目錄中擁有完整許可權。
- 程式用戶:安裝
Linux
操作系統及部分應用程式時,會添加一些特定的低許可權用戶賬號,這些用戶一般不允許登錄到系統,而僅用於維持系統或某個程式的正常運行。
組賬號
- 基本組:每一個用戶賬號至少屬於一個組,這個組稱為該用戶的基本組(或私有組)。
- 附加組:若用戶除基本組外同時還包含在其他的組中,則這些組稱為該用戶的附加組(或公共組)
UID
和GID
UID
:Linux
操作系統中的每一個用戶賬號都有一個數字形式的身份標記,稱為UID
;root
用戶賬號的UID
號為固定值0
,而程式用戶賬號的UID
號預設為1~499
,500~60000
的UID
號預設分配給普通用戶使用。GID
:與UID
類似,每一個組賬號也有一個數字形式的身份標記,稱為GID
(Group IDentity
,組標識號)。root
組賬號的GID
號為固定值0
,而程式組賬號的GID
號預設為1~499
,500~60000
的GID
號預設分配給普通組使用。
用戶賬戶管理
用戶賬戶文件
/etc/passwd
:用於保存用戶名稱、宿主目錄、登錄Shell
等基本信息。/etc/shadow
:者用於保存用戶的密碼、賬號有效期等信息。在這兩個配置文件中,每一行對應一個用戶賬號,不同的配置項之間使用
“:”
(冒號)進行分隔。
passwd
文件中的配置行格式
passwd
文件的每一行內容中包含了七個用“:”
(冒號)分隔的配置欄位,每個配置欄位的含義如下:sun:x:1000:1000:sun:/home/sun:/bin/bash
欄位 | 含義 |
---|---|
第1欄位:sun |
用戶賬號的名稱 |
第2欄位:x |
密碼占位符 |
第3欄位:1000 |
用戶賬號的UID 號 |
第4欄位:1000 |
所屬基本組賬號的 GID 號 |
第5欄位:sun |
用戶全名 |
第6欄位:/home/sun |
宿主目錄 |
第7欄位:/bin/bash |
登錄 Shell 等信息 |
shadow
文件的每一行內容中包含了九個用“:”
(冒號)分隔的配置欄位,配置欄位的含義分別如下:sun:$6$ozmUzfeRN9m7...PWcx0:18117:0:99999:7:::
欄位 | 含義 |
---|---|
第1欄位:sun |
用戶賬號名稱 |
第2欄位:$6$ozmU...PWcx0 |
使用哈希演算法加密的密碼字串信息 |
第3欄位:18117 |
表示從 1970 年 01 月 01 日 算起到最近一次修改密碼時間隔的天數 |
第4欄位:0 |
密碼的最短有效天數,預設值為0 ,表示不進行限制。 |
第5欄位:99999 |
密碼的最長有效天數 |
第6欄位:7 |
提前多少天警告用戶密碼將過期,預設值為7 。 |
第7欄位 | 在密碼過期之後多少天內禁用此用戶。 |
第8欄位 | 賬號失效時間,預設值為空,表示賬號永久可用。 |
第9欄位 | 保留欄位,目前沒有特定用途。 |
添加、修改、刪除用戶賬號
useradd
命令——添加用戶賬號
命令格式
useradd [選項]… 用戶名...
常用選項
選項 | 含義 |
---|---|
-u |
指定用戶UID號。 |
-d |
指定用戶宿主目錄位置。 |
-e |
指定用戶的賬戶失效時間,可使用 YYYY-MM-DD 的日期格式。 |
-g |
指定用戶的基本組 |
-G |
指定用戶的附加組 |
-M |
不建立宿主目錄 |
-s |
指定用戶的登錄shell 。/bin/bash 可以登錄系統 ,/sbin/nologin 不可登錄系統 |
[root@localhost ~]# useradd -u 1008 -s /sbin/nologin siti
[root@localhost ~]# tail -3 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
sun:x:1000:1000:sun:/home/sun:/bin/bash
siti:x:1008:1008::/home/siti:/sbin/nologin
//創建siti用戶,指定UID號1008,指定用戶無法登錄系統
passwd
命令——為用戶賬號設置密碼
命令格式
passwd [選項]… 用戶名...
常用選項
選項 | 含義 |
---|---|
-d |
清空指定用戶的密碼 |
-l |
鎖定用戶賬戶 |
-S |
查看用戶賬戶狀態 |
-u |
解鎖用戶賬戶 |
[root@localhost ~]# passwd siti //設置siti賬戶密碼
更改用戶 siti 的密碼 。
新的 密碼:
無效的密碼: 密碼少於 8 個字元
重新輸入新的 密碼:
passwd:所有的身份驗證令牌已經成功更新。
[root@localhost ~]# passwd -l siti //鎖定siti賬戶
鎖定用戶 siti 的密碼 。
passwd: 操作成功
[root@localhost ~]# passwd -S siti //查看賬戶siti狀態
siti LK 2019-08-21 0 99999 7 -1 (密碼已被鎖定。)
[root@localhost ~]# passwd -u siti //解鎖siti賬戶
解鎖用戶 siti 的密碼。
passwd: 操作成功
[root@localhost ~]# passwd -S siti //查看賬戶siti狀態
siti PS 2019-08-21 0 99999 7 -1 (密碼已設置,使用 SHA512 演算法。)
usermod
命令——修改用戶賬號屬性
命令格式
usermod [選項]… 用戶名...
常用選項
選項 | 含義 |
---|---|
-u |
修改用戶UID 號 |
-d |
修改用戶的宿主目錄位置 |
-e |
修改用戶的賬戶失效時間,可使用YYYY-MM-DD 的日期格式 |
-s |
指定用戶的登錄shell |
-l |
更改用戶賬號的登錄名稱 |
-L |
鎖定用戶賬戶 |
-U |
解鎖用戶賬戶 |
[root@localhost ~]# usermod -l st11 siti //更改siti賬戶名為st11
[root@localhost ~]# tail -2 /etc/passwd //查看passwd文件後兩行信息
sun:x:1000:1000:sun:/home/sun:/bin/bash
st11:x:1008:1008::/home/siti:/sbin/nologin //賬戶名已更改
[root@localhost ~]# usermod -L st11 //鎖定st11用戶
[root@localhost ~]# passwd -S st11 //查看st11用戶狀態
st11 LK 2019-08-21 0 99999 7 -1 (密碼已被鎖定。)
[root@localhost ~]# usermod -U st11 //解鎖st11用戶
[root@localhost ~]# passwd -S st11 //查看st11用戶狀態
st11 PS 2019-08-21 0 99999 7 -1 (密碼已設置,使用 SHA512 演算法。)
[root@localhost ~]# usermod -s /bin/bash st11 //設置st11可以登錄系統
[root@localhost ~]# tail -2 /etc/passwd //查看passwd文件後兩行信息
sun:x:1000:1000:sun:/home/sun:/bin/bash
st11:x:1008:1008::/home/siti:/bin/bash //shell登錄已更改
userdel
命令——刪除用戶賬號
命令格式
userdel [選項]… 用戶名...
常用選項
選項 | 含義 |
---|---|
-r |
遞歸刪除(同時刪除宿主目錄) |
[root@localhost ~]# userdel -r st11 //刪除st11用戶,同時刪除宿主目錄
[root@localhost ~]# tail -2 /etc/passwd //查看passwd文件後兩行信息
tcpdump:x:72:72::/:/sbin/nologin
sun:x:1000:1000:sun:/home/sun:/bin/bash //st11用戶已刪除
組賬號管理
組賬號文件
/etc/group
:用於保存組賬號名稱、GID
號、組成員等基本信息。/etc/gshadow
: 用於保存組賬號的加密密碼字串等信息(但是很少使用到)。某一個組賬號包含哪些用戶成員,將會在
group
文件內最後一個欄位中體現出來(基本組對應的用戶賬號預設可能不會列出),多個組成員之間使用“,”
(逗號)分隔。
添加、管理、刪除組賬號
groupadd
命令——添加組賬號
命令格式
groupadd 要添加的組名稱
[root@localhost ~]# groupadd caiwu //創建caiwu組
[root@localhost ~]# tail -3 /etc/group //查看group文件後兩行信息
sun:x:1000:
siti:x:1008:
caiwu:x:1009: //創建的caiwu組
gpasswd
命令——添加、設置、刪除組成員
命令格式
gpasswd [選項] [用戶名] [組名稱]
常用選項
選項 | 含義 |
---|---|
-a |
向組內添加一個用戶 |
-d |
從組內刪除一個用戶成員 |
-M |
定義組成員列表,以逗號分隔(註意:當組內有已經有成員時,用此選項將覆蓋原組內成員) |
[root@localhost ~]# gpasswd -a st11 caiwu //將st11加入caiwu組
正在將用戶“st11”加入到“caiwu”組中
[root@localhost ~]# tail -5 /etc/group //查看group文件後5行信息
sun:x:1000:
caiwu:x:1009:st11 //st11成功加入caiwu組
siti:x:1001:
si22:x:1002:
st11:x:1003:
[root@localhost ~]# gpasswd -d st11 caiwu //將st11從caiwu組中刪除
正在將用戶“st11”從“caiwu”組中刪除
[root@localhost ~]# tail -5 /etc/group //查看group文件後5行信息
sun:x:1000:
caiwu:x:1009: //st11從caiwu組中刪除
siti:x:1001:
si22:x:1002:
st11:x:1003:
[root@localhost ~]# gpasswd -M st11,si22,siti caiwu //將st11,si22,siti添加進caiwu組
[root@localhost ~]# tail -5 /etc/group //查看group文件後5行信息
sun:x:1000:
caiwu:x:1009:st11,si22,siti //st11,si22,siti成功加入caiwu組
siti:x:1001:
si22:x:1002:
st11:x:1003:
groupdel
命令——刪除組賬號
命令格式
groupdel 組名稱
[root@localhost ~]# groupdel caiwu //刪除caiwu組
[root@localhost ~]# tail -5 /etc/group //查看group文件後5行信息
tcpdump:x:72:
sun:x:1000:
siti:x:1001:
si22:x:1002:
st11:x:1003: //caiwu組已刪除
查詢賬戶信息
groups
命令——查詢用戶賬號所屬的組
命令格式
groups 用戶名稱(當不填寫用戶名稱時預設當前用戶)
[root@localhost ~]# groups //預設查看當前賬戶所屬組
root
[root@localhost ~]# groups sun //查看sun賬戶所屬組
sun : sun wheel
id
——查詢用戶賬號的身份標識
命令格式
id 用戶名稱(當不填寫用戶名稱時預設當前用戶)
[root@localhost ~]# id //預設查看當前用戶身份標識
uid=0(root) gid=0(root) 組=0(root) 環境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost ~]# id sun //查看sun用戶身份標識
uid=1000(sun) gid=1000(sun) 組=1000(sun),10(wheel)
finger
命令——查詢用戶賬號的登錄屬性
命令格式
finger 用戶名稱(當不填寫用戶名稱時預設當前用戶)
[root@localhost ~]# finger //預設查看當前賬戶登錄屬性
Login Name Tty Idle Login Time Office Office Phone Host
root root pts/0 Aug 21 21:58 (192.168.144.1)
[root@localhost ~]# finger sun //查看sun賬戶登錄屬性
Login: sun Name: sun
Directory: /home/sun Shell: /bin/bash
Last login 五 8月 9 12:19 (CST) on :1
No mail.
No Plan.
w、who、users
命令——查詢當前主機的用戶登錄情況
命令格式
w 用戶名稱(當不填寫用戶名稱時預設當前用戶)
[root@localhost ~]# w //預設查看當前賬戶登錄情況
00:11:19 up 2:13, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.144.1 21:58 7.00s 0.36s 0.02s w
[root@localhost ~]# who //預設查看當前賬戶登錄情況
root pts/0 2019-08-21 21:58 (192.168.144.1)
[root@localhost ~]# users //預設查看當前賬戶登錄情況
root
[root@localhost ~]# w sun //查看sun賬戶登錄情況
00:11:52 up 2:14, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
文件/目錄的許可權和歸屬
訪問許可權
- 讀取
r
:允許查看文件內容、顯示目錄列表 - 寫入
w
:允許修改文件內容,允許在目錄中新建、移動、刪除文件或子目錄 - 可執行
x
:允許運行程式、切換目錄
歸屬
- 屬主:擁有該文件或目錄的用戶帳號
- 屬組:擁有該文件或目錄的組帳號
查看文件/目錄的許可權和歸屬
- 使用帶
“-l”
選項的ls
命令時,將以長格式顯示文件或目錄的詳細信息,其中包括該文件的許可權和歸屬等參數。
[root@localhost ~]# ls -l /etc/passwd //以長格式查看passwd文件
-rw-r--r--. 1 root root 2218 8月 21 23:27 /etc/passwd //顯示文件信息
- 在上述輸出信息中,第
3
、4
欄位的數據分別表示該文件(或目錄)的屬主、屬組,上例中/etc/passwd
文件屬於root
用戶、root
組;而第 1 欄位的數據表示該文件(或目錄)的訪問許可權,如-rw-r--r--
。許可權欄位由四部分組成,各自的含義如下:
欄位 | 含義 |
---|---|
第1字元 | 表示該文件的類型,d 目錄、c 字元設備文件、 - 普通文件、字母l 鏈接文件等。 |
第2~4個字元 | 表示該文件的屬主用戶對該文件的訪問許可權。 |
第5~7個字元 | 表示該文件的屬組內各成員用戶對該文件的訪問許可權。 |
第8~10個字元 | 表示其他任何用戶對該文件的訪問許可權。 |
第11個字元 | 這裡的. 與 SELinux 有關,目前不必關註。 |
許可權的數字標識形式
chmod
命令——設置文件或目錄的許可權
命令格式
chmod [ugoa] [+-=] [rwx] 文件或目錄...
或
chmod nnn 文件或目錄...
[ugoa…][+-=][rwx]
的形式中,三個組成部分的含義及用法如下:ugoa
表示該許可權設置所針對的用戶類別。u
代表文件屬主,g
代表文件屬組內的用戶,o
代表其他任何用戶,a
代表所有用戶(u
、g
、o
的總和)。+-=
表示設置許可權的操作動作。+
代表增加相應許可權,-
代表減少相應許可權,=
代表僅設置對應的許可權。rwx
是許可權的字元組合形式,也可以拆分使用,如r
、rx
等nnn
為需要設置的具體許可權值,如755
、644
等
[root@localhost opt]# ls -l siti.txt //以長格式查看siti.txt文件信息
-rw-r--r--. 1 root root 0 8月 22 01:19 siti.txt
[root@localhost opt]# chmod guo+x siti.txt //設置文件所有用戶可執行許可權
[root@localhost opt]# ls -l siti.txt //以長格式查看siti.txt文件信息
-rwxr-xr-x. 1 root root 0 8月 22 01:19 siti.txt //文件成功添加多有用戶可只執行許可權
[root@localhost opt]# chmod 666 siti.txt //設置文件所有用戶可讀、可寫許可權
[root@localhost opt]# ls -l siti.txt //以長格式查看siti.txt文件信息
-rw-rw-rw-. 1 root root 0 8月 22 01:19 siti.txt //文件成功設置許可權
umask
應用
umask
就是預設指定目前用戶在新建文件或目錄是的許可權預設值。執行umask 022
即可以設置當前用戶的預設許可權。直接執行umask
命令就是查看當前系統的預設許可權。需要註意的是,umask
的分數指的是“該預設值需要減掉的許可權”,如果執行umask 022
代表group
和other
被拿掉了許可權2
,也就是被拿掉了“寫”許可權。如果執行命令umask 000
,代表文件的預設許可權是777
[root@localhost opt]# umask 000
[root@localhost opt]# mkdir sisi
[root@localhost opt]# ls -ld sisi
drwxrwxrwx. 2 root root 6 8月 22 01:42 sisi
[root@localhost opt]# umask 022
[root@localhost opt]# mkdir sisi2
[root@localhost opt]# ls -ld sisi2
drwxr-xr-x. 2 root root 6 8月 22 01:44 sisi2
chown
命令——設置目錄和文件的歸屬
命令格式
chown 屬主[:[屬組]] 文件或目錄...
常用選項
選項 | 含義 |
---|---|
-R |
遞歸刪除(同時刪除宿主目錄) |
[root@localhost opt]# chown -R sun sisi2 //更改sisi2目錄屬主為sun
[root@localhost opt]# ls -ld sisi2 //以長格式友好查看sisi2目錄信息
drwxr-xr-x. 2 sun root 6 8月 22 01:44 sisi2 //sisi2目錄屬主成功更改
[root@localhost opt]# chown -R :sun sisi2 //更改sisi2目錄屬組為sun
[root@localhost opt]# ls -ld sisi2 //以長格式友好查看sisi2目錄信息
drwxr-xr-x. 2 sun sun 6 8月 22 01:44 sisi2 //sisi2目錄屬組成功更改
[root@localhost opt]# chown -R root:root sisi2 //更改sisi2目錄屬主、屬組為root
[root@localhost opt]# ls -ld sisi2 //以長格式友好查看sisi2目錄信息
drwxr-xr-x. 2 root root 6 8月 22 01:44 sisi2 //成功更改sisi2目錄屬主、屬組信息
補充內容
用戶賬號的初始配置文件
添加新的用戶賬號後
useradd
命令會在用戶的宿主目錄中建立一些初始配置文件。這些文件來自於賬號模板目錄/etc/skel/
,基本上都是隱藏文件,較常用的初始配置文件包括.bash_logout
、.bash_profile
、.bashrc
。其中.bash_profile
”文件中的命令將在該用戶每次登錄時被執行;;.bashrc
文件中的命令會在每次載入/bin/Bash
程式(當然也包括登錄系統)時執行;而.bash_logout
文件中的命令將在用戶每次退出登錄時執行。理解這些文件的作用,可以方便我們安排一些自動運行的後臺管理任務。在
.bashrc
等文件中,可以添加用戶自己設置的可執行語句(如Linux
命令行、腳本控制語句等),以便自動完成相應的任務。如果希望為所有用戶添加登錄後自動運行的命令程式、自動設置變數等,可以直接修改/etc
目錄下的類似文件,如/etc/bashrc
文件、/etc/profile
文件。