必須掌握的Linux使用者組知識
在 系統中使用者組起著重要作用。使用者組提供了一種簡單方法供一組使用者互相共享檔案。使用者組也允許系統管理員更加有效地管理使用者許可權,因為管理員可以將許可權分配給使用者組而不是逐一分配給單個使用者。 |
儘管通常只要在系統中新增使用者賬戶就會建立使用者組,關於使用者組如何工作以及如何運用使用者組還有很多需要了解的。
Linux 系統中多數使用者賬戶被設為使用者名稱與使用者組名相同。使用者 jdoe 會被賦予一個名為 jdoe 的使用者組,且成為該新建使用者組的唯一成員。如本例所示,該使用者的登入名,使用者 id 和使用者組 id 在新建賬戶時會被新增到 /etc/passwd 和 /etc/group 檔案中:
$ sudo useradd jdoe $ grep jdoe /etc/passwd jdoe:x:1066:1066:Jane Doe:/home/jdoe:/bin/sh $ grep jdoe /etc/group jdoe:x:1066:
這些檔案中的配置使系統得以在文字( jdoe )和數字( 1066 )這兩種使用者 id 形式之間互相轉換—— jdoe 就是 1006 ,且 1006 就是 jdoe 。
分配給每個使用者的 UID(使用者 id)和 GID(使用者組 id)通常是一樣的,並且順序遞增。若上例中 Jane Doe 是最近新增的使用者,分配給下一個新使用者的使用者 id 和使用者組 id 很可能都是 1067。
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 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 ^ | +-------- 主要使用者組
使用者一旦擁有賬戶之後被加入的那些使用者組是次要使用者組。次要使用者組成員關係在 /etc/group 檔案中顯示。
$ grep devops /etc/group devops:x:500:shs,jadep ^ | +-------- shs 和 jadep 的次要使用者組
/etc/group 檔案給使用者組分配組名稱(例如 500 = devops )並記錄次要使用者組成員。
每個使用者是他自己的主要使用者組成員,並可以成為任意多個次要使用者組成員,這樣的一種準則允許使用者更加容易地將個人檔案和需要與同事分享的檔案分開。當使用者建立一個檔案時,使用者所屬的不同使用者組的成員不一定有訪問許可權。使用者必須用 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 CREATE_HOME yes
另一種方法是用自己的賬戶設定別名從而讓 useradd 一直帶有 -m 選項。
$ alias useradd=’useradd -m’
確保將該別名新增到你的 ~/.bashrc 檔案或類似的啟動檔案中以使其永久生效。
下面這個命令可列出 /etc/login.defs 檔案中的全部設定。下面的 grep 命令會隱藏所有註釋和空行。
$ cat /etc/login.defs | grep -v "^#" | grep -v "^$" 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
注意此檔案中的各種設定會決定使用者 id 的取值範圍以及密碼使用期限和其他設定(如 umask)。
出於各種原因使用者可能是多個使用者組的成員。使用者組成員身份給與使用者對使用者組擁有的檔案和目錄的訪問許可權,有時候這種工作方式是至關重要的。要生成某個使用者所屬使用者組的清單,用 groups 命令即可。
$ groups jdoe jdoe : jdoe adm admin cdrom sudo dip plugdev lpadmin staff sambashare
你可以鍵入不帶任何引數的 groups 命令來列出你自己的使用者組。
如果你想新增一個已有使用者至別的使用者組,你可以仿照下面的命令操作:
$ sudo usermod -a -G devops jdoe
你也可以指定逗號分隔的使用者組列表來新增一個使用者至多個使用者組:
$ sudo usermod -a -G devops,mgrs jdoe
引數 -a 意思是“新增”, -G 指定使用者組列表。
你可以編輯 /etc/group 檔案將使用者名稱從使用者組成員名單中刪除,從而將使用者從使用者組中移除。 usermod 命令或許也有個選項用於從使用者組中刪除某個成員。
fish:x:16:nemo,dory,shark | V fish:x:16:nemo,dory
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524109/viewspace-2653558/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 必須掌握的Linux使用者組Linux
- 前端必須掌握的知識點前端
- Linux新手入門必須要掌握的10個知識點!Linux
- JavaScript必須要掌握的知識-作用域JavaScript
- Android 之 Notification 必須掌握知識點Android
- 外貿小白必須掌握的基礎知識
- JavaScript大師必須掌握的12個知識點JavaScript
- JVM-Java工程師必須掌握的知識點JVMJava工程師
- JavaScript必須要掌握的知識-作用域編寫提升JavaScript
- 關於資料庫索引,必須掌握的知識點資料庫索引
- 必須掌握的10個Linux命令!Linux
- 學習Linux必須掌握的命令!Linux
- 必須懂的mysql知識MySql
- 軟體測試必須掌握的 http 網路協議知識HTTP協議
- 軟體測試必須掌握的http網路協議知識HTTP協議
- Linux系統中必須掌握的特殊字元!Linux字元
- Linux必須掌握的shell指令碼基礎Linux指令碼
- JAVA程式設計師“黃金5年”必須要掌握的知識技能Java程式設計師
- 關於索引必須知道的知識索引
- 學習Linux必須掌握的命令!經驗分享Linux
- Python爬蟲需要學哪些東西?這些知識點必須掌握!Python爬蟲
- 掌握 Linux 使用者組Linux
- 演算法的盡頭是小學奧數?小學奧數必須掌握的30個知識模組演算法
- 學習 Laravel 必須理解的知識點Laravel
- 有關WebSocket必須瞭解的知識Web
- 你必須知道的Java基礎知識Java
- 前端學習,除了掌握學習路線之外,必須要注意的知識要點!前端
- Git中~你必須掌握的!Git
- Golang 中的 Defer 必掌握的 7 知識點Golang
- 【Linux常用命令①】程式設計師必須掌握的Linux命令Linux程式設計師
- 爬蟲必須得會的預備知識爬蟲
- 關於Flutter 您必須知道的知識點!!!Flutter
- 大學期間必須知道的JVM知識JVM
- 必須要掌握的重要目錄
- CSS中那些必須掌握的概念CSS
- Nacos必知必會:這些知識點你一定要掌握!
- 前端進階必須懂得TCP/IP知識前端TCP
- java程式設計師進階架構師你必須掌握的架構知識體系Java程式設計師架構