1.软文推荐

2.软文推荐

3.软文推荐

在 Linux 中,组是用户的集合。这些组的主要目的是为给定资源定义一组权限,如读取,写入或执行权限,这些权限可以在组内的用户之间共享。还可以将用户添加到现有的用户组以利用其授予的权限,下面为大家详细解一下Linux用户组。

img

尽管通常只要在系统中添加用户账户就会创建用户组,关于用户组如何工作以及如何运用用户组还有很多需要了解的。

一个用户一个用户组?

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。

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
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

下面这个命令可列出 /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                 

注意此文件中的各种设置会决定用户 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

本文来源:www.lxlinux.net/4017.html,若引用不当,请联系修改。

相关文章 8

1

腾讯云四大国际云计算数据中心开服:曼谷、法兰克福及东京、香港上新服(腾讯云四大 2分钟前

6月3日上午消息,腾讯云宣布在泰国曼谷、德国法兰克福、日本东京以及中国香港新增的四个国际数据中心同步开服,正式对外提供云计算技...

2

简单讲解一下Nodejs源码 4分钟前

我们看到创建一个udp服务器很简单,首先申请一个socket对象,在nodejs中和操作系统中一样,socket是对网络通信的一个抽象,我们可以把他理...

3

腾讯云服务器购买指南:如何购买腾讯云服务器教程(腾讯云服务器购买后怎么使用) 4分钟前

腾讯云服务器如何购买? 国内云服务器上知名的就那么几家,腾讯云是国内排名前列的云服务器服务商。而且,腾讯云是国内互联网龙头企...

4

云服务器可以做什么?云服务器可以做哪些事情?(云服务器可以做什么) 6分钟前

云服务器可以用来干什么?可以用来做什么? 最近,有很多学生朋友问云服务器可以用来干什么?不仅仅学生,有很多人都有这方面的困惑...

5

细说awk复合表达式使用方法 6分钟前

复合表达式就是将多个简单的表达式使用特定的符号连接成一个一个整体,本篇文章重点为大家讲解一下awk复合表达式具体使用方法。 img...

6

Linux inxi 命令的 3 种使用方法 7分钟前

当我在查询有关笔记本电脑电池健康状况的信息时,我偶然发现了 inxi。它是一个命令行系统信息工具,可提供有关你的 Linux 计算机(无论...

7

Linux系统如何获取进程PID 9分钟前

在Linux系统如何获取进程的PID?本篇教程主要和大家分享一下Linux系统获取进程PI的具体方法,有需要的朋友可以参考一下。 方法一 # ps -ef...

8

如何在debian11 Bullseye上安装Nginx Web服务器?(如何在debian里面运行安卓应用) 12分钟前

如何在Debian 11上安装Nginx? Nginx是一款轻量级的 HTTP 服务器,时常用于服务端的反向代理和负载均衡。Nginx是一个免费的开源网络服务器,提...