Linux 系统中的用户组管理与 Linux 系统中的用户组管理深入理解/etc/login.defs
在Linux系统中管理用户组很容易,但相关命令可以比你想象的更加灵活。
-- Sandra Henry-stocker(作者)
用户组在 Linux 系统中发挥着重要作用。用户组为一组用户提供了一种相互共享文件的简单方法。用户组还允许系统管理员更有效地管理用户权限,因为管理员可以将权限分配给用户组,而不是一一分配给单个用户。
虽然每次将用户帐户添加到系统时通常都会创建用户组,但有关用户组的工作原理和使用方式还有很多需要了解。
一个用户和一个用户组?
Linux系统中的大多数用户帐户都设置为具有相同的用户名和用户组名称。用户 jdoe 将被分配到名为 jdoe 的用户组,并将成为新创建的用户组的唯一成员。如本示例所示,用户的登录名、用户 ID 和用户组 ID 将添加到文件 /etc/passwd 和 /etc/group:当新帐户创建时,创建 这些文件中的配置允许系统在两种形式的用户 ID 之间进行转换:文本 (jdoe) 和数字 (1066) - 1006 和 1006是jdoe。分配给每个用户的
UID(用户ID)和GID(用户组ID)通常是相同的并且按顺序递增。如果 Jane Doe 是上例中最近添加的用户,则分配给下一个新用户的用户 ID 和用户组 ID 很可能都是 1067。
GID = UID?
UID 和 GID 可能不一致。例如,如果您使用命令 groupadd 添加组而不指定组 ID,系统将分配下一个可用的组 ID(本例中为 1067)。添加到系统的下一个用户的 UID 为 1067,GID 为 1068。
您可以通过在添加组时指定较小的组 ID 而不是接受默认值来避免此问题。在以下命令中,我们添加一个用户组并提供一个小于用户帐户使用的 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主要用户组和次要用户组
用户组实际上有两种类型:主要组(主要组)和❙次要组次要组。
主用户组是/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 将文件与辅助用户组关联。没有什么地方比您自己的家庭图书馆“主页目录”更好了。如果有时只想为用户添加主目录,可以将 -m 选项添加到 useradd 命令(将其视为“home”选项)。
$ 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 另一种方法是创建一个所谓的别名,即 d❝d❝ 始终带有 - m 选项。
$ alias useradd=’useradd -m’ 请务必将此别名添加到您的 ~/.bashrc 或类似的启动文件中以使其永久化。
了解有关 /etc/login.defs 的更多信息
以下命令显示文件 /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 的值范围以及密码过期和其他设置(例如取消屏蔽)。
如何显示用户所属的用户组
一个用户可能由于各种原因成为多个用户组的成员。组成员身份使用户可以访问该组拥有的文件和文件夹,有时这种工作方式至关重要。要生成用户所属的用户组列表,请使用 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反馈
添加和管理用户组并不是特别困难,但从长远来看,配置帐户的一致性可以使工作变得更容易。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网