用户管理命令详情

1 用户管理命令

1.1 添加用户

1
sudo useradd [options] [username]
  • options:可以是-u UID,-g GID,-d HOME_DIR,-s SHELL,-c COMMENT,-p PASSWORD。
  • username:要添加的用户名。

1.2 为用户添加sudo权限

1
sudo usermod -aG sudo [username]
  • -aG:选项用于将用户添加到sudo组。
  • sudo:要添加的用户名。

2 组管理命令

2.1 常见的Linux 用户组

1
serenitatis : serenitatis adm cdrom sudo dip plugdev lpadmin sambashare

groups:查看用户所在组

在Ubuntu系统中,用户serenitatis所属的组列表显示为serenitatis : serenitatis adm cdrom sudo dip plugdev lpadmin sambashare。这意味着用户serenitatis是这些组的成员。让我们逐个解释这些组的作用:

  • serenitatis:这是用户的主组(Primary Group),通常与用户名相同。每个用户都有一个主组。

  • adm:这个组允许查看系统日志文件,如/var/log目录下的许多文件。这对于系统管理员来说非常有用,因为可以检查系统和应用程序的日志以进行故障排除。

  • cdrom:属于这个组的用户可以挂载和卸载CD-ROM设备。这使得用户能够访问光盘内容而无需root权限。

  • sudo:这个组的成员可以执行需要超级用户权限的操作。通过使用sudo命令,用户可以在不成为root的情况下执行管理任务。这提高了系统的安全性,同时赋予了必要的权限。

  • dip:Dial-In Protection,这个组允许用户使用拨号网络连接。在现代环境中,这个组可能不常用,除非涉及到旧式的调制解调器或某些特定的网络配置。

  • plugdev:这个组的成员可以访问热插拔设备,比如USB存储设备。加入此组后,用户可以挂载USB驱动器和其他即插即用设备。

  • lpadmin:这个组的成员可以管理打印队列、添加打印机以及设置默认打印机等。这对负责维护打印服务的用户很有用。

  • sambashare:这是一个自定义组名,通常用于Samba共享环境。如果设置了Samba共享,并且希望某些用户能够访问特定的共享资源,可以将这些用户添加到sambashare组。这样,可以通过Samba配置来控制哪些用户可以访问共享文件夹。

这些组的组合使serenitatis用户拥有了广泛的权限,包括系统管理和日常操作所需的权限。如果你需要调整这些权限,可以根据具体需求通过添加或移除用户到不同的组来实现。例如,如果你不想让用户拥有sudo权限,可以从sudo组中移除该用户。

2.2 组管理命令

将用户添加到组的命令:

1
usermod -a -G [groupname] [username]

-G 选项用于指定要添加的组。
-a 选项用于追加用户加入的组。

1
2
3
4
5
6
7
8
9
10
11
serenitatis@ubuntu:~$ sudo usermod -G tempgroup temp1
serenitatis@ubuntu:~$ groups temp1
temp1 : temp1 tempgroup
serenitatis@ubuntu:~$ sudo groupadd tempgroup2
serenitatis@ubuntu:~$ sudo usermod -G tempgroup2 temp1
serenitatis@ubuntu:~$ groups temp1
temp1 : temp1 tempgroup2
serenitatis@ubuntu:~$ sudo usermod -G tempgroup2 temp1^C
serenitatis@ubuntu:~$ sudo usermod -a -G tempgroup temp1
serenitatis@ubuntu:~$ groups temp1
temp1 : temp1 tempgroup tempgroup

移除用户所在组的命令:

1
sudo gpasswd -d [用户名] [组名]

如何删除组:

1
sudo groupdel [组名]

3 etc中的用户管理文件

3.1 /etc/shadow文件

该文件包含了系统中所有用户的密码信息,包括用户名、加密后的密码、上次更改密码的日期、密码过期日期等。

1
serenitatis@ubuntu:~$ cat /etc/shadow
1
temp:$6$fa6UFiaJ$0GGbiJc6aM6a6APAXNR8KjpUtpNvGHF8FgbrdY3uPyvzSw1zGAwxz3ak5YYqTISu9KJhe1HuvJNIjvXBgkkqr0:20054:0:99999:7:::

/etc/shadow 文件的每一行通常包含以下字段,用冒号(:)分隔:

  1. 用户名:用户登录名。
  2. 加密后的密码:用户的密码,经过哈希处理。
  3. 上次更改密码的日期:自1970年1月1日以来的天数。
  4. 最小密码年龄:密码不能更改前必须经过的天数。
  5. 最大密码年龄:密码必须更改前可以使用的天数。
  6. 警告期:密码过期前多少天开始警告用户。
  7. 不活动期:密码过期后账户被禁用前的天数。
  8. 账户过期日期:自1970年1月1日以来的天数,超过这个日期账户将被禁用。
  9. 保留字段:通常为空。

temp:$6$fa6UFiaJ$0GGbiJc6aM6a6APAXNR8KjpUtpNvGHF8FgbrdY3uPyvzSw1zGAwxz3ak5YYqTISu9KJhe1HuvJNIjvXBgkkqr0:20054:0:99999:7:::,我们可以将其分解如下:

  1. 用户名temp

    • 这是用户的登录名。
  2. 加密后的密码$6$fa6UFiaJ$0GGbiJc6aM6a6APAXNR8KjpUtpNvGHF8FgbrdY3uPyvzSw1zGAwxz3ak5YYqTISu9KJhe1HuvJNIjvXBgkkqr0

    • 这是一个使用SHA-512算法加密的密码。表示使用SHA-512算法,fa6UFiaJ是盐值,其余部分是实际的哈希值。
  3. 上次更改密码的日期20054

    • 这个数字表示自1970年1月1日以来的天数。你可以通过计算得出具体的日期:
      1
      date -d "1970-01-01 20054 days"
      这将给出一个具体的日期。
  4. 最小密码年龄0

    • 密码可以在任何时候更改,没有限制。
  5. 最大密码年龄99999

    • 密码永远不会过期,因为99999天大约是274年。
  6. 警告期7

    • 在密码过期前7天开始警告用户。
  7. 不活动期:空

    • 没有设置不活动期,这意味着密码过期后账户不会自动被禁用。
  8. 账户过期日期:空

    • 账户永不过期。
  9. 保留字段:空

    • 保留字段通常为空。

3.2 /etc/passwd文件

该文件包含了系统中所有用户的相关信息,包括用户名、用户ID、用户组、用户主目录、用户shell等。

1
serenitatis@ubuntu:~$ cat /etc/passwd
1
temp:x:1001:1001:,,,:/home/temp:/bin/bash

/etc/passwd 文件的每一行包含以下字段,用冒号(:)分隔:

  1. 用户名:用户登录名。
  2. 密码占位符:通常是x,表示密码信息存储在/etc/shadow文件中。
  3. 用户ID (UID):用户的唯一标识符。
  4. 组ID (GID):用户的主要组的唯一标识符。
  5. 用户的全名或注释:可以是用户的全名或其他描述性信息。
  6. 用户的主目录:用户的家目录路径。
  7. 用户的登录Shell:用户登录时使用的默认Shell。

对于给定的内容 temp:x:1001:1001:,,,:/home/temp:/bin/bash,我们可以将其分解如下:

  1. 用户名temp

    • 这是用户的登录名。
  2. 密码占位符x

    • 表示密码信息存储在/etc/shadow文件中。实际的加密密码不会出现在这里。
  3. 用户ID (UID)1001

    • 用户temp的唯一标识符。UID 1001 是一个非系统用户的标准UID。
  4. 组ID (GID)1001

    • 用户temp的主要组的唯一标识符。这意味着用户temp的主要组也是GID为1001的组。
  5. 用户的全名或注释,,,

    • 这里使用了三个逗号,通常这个字段用于存放用户的全名或描述性信息。在这个例子中,它被设置为空,或者可能是一个特殊的标记。如果确实需要提供用户的全名或其他信息,可以在这里填写。
  6. 用户的主目录/home/temp

    • 用户temp的家目录路径。这是用户登录后默认进入的目录。
  7. 用户的登录Shell/bin/bash

    • 用户登录时使用的默认Shell。/bin/bash 是Bash Shell,是Linux和Unix系统中最常用的命令行解释器。

3.3 /etc/group文件

该文件包含了系统中的所有组及其相关信息,包括组名、组ID、组成员等。

1
serenitatis@ubuntu:~$ cat /etc/group
1
temp:x:1001:

3.4 /etc/sudoiers文件

该文件包含了系统中所有用户的sudo权限信息,包括用户名、用户组、sudo权限等。

1
serenitatis@ubuntu:~$ cat /etc/sudoers
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
  1. 编辑方式

    1
    # This file MUST be edited with the 'visudo' command as root.
    • 强调必须使用visudo命令来编辑此文件,以确保语法正确性。visudo会检查文件的语法,并在保存时提供错误提示。
  2. 建议

    1
    2
    # Please consider adding local content in /etc/sudoers.d/ instead of
    # directly modifying this file.
    • 建议将自定义的sudo规则添加到/etc/sudoers.d/目录下的文件中,而不是直接修改/etc/sudoers文件。这样可以更方便地管理和维护。
  3. 文档参考

    1
    # See the man page for details on how to write a sudoers file.
    • 提示查看man sudoers以获取更多关于如何编写sudoers文件的信息。

3.5 默认设置

1
2
3
Defaults        env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
  • env_reset:重置环境变量。这意味着当用户通过sudo运行命令时,只有SHELL, USER, LOGNAME, HOME, PATH, TERM, PWD, LANG, LC_*, TZ等必要的环境变量会被保留。
  • mail_badpass:如果用户输入错误的密码,系统会发送邮件通知给管理员。
  • secure_path:定义了安全路径,限制了sudo命令可以访问的可执行文件的位置。这有助于防止恶意软件被误用。

3.6 主机别名、用户别名和命令别名

1
2
3
# Host alias specification
# User alias specification
# Cmnd alias specification
  • 这些部分是为定义主机别名、用户别名和命令别名留出的空间。目前没有具体的定义。

3.7 用户权限规格

1
2
# User privilege specification
root ALL=(ALL:ALL) ALL
  • root用户可以在任何主机上以任何用户或组的身份执行任何命令。
1
2
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
  • admin组的成员可以在任何主机上以任何用户的身份执行任何命令。
1
2
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
  • sudo组的成员可以在任何主机上以任何用户或组的身份执行任何命令。

3.8 包含其他配置文件

1
#includedir /etc/sudoers.d
  • 指定包含/etc/sudoers.d/目录下的所有文件。这些文件中的规则也会被应用。这是一种模块化管理sudo规则的方式,便于维护和扩展。