Linux 1.4 用户管理命令详情
用户管理命令详情
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
11serenitatis@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
文件的每一行通常包含以下字段,用冒号(:
)分隔:
- 用户名:用户登录名。
- 加密后的密码:用户的密码,经过哈希处理。
- 上次更改密码的日期:自1970年1月1日以来的天数。
- 最小密码年龄:密码不能更改前必须经过的天数。
- 最大密码年龄:密码必须更改前可以使用的天数。
- 警告期:密码过期前多少天开始警告用户。
- 不活动期:密码过期后账户被禁用前的天数。
- 账户过期日期:自1970年1月1日以来的天数,超过这个日期账户将被禁用。
- 保留字段:通常为空。
temp:$6$fa6UFiaJ$0GGbiJc6aM6a6APAXNR8KjpUtpNvGHF8FgbrdY3uPyvzSw1zGAwxz3ak5YYqTISu9KJhe1HuvJNIjvXBgkkqr0:20054:0:99999:7:::
,我们可以将其分解如下:
用户名:
temp
- 这是用户的登录名。
加密后的密码:
$6$fa6UFiaJ$0GGbiJc6aM6a6APAXNR8KjpUtpNvGHF8FgbrdY3uPyvzSw1zGAwxz3ak5YYqTISu9KJhe1HuvJNIjvXBgkkqr0
- 这是一个使用SHA-512算法加密的密码。表示使用SHA-512算法,
fa6UFiaJ
是盐值,其余部分是实际的哈希值。
- 这是一个使用SHA-512算法加密的密码。表示使用SHA-512算法,
上次更改密码的日期:
20054
- 这个数字表示自1970年1月1日以来的天数。你可以通过计算得出具体的日期:这将给出一个具体的日期。
1
date -d "1970-01-01 20054 days"
- 这个数字表示自1970年1月1日以来的天数。你可以通过计算得出具体的日期:
最小密码年龄:
0
- 密码可以在任何时候更改,没有限制。
最大密码年龄:
99999
- 密码永远不会过期,因为99999天大约是274年。
警告期:
7
- 在密码过期前7天开始警告用户。
不活动期:空
- 没有设置不活动期,这意味着密码过期后账户不会自动被禁用。
账户过期日期:空
- 账户永不过期。
保留字段:空
- 保留字段通常为空。
3.2 /etc/passwd文件
该文件包含了系统中所有用户的相关信息,包括用户名、用户ID、用户组、用户主目录、用户shell等。
1 | serenitatis@ubuntu:~$ cat /etc/passwd |
1 | temp:x:1001:1001:,,,:/home/temp:/bin/bash |
/etc/passwd
文件的每一行包含以下字段,用冒号(:
)分隔:
- 用户名:用户登录名。
- 密码占位符:通常是
x
,表示密码信息存储在/etc/shadow
文件中。 - 用户ID (UID):用户的唯一标识符。
- 组ID (GID):用户的主要组的唯一标识符。
- 用户的全名或注释:可以是用户的全名或其他描述性信息。
- 用户的主目录:用户的家目录路径。
- 用户的登录Shell:用户登录时使用的默认Shell。
对于给定的内容 temp:x:1001:1001:,,,:/home/temp:/bin/bash
,我们可以将其分解如下:
用户名:
temp
- 这是用户的登录名。
密码占位符:
x
- 表示密码信息存储在
/etc/shadow
文件中。实际的加密密码不会出现在这里。
- 表示密码信息存储在
用户ID (UID):
1001
- 用户
temp
的唯一标识符。UID 1001 是一个非系统用户的标准UID。
- 用户
组ID (GID):
1001
- 用户
temp
的主要组的唯一标识符。这意味着用户temp
的主要组也是GID为1001的组。
- 用户
用户的全名或注释:
,,,
- 这里使用了三个逗号,通常这个字段用于存放用户的全名或描述性信息。在这个例子中,它被设置为空,或者可能是一个特殊的标记。如果确实需要提供用户的全名或其他信息,可以在这里填写。
用户的主目录:
/home/temp
- 用户
temp
的家目录路径。这是用户登录后默认进入的目录。
- 用户
用户的登录Shell:
/bin/bash
- 用户登录时使用的默认Shell。
/bin/bash
是Bash Shell,是Linux和Unix系统中最常用的命令行解释器。
- 用户登录时使用的默认Shell。
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 | # This file MUST be edited with the 'visudo' command as root. |
编辑方式:
1
# This file MUST be edited with the 'visudo' command as root.
- 强调必须使用
visudo
命令来编辑此文件,以确保语法正确性。visudo
会检查文件的语法,并在保存时提供错误提示。
- 强调必须使用
建议:
1
2# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.- 建议将自定义的
sudo
规则添加到/etc/sudoers.d/
目录下的文件中,而不是直接修改/etc/sudoers
文件。这样可以更方便地管理和维护。
- 建议将自定义的
文档参考:
1
# See the man page for details on how to write a sudoers file.
- 提示查看
man sudoers
以获取更多关于如何编写sudoers
文件的信息。
- 提示查看
3.5 默认设置
1 | Defaults env_reset |
- env_reset:重置环境变量。这意味着当用户通过
sudo
运行命令时,只有SHELL
,USER
,LOGNAME
,HOME
,PATH
,TERM
,PWD
,LANG
,LC_*
,TZ
等必要的环境变量会被保留。 - mail_badpass:如果用户输入错误的密码,系统会发送邮件通知给管理员。
- secure_path:定义了安全路径,限制了
sudo
命令可以访问的可执行文件的位置。这有助于防止恶意软件被误用。
3.6 主机别名、用户别名和命令别名
1 | # Host alias specification |
- 这些部分是为定义主机别名、用户别名和命令别名留出的空间。目前没有具体的定义。
3.7 用户权限规格
1 | # User privilege specification |
root
用户可以在任何主机上以任何用户或组的身份执行任何命令。
1 | # Members of the admin group may gain root privileges |
admin
组的成员可以在任何主机上以任何用户的身份执行任何命令。
1 | # Allow members of group sudo to execute any command |
sudo
组的成员可以在任何主机上以任何用户或组的身份执行任何命令。
3.8 包含其他配置文件
1 | #includedir /etc/sudoers.d |
- 指定包含
/etc/sudoers.d/
目录下的所有文件。这些文件中的规则也会被应用。这是一种模块化管理sudo
规则的方式,便于维护和扩展。