Linux - 管理用户和组

管理用户和组

  • 管理用户和组
    • 简介
    • 用户私有组
    • 影子密码
    • 命令行工具
      • 添加新用户
      • 添加新组
      • 将现有用户添加到现有组
      • 创建组目录
      • 使用umask设置新文件默认权限
      • 在Shell中管理umask
  • 总结

管理用户和组

用户和组的控制是Linux系统管理的核心要素。本文介绍如何在命令行中添加,管理和删除用户和组,并介绍高级主题,例如创建组目录。

简介

尽管用户既可以是人员(意味着与物理用户绑定的帐户),也可以是供特定应用程序使用的帐户,但组是组织的逻辑表达,将用户捆绑在一起,具有共同的目标。组中的用户共享相同的权限来读取写入执行该组拥有的文件。

每个用户都与一个称为用户ID(UID)的唯一数字标识号相关联。同样,每个组都与一个组ID(GID)相关联。创建文件的用户也是该文件的所有者和组所有者。为文件所有者其他所有人分配了单独的读取,写入和执行权限。只能由root用户更改文件所有者,并且root用户和文件所有者均可更改访问权限。

另外,Linux支持文件和目录的访问控制列表(ACL),允许设置所有者以外的特定用户的权限。

CentOS 7 为系统用户和组保留小于1000的用户和组ID。 默认情况下,用户管理器不显示系统用户。 保留的用户名和组ID记录在安装程序包中。 要查看文档,请使用以下命令:

[root@iZerb5rob3dcf6Z ~]# cat /usr/share/doc/setup-2.8.71/uidgid 

建议的做法是分配从5000开始的尚未保留的ID,因为将来保留的范围可能会增加。 默认情况下,要使ID分配给新用户,请从以下位置开始5000,更改/etc/login.defs文件中的UID_MINGID_MIN指令:

[root@iZerb5rob3dcf6Z ~]# cat /etc/login.defs 
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#

# *REQUIRED*
#   Directory where mailboxes reside, _or_ name of file, relative to the
#   home directory.  If you _do_ define both, MAIL_DIR takes precedence.
#   QMAIL_DIR is for Qmail
#
#QMAIL_DIR      Maildir
MAIL_DIR        /var/spool/mail
#MAIL_FILE      .mail

# Password aging controls:
#
#       PASS_MAX_DAYS   Maximum number of days a password may be used.
#       PASS_MIN_DAYS   Minimum number of days allowed between password changes.
#       PASS_MIN_LEN    Minimum acceptable password length.
#       PASS_WARN_AGE   Number of days warning given before a password expires.
#
PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000
UID_MAX                 60000
# System accounts
SYS_UID_MIN               201
SYS_UID_MAX               999

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000
GID_MAX                 60000
# System accounts
SYS_GID_MIN               201
SYS_GID_MAX               999

#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD    /usr/sbin/userdel_local

#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is overridden with the -m flag on
# useradd command line.
#
CREATE_HOME     yes

# The permission mask is initialized to this value. If not specified, 
# the permission mask will be initialized to 022.
UMASK           077

# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes

# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512

即使使用以5000开头的新用户和组ID,也建议不要将系统保留的ID增加到1000以上,以免与保留1000限制的系统发生冲突。

用户私有组

红帽Linux使用用户专用组(UPG)方案,这使UNIX组更易于管理。 每当将新用户添加到系统时,都会创建一个用户私有组。 它具有与用户相同的名称,并且该用户是用户私有组的唯一成员。

用户专用组可以安全地为新创建的文件或目录设置默认权限,从而允许该用户和该用户组都可以对该文件或目录进行修改。

确定将什么权限应用于新创建的文件或目录的设置称为umask,并在/ etc / bashrc文件中进行配置。 传统上,在基于UNIX的系统上,umask设置为022,仅允许创建文件或目录的用户进行修改。 在此方案下,所有其他用户(包括创建者组的成员)均不得进行任何修改。 但是,在UPG方案下,此“组保护”不是必需的,因为每个用户都有自己的私有组。

所有组的列表存储在/ etc / group配置文件中。

[root@localhost ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:

影子密码

在具有多个用户的环境中,使用shadow-utils软件包提供的影子密码来提高系统身份验证文件的安全性非常重要。 因此,安装程序默认情况下启用影子密码。以下列出了影子密码相对于在基于UNIX的系统上存储密码的传统方式的优势:

  • 影子密码通过将加密的哈希密码从全局可读的/ etc / passwd文件移动到/ etc / shadow(仅由root用户可以读取)来提高系统安全性。
  • 影子密码存储有关密码老化的信息。
  • 影子密码允许强制执行/etc/login.defs文件中设置的某些安全策略。
[root@localhost ~]# cat /etc/shadow
root:$6$DDI7ZiT9QSKpzpOI$PUJfTcBFisrcboDV2ABrEcCEjA7zD9Ya.DW07Ob4fEeCLnCXtaz8DCDzZzyLR/OQ.iVe2aj86Tszy3NazCx1t.::0:99999:7:::
bin:*:17834:0:99999:7:::

无论是否启用了影子密码,shadow-utils软件包提供的大多数实用程序都可以正常工作。 但是,由于密码时效信息仅存储在/ etc / shadow文件中,因此某些实用程序和命令在未启用影子密码的情况下无法工作:

  • chage实用程序,用于设置密码老化参数。
  • gpasswd实用程序,用于管理/ etc / group文件。
  • 带有-e,–expiredate或-f,–inactive选项的usermod命令。
  • 带有-e,–expiredate或-f,–inactive选项的useradd命令。

命令行工具

命令行实用程序,用于管理用户和组:
Linux - 管理用户和组_第1张图片
Linux - 管理用户和组_第2张图片

添加新用户

要将新用户添加到系统,请在shell提示符下以root身份键入以下内容:

useradd  options  username

默认情况下,useradd命令创建一个锁定的用户帐户。 要解锁该帐户,请以超级用户身份运行以下命令以分配密码:

passwd username

options)可以设置密码时效策略。
Linux - 管理用户和组_第3张图片
Linux - 管理用户和组_第4张图片
现在的CentOS (7及以上)版本中,已更改了系统用户和普通用户的默认ID范围。 以前,UID 1-499用于系统用户,而上面的值用于普通用户。 现在系统用户的默认范围为1-999

创建用户:

[root@localhost ~]# useradd google

以下步骤说明了在启用了影子密码的系统上发出 useradd google命令会发生什么情况:

  1. / etc / passwd中为google创建新行:
google:x:1001:1001::/home/google:/bin/bash

该行具有以下特征:

  • 它以用户名google开头。
  • 密码字段有一个x,指示系统正在使用影子密码。
  • 创建的UID大于999。
  • 创建的GID大于999。
  • 可选的GECOS信息保留为空白。 GECOS字段可用于提供有关用户的其他信息,例如其全名或电话号码。
  • google的主目录设置为/ home / google /
  • 默认的shell设置为/ bin / bash
  1. / etc / shadow中创建了google的新行:
google:!!:18427:0:99999:7:::

该生产线具有以下特征:

  • 它以用户名google开头。
  • / etc / shadow文件的密码字段中会出现两个感叹号(!!),它会锁定该帐户。
  • 密码设置为永不过期(99999)。
注意
如果使用-p标志传递了加密密码,则该密码将位于用户新行的/ etc / shadow文件中。
  1. / etc / group中创建了一个名为google的组的新行:
google:x:1001:

与用户同名的组称为用户专用组。,在/ etc / group中创建的行具有以下特征:

  • 它以组名google开头。
  • 密码字段中会出现一个x,表示系统正在使用影子组密码。
  • GID与在/ etc / passwd中为google的主组列出的组匹配。
  1. / etc / gshadow中创建了一个名为google的组的新行:
google:!::

该行具有以下特征:

  • 它以组名google开头。
  • 感叹号()出现在/ etc / gshadow文件的密码字段中,用于锁定组。
  • 所有其他字段均为空白。
  1. / home目录中创建了google用户的目录:
drwx------. 3 google google 78 6月  14 22:00 /home/google/

该目录由用户googlegroup google拥有。 它仅对用户google具有读取,写入和执行特权。 其他所有权限均被拒绝。
6./ etc / skel /目录中的文件(包含默认用户设置)被复制到新的/ home / google /目录中:

[root@localhost skel]# ll -a
总用量 24
drwxr-xr-x.   3 root root   78 6月  14 17:37 .
drwxr-xr-x. 119 root root 8192 6月  15 09:51 ..
-rw-r--r--.   1 root root   18 8月   8 2019 .bash_logout
-rw-r--r--.   1 root root  193 8月   8 2019 .bash_profile
-rw-r--r--.   1 root root  231 8月   8 2019 .bashrc
drwxr-xr-x.   4 root root   39 6月  14 17:37 .mozilla

[root@localhost ~]# ls -la /home/google/
总用量 12
drwx------. 3 google google  78 6月  14 22:00 .
drwxr-xr-x. 4 root   root    35 6月  14 22:00 ..
-rw-r--r--. 1 google google  18 8月   8 2019 .bash_logout
-rw-r--r--. 1 google google 193 8月   8 2019 .bash_profile
-rw-r--r--. 1 google google 231 8月   8 2019 .bashrc
drwxr-xr-x. 4 google google  39 6月  14 17:37 .mozilla

此时,系统上存在一个名为google的锁定帐户。 要激活它,管理员必须接下来使用passwd命令为该帐户分配密码,并可以选择设置密码有效期等。

添加新组

要将新组添加到系统,请在shell提示符下以超级用户身份键入以下内容:

groupadd options group_name

其中的选项如下:
Linux - 管理用户和组_第5张图片
在这里插入图片描述

将现有用户添加到现有组

使用usermod将现有用户添加到现有组中。usermod的各种选项对用户的主组及其补充组有不同的影响。要覆盖用户的主组,请以root用户身份运行以下命令:

〜]#usermod -g group_name username
[root@localhost ~]# tail -2 /etc/group
xiaohong:x:1002:
xiaolv:x:1003:
[root@localhost ~]# tail -2 /etc/passwd
google:x:1001:1001::/home/google:/bin/bash
[root@localhost ~]# usermod -g xiaohong google 
[root@localhost ~]# tail -1 /etc/passwd
google:x:1001:1002::/home/google:/bin/bash

要覆盖用户的补充组,请以root用户身份运行以下命令:

〜]#usermod -G group_name1,group_name2,... user_name
[root@localhost ~]# usermod -G xiaolan,xiaohua google 
[root@localhost ~]# tail -5 /etc/group
google:x:1001:
xiaohong:x:1002:
xiaolv:x:1003:
xiaohua:x:1004:google
xiaolan:x:1005:google

请注意,在这种情况下,用户的所有先前补充组都将被新组或几个新组替换。要将一个或多个组添加到用户的补充组,请以超级用户身份运行以下命令之一:

〜]#usermod -aG group_name1,group_name2,... user_name
〜]#usermod --append -G group_name1,group_name2,... user_name
[root@localhost ~]# usermod -aG xiaohong,xiaolv google 
[root@localhost ~]# tail -5 /etc/group
google:x:1001:
xiaohong:x:1002:google
xiaolv:x:1003:google
xiaohua:x:1004:google
xiaolan:x:1005:google

请注意,在这种情况下,新组将附加到用户当前的补充组中

创建组目录

系统管理员通常喜欢为每个主要项目创建一个组,并在需要访问该项目文件时将人员分配给该组。使用这种传统方案,当某人创建文件时,该文件与他们所属的主要组相关联。当一个人从事多个项目时,很难将正确的文件与正确的组相关联。但是,使用UPG方案时,会将组自动分配给在setgid位置的目录中创建的文件。setgid位使共享一个公用目录的组项目的管理非常简单,因为用户在该目录中创建的任何文件都归拥有该目录的组所有。

例如,一群人需要处理/ opt / myproject /目录中的文件。可以信任某些人修改此目录的内容,但并非所有人都可以。

  1. 以root用户身份,在shell提示符下键入以下内容来创建/ opt / myproject /目录:
[root@localhost ~]# mkdir /opt/myproject
  1. project组添加到系统:
[root@localhost ~]# groupadd project
  1. / opt / myproject /目录的内容与project组相关联:
[root@localhost ~]# chown root:project /opt/myproject/
  1. 允许组中的用户在目录中创建文件并设置setgid位
[root@localhost ~]# chomod 2775 /opt/myproject/

此时,project组的所有成员都可以在/ opt / myproject /目录中创建和编辑文件,而管理员不必在用户每次写入新文件时更改文件许可权。要验证权限设置是否正确,请运行以下命令:

[root@localhost ~]# ll -d /opt/myproject/
drwxrwsr-x. 2 root project 6 6月  14 22:41 /opt/myproject/

5.将用户添加到project组:

usermod -aG myproject  username
[root@localhost ~]# usermod -aG project google 
[root@localhost ~]# tail -1 /etc/group
 project:x:1006:google
[google@localhost ~]$ cd /opt/myproject/
[google@localhost myproject]$ > my_first_project
[google@localhost myproject]$ ll my_first_project 
-r--r-----. 1 google project 0 6月  15 10:15 my_first_project

使用umask设置新文件默认权限

进程创建文件时,该文件具有某些默认权限,例如-rw-rw-r--。这些初始权限部分由文件模式创建掩码(也称为文件权限掩码或umask)定义。每个进程都有自己的umask。例如,bash默认情况下具有umask 0022。进程umask可以更改。

umask由与标准文件权限相对应的位组成。例如,对于umask 0137,这些数字表示:

  • 0 =无意义,始终为0(umask不影响特殊位
  • 1 =对于所有者权限,执行位被设置
  • 3 =对于组权限,设置了执行和写入位
  • 7 =对于其他权限,设置执行,写入和读取位
    Umask可以二进制八进制符号表示法表示。例如,八进制表示形式0137等于符号表示形式u = rw-,g = r-,o = ---。符号表示法规范与八进制表示法规范相反:它显示允许的权限,而不是禁止的权限。

Umask禁止为文件设置权限

  • 如果在umask中设置了某个位,则在文件中未设置该位。
  • 如果未在umask中设置位,则可以在文件中进行设置,具体取决于其他因素。

下图显示了umask 0137如何影响创建新文件。
Linux - 管理用户和组_第6张图片
出于安全原因,默认情况下,常规文件不能具有执行权限。 因此,即使umask0000(不禁止任何权限),新的常规文件仍然没有执行权限。 但是,可以使用执行权限创建目录:

[root@localhost tmp]# umask 0000
[root@localhost tmp]# > file
[root@localhost tmp]# mkdir direct
[root@localhost tmp]# ls -lh
总用量 4.0K
drwxrwxrwx. 2 root root   6 6月  14 23:00 direct
-rw-rw-rw-. 1 root root   0 6月  14 22:59 file

在Shell中管理umask

对于流行的shell,例如bash,ksh,zsh和tcsh,使用内置的umask shell管理umask。从shell启动的进程继承其umask。显示当前掩码要以八进制表示法显示当前umask,请执行以下操作:

[root@localhost ~]# umask
0000

要以符号表示法显示当前的umask

[root@localhost ~]# umask -S
u=rwx,g=rwx,o=rwx

使用umask在shell中设置mask,要使用八进制符号为当前的shell会话设置umask,请运行:

umask octal_mask

用从0到7的四个或更少的数字替换octal_mask。提供三个或更少的数字时,将权限设置为好像命令包含前导零。 例如,umask 7转换为0007。

使用八进制表示法设置umask要禁止新文件拥有所有者和组的写入和执行权限,以及拥有其他所有者的权限:

[root@localhost ~]# umask 0337
# or
[root@localhost ~]# umask 337

使用默认的shell umask,shell 通常都有一个配置文件,其中设置了默认的umask。对于bash,它是/ etc / bashrc。要显示默认的bash umask

[root@localhost ~]# grep -i -B 1 umask /etc/bashrc 

    # By default, we want umask to get set. This sets it for non-login shell.
--
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
       umask 002
    else
       umask 022

使用特定用户的默认Shell umask默认情况下,新用户的bash umask默认为/ etc / bashrc中定义的umask。要为特定用户更改bash umask,请在该用户的$ HOME / .bashrc文件中添加对umask命令的调用。 例如,要将用户google的bash umask更改为0227:

[google@localhost ~]$ umask
 0022
[google@localhost ~]$ echo 'umask 227'>> /home/google/.bashrc 
[google@localhost ~]$ source ./.bashrc
[google@localhost ~]$ umask
 0227
[google@localhost ~]$ mkdir ubash
[google@localhost ~]$ ll -d ubash/
dr-xr-x---. 2 google google 6 6月  15 10:26 ubash/

为新创建的主目录设置默认权限,要更改用于创建用户主目录的权限,请更改/etc/login.defs文件中的UMASK变量:

# The permission mask is initialized to this value. If not specified, 
# the permission mask will be initialized to 022.
UMASK           077

总结

more and more.

你可能感兴趣的:(Linux必备,linux,centos)