在 linux 系統中使用者組起著重要作用。使用者組提供了一種簡單方法供一組使用者互相共享檔案。使用者組也允許系統管理員更加有效地管理使用者許可權,因為管理員可以將許可權分配給使用者組而不是逐一分配給單個使用者。
儘管通常只要在系統中新增使用者賬戶就會建立使用者組,關於使用者組如何工作以及如何運用使用者組還有很多需要了解的。
乙個使用者乙個使用者組?
linux 系統中多數使用者賬戶被設為使用者名稱與使用者組名相同。使用者 jdoe 會被賦予乙個名為jdoe 的使用者組,且成為該新建使用者組的唯一成員。如本例所示,該使用者的登入名,使用者 id 和使用者組id 在新建賬戶時會被新增到 /etc/passwd 和 /etc/group 檔案中:
$ sudo useradd jdoe這些檔案中的配置使系統得以在文字(jdoe)和數字(1066)這兩種使用者id 形式之間互相轉換—— jdoe 就是 1006,且 1006 就是jdoe 。$ grep jdoe /etc/passwd
jdoe:x:1066:1066:jane doe:/home/jdoe:/bin/sh
$ grep jdoe /etc/group
jdoe:x:1066:
分配給每個使用者的 uid(使用者 id)和 gid(使用者組 id)通常是一樣的,並且順序遞增。若上例中 jane doe 是最近新增的使用者,分配給下乙個新使用者的使用者 id 和使用者組 id 很可能都是 1067。
gid = uid?
uid 和 gid 可能不一致。例如,如果你用 groupadd 命令新增乙個使用者組而不指定使用者組 id,系統會分配下乙個可用的使用者組 id(在本例中為 1067)。下乙個新增到系統中的使用者其 uid 會是 1067 而 gid 則為 1068。
你可以避免這個問題,方法是新增使用者組的時候指定乙個較小的使用者組 id 而不是接受預設值。在下面的命令中我們新增乙個使用者組並提供乙個 gid,這個 gid 小於用於使用者賬戶的 gid 取值範圍。
$ sudo groupadd -g 500 devops建立賬戶時你可以指定乙個共享使用者組,如果這樣對你更合適的話。例如你可能想把新來的開發人員加入同乙個 devops 使用者組而不是一人乙個使用者組。
$ sudo useradd -g staff bennyg主要使用者組和次要使用者組$ grep bennyg /etc/passwd
bennyg:x:1064:50::/home/bennyg:/bin/sh
使用者組實際上有兩種:主要使用者組primary group和次要使用者組secondary group。
主要使用者組是儲存在 /etc/passwd 檔案中的使用者組,該使用者組在賬戶建立時配置。當使用者建立乙個檔案時,使用者的主要使用者組與此檔案關聯。
$ whoami使用者一旦擁有賬戶之後被加入的那些使用者組是次要使用者組。次要使用者組成員關係在 /etc/group 檔案中顯示。jdoe
$ grep jdoe /etc/passwd
jdoe:x:1066:1066:john doe:/home/jdoe:/bin/bash^|
+-------- 主要使用者組
$ touch newfile
$ ls -l newfile
-rw-rw-r-- 1 jdoe jdoe 0 jul 16 15:22 newfile^|
+-------- 主要使用者組
$ grep devops /etc/group/etc/group 檔案給使用者組分配組名稱(例如 500 = devops)並記錄次要使用者組成員。devops:x:500:shs,jadep^|
+-------- shs 和 jadep 的次要使用者組
首選的準則
每個使用者是他自己的主要使用者組成員,並可以成為任意多個次要使用者組成員,這樣的一種準則允許使用者更加容易地將個人檔案和需要與同事分享的檔案分開。當使用者建立乙個檔案時,使用者所屬的不同使用者組的成員不一定有訪問許可權。使用者必須用 chgrp 命令將檔案和次要使用者組關聯起來。
**也不如自己的家目錄
新增新賬戶時乙個重要的細節是 useradd 命令並不一定為新使用者新增乙個家目錄/home家目錄。若你只有某些時候想為使用者新增家目錄,你可以在 useradd 命令中加入 -m 選項(可以把它想象成「安家」選項)。
$ sudo useradd -m -g devops -c "john doe" jdoe2此命令中的選項如下:
-m 建立家目錄並在其中生成初始檔案
-g 指定使用者歸屬的使用者組
-c 新增賬戶描述資訊(通常是使用者的姓名)
若你希望總是建立家目錄,你可以編輯 /etc/login.defs 檔案來更改預設工作方式。更改或新增 create_home 變數並將其設定為 yes:
$ grep create_home /etc/login.defs另一種方法是用自己的賬戶設定別名從而讓 useradd 一直帶有 -m 選項。create_home yes
$ alias useradd=』useradd -m』確保將該別名新增到你的~/.bashrc 檔案或類似的啟動檔案中以使其永久生效。
深入了解 /etc/login.defs
下面這個命令可列出 /etc/login.defs 檔案中的全部設定。下面的grep 命令會隱藏所有注釋和空行。
$ cat /etc/login.defs | grep -v "^#" | grep -v "^$"注意此檔案中的各種設定會決定使用者 id 的取值範圍以及密碼使用期限和其他設定(如 umask)。mail_dir /var/mail
faillog_enab yes
log_unkfail_enab no
log_ok_logins no
syslog_su_enab yes
syslog_sg_enab yes
ftmp_file /var/log/btmp
su_name su
hushlogin_file .hushlogin
env_supath path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
env_path path=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
ttygroup tty
ttyperm 0600
erasechar 0177
killchar 025
umask 022
pass_max_days 99999
pass_min_days 0
pass_warn_age 7
uid_min 1000
uid_max 60000
gid_min 1000
gid_max 60000
login_retries 5
login_timeout 60
chfn_restrict rwh
default_home yes
create_home yes < ===
usergroups_enab yes
encrypt_method sha512
如何顯示使用者所屬的使用者組
出於各種原因使用者可能是多個使用者組的成員。使用者組成員身份給與使用者對使用者組擁有的檔案和目錄的訪問許可權,有時候這種工作方式是至關重要的。要生成某個使用者所屬使用者組的清單,用groups 命令即可。
$ groups jdoe你可以鍵入不帶任何引數的 groups 命令來列出你自己的使用者組。jdoe : jdoe adm admin cdrom sudo dip plugdev lpadmin staff sambashare
如何新增使用者至使用者組
如果你想新增乙個已有使用者至別的使用者組,你可以仿照下面的命令操作:
$ sudo usermod -a -g devops jdoe你也可以指定逗號分隔的使用者組列表來新增乙個使用者至多個使用者組:
$ sudo usermod -a -g devops,mgrs jdoe引數 -a 意思是「新增」,-g 指定使用者組列表。
fish:x:16:nemo,dory,shark|vfish:x:16:nemo,dory
必須掌握的Linux使用者組
在 linux 系統中使用者組起著重要作用。使用者組提供了一種簡單方法供一組使用者互相共享檔案。使用者組也允許系統管理員更加有效地管理使用者許可權,因為管理員可以將許可權分配給使用者組而不是逐一分配給單個使用者。儘管通常只要在系統中新增使用者賬戶就會建立使用者組,關於使用者組如何工作以及如何運用使用...
Linux 使用者 使用者組
一 配置檔案說明 group x 0 組名稱 組密碼佔位符 組編號 組中使用者名稱列表 group 組名稱 組密碼 組管理者 組中使用者名稱列表 user x 0 0 home user bin bash 使用者名稱 密碼佔位符 使用者編號 使用者組編號 使用者注釋資訊 使用者主目錄 shell型別...
Linux使用者 組
1 查詢使用者 組 查詢當前使用者名稱 whoami 查詢關鍵字所對應的使用者id uid 組id gid 及所在組 id key 查詢當前使用者所屬的組 groups 查詢系統所有的組 cat etc group 或 groupmod tab鍵 x 3切換使用者 su root or other ...