一、用户与用户组的概念
用户与用户组概念
Linux是一个多用户、多任务的服务器操作系统,多用户多任务指可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响。
Linux用户是根据角色定义的,具体分为三种角色:
超级用户:拥有对系统的最高管理权限,默认是root用户。
普通用户:只能对自己目录下的文件进行访问和修改,具有登录系统的权限,例如www用户、ftp用户等。
虚拟用户:也叫“伪”用户,这类用户最大的特点是不能登录系统,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。
用户和用户组的对应关系有:一对一、一对多、多对一和多对多。
Linux系统中每一个用户都至少属于一个用户组,管理员可以通过对用户组的管理来设置用户对系统的访问权限,从而在一定程度上保证了对系统访问的安全性。
在使用useradd命令创建用户的时候,系统除创建该用户外,默认情况下还会创建一个同名的用户组,作为该用户的用户组,同时还会在/home目录下创建同名的目录作为该用户的主目录。如果一个用户属于多个组,那么记录在/etc/passwd文件中的组称为该用户的主组,其他的组称为附属组。
主要组(主组):每个用户有且只有一个主要组。
附属组(补充组):用户可以是零个或多个附属组成员。一般用于帮助确保用户具有对系统中文件 及其他资源的访问权限。
二、与用户管理相关的配置文件
1.用户信息配置文件/etc/passwd
在Linux系统中,用户信息被存放在系统的/etc/passwd文件中,系统的每一个合法用户对应于该文件中的一行记录。这行记录定义了该用户的属性。由于所有的用户对passwd文件均有读取的权限,因此密码信息并未保存在该文件中,而是保存在了/etc/shadow配置文件中。
在passwd配置文件中,每行均由7个字段构成,各个字段之间用“:”分隔,每个字段都代表该用户某方面的信息。
#用户名:密码占位符:UID:GID:用户描述:家目录:登录后用到的shell
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
在passwd配置文件中,从左到右各个字段的含义如下:
用户名:用户登录系统时使用的用户名。
密码:存放加密的密码,被/etc/shadow文件保护。
用户标识号(UID):系统内部用它来标识用户,每个用户的UID都是唯一的。
用户组标识号(GID):系统内部用它来标识用户所属的组,这里的GID是主组GID。
注释性描述:为了方便管理和记忆该用户而添加的信息。
用户主目录:也称家目录,用户登录系统后所进入的目录。
命令解释器:指示该用户使用的Shell,CentOS Linux 8默认的是bash。如果指定Shell为/sbin/nologin,则代表用户无法登录系统。
2、用户密码配置文件/etc/shadow
为了加强系统安全性,Linux操作系统提供了专门的密码管理文件。
该文件对一般用户不可读,只有root用户才能够读取。
在/etc/shadow文件中,一行对应一个用户的密码信息,每行均由9个字段构成,各个字段之间用“:”分隔。
#用户名:加密密码:最后一次修改的日期:密码最小时间间隔:密码最大时间间隔:警告时间:失效日期:禁用日期:保留字段
root:$6$g17DLXf6.6F5rHro$9JbfGsyELRbh4dP39eRI0Io49DvcXBtxjjGpXWZgAQk8QzKhjH7IEfkJtHxPy5SpjM9JoEZdaDuxHizdnGoL0/::0:99999:7:::
bin:*:19326:0:99999:7:::
daemon:*:19326:0:99999:7:::
adm:*:19326:0:99999:7:::
lp:*:19326:0:99999:7:::
sync:*:19326:0:99999:7:::
shutdown:*:19326:0:99999:7:::
halt:*:19326:0:99999:7:::
mail:*:19326:0:99999:7:::
operator:*:19326:0:99999:7:::
在shadow配置文件中,从左到右各个字段的含义如下:
(1) 用户名:用户账户名。
(2) 密码:用户的加密密码。
(3) 最后一次修改的日期:从1970年1月1日起,到用户最后一次更改密码的天数。
(4) 密码最小时间间隔:从1970年1月1日起,到用户可以更改密码的天数,(0表示随时可以变更)。
(5) 密码最大时间间隔:从1970年1月1日起,到必须更改密码的天数,否则密码将过期,(99999表示永远不过期)。
(6) 警告时间:在密码过期之前多少天提醒用户更新,默认值是7天。
(7) 密码失效日期:表示密码失效的日期,以自1970年1月1日以来的天数计算(从上次密码失效之后的天数)。
(8) 账户失效日期:表示账户失效的日期,以自1970年1月1日以来的天数计算(从上次账户失效之后的天数)。
(9) 保留字段:保留字段未使用。
3、用户组配置文件/etc/group
将用户进行分组是Linux系统对用户进行管理及控制访问权限的一种手段。一个组中可以有多个用户,一个用户也可以属于多个组。系统中所有的组信息存放于/etc/group文件,其中一行对应一个用户组的信息,每行均由4个字段构成,各个字段之间用“:”分隔。
#组名:组密码:GID(组标识符):组成员
utempter:x:35:
input:x:999:
kvm:x:36:qemu
render:x:998:
systemd-journal:x:190:
systemd-coredump:x:997:
systemd-resolve:x:193:
tss:x:59:clevis
polkitd:x:996:
/etc/group文件中各字段的含义从左到右分别是:
组名:组的名称,由字母、数字和特殊字符组成
组密码:用户组的密码,在大多数情况下,密码字段为空,表示没有设置组密码。用x表示口令是被/etc/gshadow文件保护的。
组标识号(GID):系统内部用它来标识用户组,每个用户组的GID都是唯一的。
组成员:该组的成员,由逗号分隔的用户名列表,表示属于该组的用户。
三、用户管理命令
1、useradd
创建用户
useradd -d -u "UID" -g "初始组" -G "附加租" -s "登录shell" 用户
参数 | 描述 |
---|---|
-d | 用户主目录路径,可以指定家目录 |
-u | 手工指定新用户的ID值,该值必须唯一,且大于999。 |
-M | 不创建用户的家目录 |
-g | 设置用户初始组的名称或数字ID;该组必须存在 |
-G | 用户加入附加组列表;使用","逗号分割多个组,不要添加空格;如果不设置,用户仅加入初始组 |
-s | 用户默认登录的shell路径;若要禁止用户登录动作,可以将shell设置成/sbin/shell |
-r | 创建系统账号(用户ID小于1000,从999起按照递减的顺序创建),默认不创建对应的主目录 |
例:创建Tom
[root@fishman-160 ~]# useradd Tom #useadd 创建用户Tom
[root@fishman-160 ~]# ls /home # 没有为tom指定用户组和主目录,所以系统会创建同名用户组tom作为tom用户的用户组
kc Tom
[root@fishman-160 ~]# tail -1 /etc/passwd
Tom:x:1001:1001::/home/Tom:/bin/bash
[root@fishman-160 ~]# ls /var/mail# 在/var/spool/mail和/var/mail下创建与tom同名的文件,作为tom用户的邮件日志文件和备份。
kc rpc Tom
[root@fishman-160 ~]# ls /var/spool/mail
kc rpc Tom
[root@fishman-160 ~]# id tom
id: “tom”:无此用户
[root@fishman-160 ~]# id Tom #系统会创建同名用户组tom作为tom用户的用户组
uid=1001(Tom) gid=1001(Tom) 组=1001(Tom)
[root@fishman-160 ~]#
例:创建一个名为zhangqi的用户,设置主目录为:/var/zhangqi,作为root组的成员,加注释:101school,指定用户Shell为:/bin/sh。
[root@fishman-160 ~]# useradd zhangqi -d /var/zhangqi -c 101shcool -s /bin/sh -g root
[root@fishman-160 ~]# tail -1 /etc/passwd
zhangqi:x:1002:0:101shcool:/var/zhangqi:/bin/sh
[root@fishman-160 ~]# groups zhangqi #通过groups <username>查看用户所属组
zhangqi : root
2、userdel删除用户
userdel -r <username> # -r 递归删除,会删除家目录,日志目录等
[root@fishman-160 ~]# userdel -r zhangqi
[root@fishman-160 ~]# ls /var/
account/ cache/ db/ ftp/ gopher/ lib/ lock/ mail/ opt/ run/ tmp/ yp/
adm/ crash/ empty/ games/ kerberos/ local/ log/ nis/ preserve/ spool/ .updated
[root@fishman-160 ~]# ls /var/
account/ cache/ db/ ftp/ gopher/ lib/ lock/ mail/ opt/ run/ tmp/ yp/
adm/ crash/ empty/ games/ kerberos/ local/ log/ nis/ preserve/ spool/ .updated
[root@fishman-160 ~]# ls /var/mail/
kc rpc Tom
3 、修改密码
passwd <username>
[root@fishman-160 ~]# echo 123456 | passwd --stdin Tom
更改用户 Tom 的密码 。
passwd:所有的身份验证令牌已经成功更新。
#echo 123456 命令会将字符串 "123456" 输出到标准输出(通常是终端屏幕),然后通过管道符将其传递给 passwd --stdin Tom 命令。
#passwd --stdin Tom 命令用于将标准输入中的内容作为密码设置给用户 "Tom"。通过管道,它接收了来自 echo 123456 的输出作为密码输入,从而自动将密码设置为 "123456"。
4、密码文件
[root@fishman-160 ~]# sudo grep -E '^kc:|^Tom:' /etc/shadow #-E 是启用正则表达式匹配模式
kc:$6$VVL7fEiAUNWkhTC3$gqJBRCu4vmb7cdrgSbGMvtt72B0HWSI6G3mYbqvLYmegl8Unwvp/zE5vddGp6WCKSl0s.azZaPFSXnD2z0PKC.:19555:0:99999:7:::
Tom:$6$Bz8YWnvTLBIyBF.n$GxTRECvSuDZ8ArP1LuidpQu6LKv8KSxYJOQeDSc5VQM9xJ2emc4TaPavPHdL4e.7GldDsiWq3ATdnyWRV4FcZ/:19555:0:99999:7:::
#KC Tom 是同一个密码,但是哈希值不同,因为前面的salt不同。
#互换密码是可以登录的,salt是加密过程中生成
passwd 已加密密码,分为三个部分,第一部分是表示使用哪种哈希算法;第二部分是用于加密哈希的salt;第三部分是已加密哈希
哈希算法:$1表示MD5;
$6表示SHA-512;
$5表示SHA-256;
5、添加用户的规则文件
控制用户添加规则的文件:/etc/default/useradd 和 /etc/login.defs
[root@fishman-160 ~]# vim /etc/default/useradd
1 # useradd defaults file
2 GROUP=100
3 HOME=/home
4 INACTIVE=-1
5 EXPIRE=
6 SHELL=/bin/bash
7 SKEL=/etc/skel
8 CREATE_MAIL_SPOOL=yes
9
[root@fishman-160 ~]# vim /etc/login.defs
1 #
2 # Please note that the parameters in this configuration file control the
3 # behavior of the tools from the shadow-utils component. None of these
4 # tools uses the PAM mechanism, and the utilities that use PAM (such as the
5 # passwd command) should therefore be configured elsewhere. Refer to
6 # /etc/pam.d/system-auth for more information.
7 #
8
9 # *REQUIRED*
10 # Directory where mailboxes reside, _or_ name of file, relative to the
11 # home directory. If you _do_ define both, MAIL_DIR takes precedence.
12 # QMAIL_DIR is for Qmail
13 #
14 #QMAIL_DIR Maildir
15 MAIL_DIR /var/spool/mail
16 #MAIL_FILE .mail
17
18 # Default initial "umask" value used by login(1) on non-PAM enabled systems.
19 # Default "umask" value for pam_umask(8) on PAM enabled systems.
20 # UMASK is also used by useradd(8) and newusers(8) to set the mode for new
21 # home directories if HOME_MODE is not set.
22 # 022 is the default value, but 027, or even 077, could be considered
23 # for increased privacy. There is no One True Answer here: each sysadmin
24 # must make up their mind.
25 UMASK 022
26
27 # HOME_MODE is used by useradd(8) and newusers(8) to set the mode for new
28 # home directories.
29 # If HOME_MODE is not set, the value of UMASK is used to create the mode.
30 HOME_MODE 0700
31
32 # Password aging controls:
33 #
34 # PASS_MAX_DAYS Maximum number of days a password may be used.
35 # PASS_MIN_DAYS Minimum number of days allowed between password changes.
36 # PASS_MIN_LEN Minimum acceptable password length.
37 # PASS_WARN_AGE Number of days warning given before a password expires.
38 #
39 PASS_MAX_DAYS 99999
40 PASS_MIN_DAYS 0
41 PASS_MIN_LEN 5
42 PASS_WARN_AGE 7
43
44 #
45 # Min/max values for automatic uid selection in useradd
46 #
47 UID_MIN 1000
48 UID_MAX 60000
49 # System accounts
50 SYS_UID_MIN 201
51 SYS_UID_MAX 999
52
53 #
54 # Min/max values for automatic gid selection in groupadd
55 #
56 GID_MIN 1000
57 GID_MAX 60000
58 # System accounts
59 SYS_GID_MIN 201
60 SYS_GID_MAX 999
61
62 #
63 # If defined, this command is run when removing a user.
64 # It should remove any at/cron/print jobs etc. owned by
65 # the user to be removed (passed as the first argument).
66 #
67 #USERDEL_CMD /usr/sbin/userdel_local
68
69 #
70 # If useradd should create home directories for users by default
71 # On RH systems, we do. This option is overridden with the -m flag on
72 # useradd command line.
73 #
74 CREATE_HOME yes
75
76 # This enables userdel to remove user groups if no members exist.
77 #
78 USERGROUPS_ENAB yes
79
80 # Use SHA512 to encrypt password.
81 ENCRYPT_METHOD SHA512
82
6、查看用户相关信息的命令
command | description |
---|---|
id | 查看当前有效用户名 |
who | 显示登陆系统用户信息 |
w | 显示已登陆系统的用户列表 |
users | 显示当前登陆系统的所有用户的列表 |
7、usermod修改用户信息
usermode <参数> <用户名>
command | description |
---|---|
-u | 需改用户的UID |
-d | 修改用户的家目录 |
-g | 修改用户的主要组ID |
-G | 修改用户的附加组ID |
-s | shell |
-L | 锁定 |
-U | 解锁 |
-e | 修改用户密码过期的日期 |
例:移动家目录
usermod -m -d /home/new_home john
#将用户john的家目录路径修改为/home/new_home,并将现有的文件迁移到新的位置:
8、误删家目录内.bashrc、.bash_profile、.bash_logout等文件的找回
[root@fishman-160 ~]# ll -a /etc/skel/ #可以去/etc/skel/目录下复制拷贝
总用量 24
drwxr-xr-x. 3 root root 78 7月 6 13:27 .
drwxr-xr-x. 149 root root 8192 7月 17 10:54 ..
-rw-r--r--. 1 root root 18 4月 8 2022 .bash_logout
-rw-r--r--. 1 root root 141 4月 8 2022 .bash_profile
-rw-r--r--. 1 root root 376 4月 8 2022 .bashrc
drwxr-xr-x. 4 root root 39 7月 6 13:26 .mozilla
例:重建Tom用户下的误删家目录文件
[root@fishman-160 ~]# ll -a /home/Tom
总用量 0
drwx------ 3 Tom Tom 22 7月 17 11:18 .
drwxr-xr-x. 4 root root 27 7月 17 10:01 ..
drwxr-xr-x 4 Tom Tom 39 7月 6 13:26 .mozilla
[root@fishman-160 ~]# cp /etc/skel/.bash* /home/Tom
[root@fishman-160 ~]# ll -a /home/Tom #文件的拥有者和所属组不正确,不应该是root,而应该是Tom
总用量 12
drwx------ 3 Tom Tom 78 7月 17 11:19 .
drwxr-xr-x. 4 root root 27 7月 17 10:01 ..
-rw-r--r-- 1 root root 18 7月 17 11:19 .bash_logout
-rw-r--r-- 1 root root 141 7月 17 11:19 .bash_profile
-rw-r--r-- 1 root root 376 7月 17 11:19 .bashrc
drwxr-xr-x 4 Tom Tom 39 7月 6 13:26 .mozilla
[root@fishman-160 ~]# chown Tom:Tom /home/Tom/.bash* #务必修改文件拥有者和所属组
[root@fishman-160 ~]# ll -a /home/Tom
总用量 12
drwx------ 3 Tom Tom 78 7月 17 11:19 .
drwxr-xr-x. 4 root root 27 7月 17 10:01 ..
-rw-r--r-- 1 Tom Tom 18 7月 17 11:19 .bash_logout
-rw-r--r-- 1 Tom Tom 141 7月 17 11:19 .bash_profile
-rw-r--r-- 1 Tom Tom 376 7月 17 11:19 .bashrc
drwxr-xr-x 4 Tom Tom 39 7月 6 13:26 .mozilla
9、批量创建用户newusers
newusers < adduser.txt
首先创建一个存放用户信息的文件,里面的用户信息格式要和passwd这个文件保持一致
adduser.txt文件格式如下
username:password:UID:GID:comment:home_directory:shell
[root@fishman-160 ~]# vim adduser.txt
test1:x:1100:1100::/home/test1:/bin/bash
test2:x:1101:1101::/home/test2:/bin/bash
test3:x:1102:1102::/home/test3:/bin/bash
[root@fishman-160 ~]# newusers<adduser.txt #newusers 命令读取addruser.txt文件
[root@fishman-160 ~]# tail -3 /etc/passwd
test1:x:1100:1100::/home/test1:/bin/bash
test2:x:1101:1101::/home/test2:/bin/bash
test3:x:1102:1102::/home/test3:/bin/bash
[root@fishman-160 ~]# tail -3 /etc/shadow
test1:$6$.MFZ1/o75K8$lEXJ5uH1Swjn8dKUbxjYTbzEH.YYgTXekmPY4J6Xx0a8RjRqI41HxNAqS3yxwzpyfiPq/VOvhw6rcQc.IIgjI0:19555:0:99999:7:::
test2:$6$Rhkx./4iKOu/Y3UG$xJP8Y0NIy70v3n1Fzy/SJ9BbEodCM/wKpSTgppnOwwLyiiQgK9fuAn/yMi8uNhUYDyi0sQvXcDae.5mfl76Qb/:19555:0:99999:7:::
test3:$6$PXU.d0l9k$vbSH0KzjE4fUvaQZ6UZ6jCkFY1N1IZP.D9/6B1T84PI1yc3PtT3JzmjMVUpiZgpEIJzSyjBKm6kdwzA.5fQ1Z/:19555:0:99999:7:::
10、找回丢失的root密码(CentOS8)
在启动过程中,选择 Grub 菜单中的 CentOS 8 内核版本。
按下 `e` 键进入编辑模式,在 `linux16` 行的末尾添加 `rd.break` 参数,并按下 `Ctrl+X` 或 `F10` 启动系统。
进入 emergency 模式,在提示符中键入 `mount -o remount,rw /sysroot`,并按 Enter 键。
运行 `chroot /sysroot` 命令以切换到根文件系统。
运行 `passwd` 命令以更改 root 用户的密码。按照提示输入新的密码并确认。
运行 `touch /.autorelabel` 命令以触发 SELinux 上下文重新标记。
运行 `exit` 命令两次以退出 chroot 环境和 emergency 模式。
系统将继续引导,此时您可以使用新设置的 root 密码登录系统。
例:
开机进入CentOS,并按'e'进入编辑选项
在 linux16
行的末尾添加 rd.break
参数,并按下 Ctrl+X
或 F10
启动系统。
顺利进入 emergency 模式
命令mount 查看挂载分区情况
mount -o remount,rw /sysroot/ #重新挂载分区,以读写模式挂载/sysroot/分区
chroot /sysroot 切换到根文件系统
passwd
完成修改密码
touch /.autorelabel # 命令以触发 SELinux 上下文重新标记。
exit #exit两次以退出 chroot 环境和 emergency 模式
四、组管理
在 Linux 中,组管理主要涉及到创建、修改和删除用户组。以下是一些常用的组管理命令及其参数:
1. groupadd
用于创建新的用户组。
sudo groupadd [options] group_name
常用选项:
-
-g GID
:指定新创建的用户组的组ID。 -
-r
:创建一个系统用户组。
例子:
sudo groupadd -g 1001 mygroup
2. groupmod
用于修改已存在的用户组的属性。
sudo groupmod [options] group_name
常用选项:
-
-g GID
:修改用户组的组ID。 -
-n new_group_name
:修改用户组的名称。
例子:
sudo groupmod -g 1002 mygroup
3. groupdel
用于删除用户组。
sudo groupdel group_name
例子:
sudo groupdel mygroup
4. groups
显示用户所属的组。
groups [username]
例子:
groups username
这些是基本的组管理命令和参数。在使用这些命令时,请确保以足够的权限运行,通常需要使用 sudo
或者在具有相应权限的用户下运行。可以通过 man
命令来查看这些命令的手册页,以获取更详细的信息和选项。
标签:管理,root,用户组,用户,fishman,Tom,160 From: https://www.cnblogs.com/kcloveworld/p/17984390