如何掌握Linux用户组

发布时间:2025-08-01 点击:8
在 linux 系统中管理用户组并不费力,但相关命令可能比你所知的更为灵活。
在 linux 系统中用户组起着重要作用。用户组提供了一种简单方法供一组用户互相共享文件。用户组也允许系统管理员更加有效地管理用户权限,因为管理员可以将权限分配给用户组而不是逐一分配给单个用户。
尽管通常只要在系统中添加用户账户就会创建用户组,关于用户组如何工作以及如何运用用户组还有很多需要了解的。
一个用户一个用户组?linux 系统中多数用户账户被设为用户名与用户组名相同。用户?jdoe?会被赋予一个名为?jdoe?的用户组,且成为该新建用户组的唯一成员。如本例所示,该用户的登录名,用户 id 和用户组 id 在新建账户时会被添加到?/etc/passwd?和?/etc/group?文件中:
$ sudo useradd jdoe$ grep jdoe /etc/passwdjdoe:x:1066:1066:jane doe:/home/jdoe:/bin/sh$ grep jdoe /etc/groupjdoe:x:1066:这些文件中的配置使系统得以在文本(jdoe)和数字(1066)这两种用户 id 形式之间互相转换——?jdoe?就是?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 小于用于用户账户的 gid 取值范围。
$ sudo groupadd -g 500 devops创建账户时你可以指定一个共享用户组,如果这样对你更合适的话。例如你可能想把新来的开发人员加入同一个 devops 用户组而不是一人一个用户组。
$ sudo useradd -g staff bennyg$ grep bennyg /etc/passwdbennyg:x:1064:50::/home/bennyg:/bin/sh主要用户组和次要用户组用户组实际上有两种:主要用户组primary group和次要用户组secondary group。
主要用户组是保存在?/etc/passwd?文件中的用户组,该用户组在账户创建时配置。当用户创建一个文件时,用户的主要用户组与此文件关联。
$ whoamijdoe$ grep jdoe /etc/passwdjdoe: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/groupdevops: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.defscreate_home yes另一种方法是用自己的账户设置别名从而让?useradd?一直带有?-m?选项。
$ alias useradd=’useradd -m’确保将该别名添加到你的?~/.bashrc?文件或类似的启动文件中以使其永久生效。
深入了解 /etc/login.defs下面这个命令可列出?/etc/login.defs?文件中的全部设置。下面的?grep?命令会隐藏所有注释和空行。
$ cat /etc/login.defs | grep -v ^# | grep -v ^$mail_dir /var/mailfaillog_enab yeslog_unkfail_enab nolog_ok_logins nosyslog_su_enab yessyslog_sg_enab yesftmp_file /var/log/btmpsu_name suhushlogin_file .hushloginenv_supath path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binenv_path path=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/gamesttygroup ttyttyperm 0600erasechar 0177killchar 025umask 022pass_max_days 99999pass_min_days 0pass_warn_age 7uid_min 1000uid_max 60000gid_min 1000gid_max 60000login_retries 5login_timeout 60chfn_restrict rwhdefault_home yescreate_home yes <===如何显示用户所属的用户组出于各种原因用户可能是多个用户组的成员。用户组成员身份给与用户对用户组拥有的文件和目录的访问权限,有时候这种工作方式是至关重要的。要生成某个用户所属用户组的清单,用?groups?命令即可。
$ groups jdoejdoe : 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 | vfish:x:16:nemo,dory提要添加和管理用户组并非特别困难,但长远来看配置账户时的一致性可使这项工作更容易些。


网站优化中死链的影响和解决死链方法
网站交换友情链接时需要注意哪些问题?
网络推广的方法
网站设计时主要有哪几大类设计错误呢?
网站建设中影响网站权重的因素及降权处理方法
网站制作设计怎样才够个性化
郑州做网站seo优化需要会那些技能?
优化流量必须要在线吗