[UOS] 【1060a系列】用户与组管理
Tofloor
poster avatar
废物头子
deepin
2023-11-03 02:32
Author

1060a分享系列之用户与组管理

一、用户和组的概念

(1)什么是用户

因为不同的服务使用不同的用户来管理更加安全;并且使用多用户,能够让系统的运行效率更高;并且有利于系统的权限分配和管理

在系统内部,通过给每一个用户分配一个唯一标识号(用户ID或UID)来区分不同的用户,而用户名是为了方便我们使用而产生的。我们使用用户账户时,通常会为其分配一个密码,用于登录时证明是实际的授权用户。

用户有三种主要类型:超级管理员、系统用户和普通用户。

  • 超级管理员账户用于管理系统,其UID为0。超级管理员对系统具有完全访问权限。
  • 系统用户提供支持服务进程使用。这些进程(或守护进程)通常不需要以超级用户身份运行。系统会为它们分配非特权帐户,允许它们确保其文件和其他资源不受彼此以及系统上普通用户的影响。用户无法使用系统用户帐户以交互方式登录。
  • 普通用户对系统具有有限的访问权限。

可以使用 id命令显示当前登录用户的信息。

[root@1060a ~]# id
用户id=0(root) 组id=0(root) 组=0(root)

(2)什么是用户组

组是用户的集合。组可用于向一组用户授予文件访问权限,而非仅仅向一共用户授予访问权限。在系统内部通用通过唯一标识号(组ID或GID)来区分不同的组。组名称是为了方便用户使用。

对于一个用户来说用户组可以分为主要组(所属组)和补充组(附加组)。

  • 私有组(所属组):在创建用户时,如果不指定用户的用户组,系统会创建一个与用户名相同的用户组,这个用户组就是这个用户的私有组。
  • 附加组(附属组):一个用户可以属于多个附加组,除了用户的稀有组,其他的用户组就是该用户的附属组。

id命令显示结果中,组ID显示是私有组,显示是附加组

(3)用户与组相关文件内容详解

系统中跟用户相关的文件:/etc/passwd/etc/shadow

/etc/passwd:用户账号文件,存储了所有用户的基本信息,所有用户对该文件都有读的权限。每行用户信息用 :划分为7个字段。

root:x:0:0:root:/root:/bin/bash
用户名:密码占位符:UID(用户ID):GID(组ID):描述信息:家目录:默认Shell
​
用户名:该账户的用户名。
密码占位符:表示该用户登录需要验证密码。将此处x删除则登录不需要密码.
UID:该账户的用户ID。
GID:该用户的组ID。
GECOS:用户在登录界面的名称。
家目录:存放该用户的相关数据,用户登录系统后的默认工作目录。
默认Shell:用户登录的默认shell程序,会在登录的时候运行/bin/bash。如果不想让用户进行交互式登录,该处是使用/sbin/nologin。
当使用/sbin/nologin只是无法登录系统,并不是该用户无法使用系统。

/etc/shadow:保存用户的密码信息,并且是加密的密码,仅有root用户可以查看和修改。

root:XXXX:19663:0:90:7:::                       \\加密密码使用XXXX来代替
用户名:密码密文:密码最后一次修改时间:密码最短使用时间:密码最长有效时间:警告时间:锁定时间:密码过期时间:预留
​
(1)用户名:该账户的用户名。
(2)密码密文:经过加密后的密码,当此处为`!!`时,表示该用户没有设置过密码。当此处为空时,表示密码被删除了。
​
加密密码格式:机密密码字段中存储了三段信息:所用哈希算法,salt及加密哈希值。每段信息使用`$`分隔。
$6$3xpx4JkWVP9kEdFM$BovuOhOI.6sENI0A3YlEQAtIKroa9NfvH9du12noXyyTtDZfQfYycZfgc/8K/9J2E/Vxg.T/TvK9LIcjSx2YU/
​
(1)密码加密的哈希算法。数字6表示SHA-512哈希算法,1表示MD5哈希算法,5表示SHA-256哈希算法。
(2)用于加密密码的salt。
(3)用户密码的加密哈希值。salt和未加密密码组合并加密,生成加密的密码哈希值。
​
密码验证方式
用户尝试登录时,系统在 /etc/shadow 中查询用户的条目,将用户的 salt 和键入的未加密密码组合,再使用指定的哈希算法加密。如果结果与已加密哈希匹配,则用户键入了正确的密码。如果结果与已加密密码不符,则用户键入了错误的密码,登录尝试也会失败。这种方式允许系统判断用户是否键入了正确的密码,同时又不以用于登录的密码形式来存储密码。
​
(3)密码最后一次修改时间:其设置为自1970年1月1日起的天数。19663表示改账户在1970年1月1号周的第19571天修改了密码。
   root 账号在 1970 年 1 月 1 日之后的第19663天修改的 root 用户密码。
   那么,到底19663代表的是哪一天呢?可以使用如下命令进行换算:
   [root@1060a ~]# date -d '1970-01-01 19663 days'
    2023年 11月 02日 星期四 00:00:00 CST
   可以看到,通过以上命令,即可将其换算为我们习惯的系统日期。
(4)密码最短使用时间:自用户上次修改密码之后可以再次修改的最短时间。该字段用于防止用户频繁的修改密码。
(5)密码最长有效时间:自用户上次修改密码之后,可以不修改密码的最长时间。
(6)警告时间:当用户在截止时间之前登录达到改天数是,会受到密码过期的警告。
(7)锁定时间:在密码过期之后,在该时间内还可以进行登录。一旦超过该时间,账户就会被锁定。
(8)密码过期时间:设定值也是从1970 年 1 月 1 日起的天数。
(9)暂时没有任何用处。

系统中跟用户组相关的配置文件:/etc/group/etc/gshadow

/etc/group:用户组文件,即用户组的所有信息都存放在此文件中。

root:x:0:
用户组名:密码占位符:GID:组内用户
(1)用户组名:用户组的名称。
(2)密码占位符:该字段始终应为 X。
(3)GID:组ID 
(4)组内用户:该字段仅会列出把该组作为补充组的用户。如果用户的主要组是改组的话,不会出现在该字段。

/etc/gshadow:存储用户组密码信息的文件,仅root用户可以读取和修改。

root:::
用户组名:组密码:组管理员:组内成员
(1)用户组名:用户组的名称
(2)组密码:经过加密后的密码
(3)组管理员:组管理员可以使用gpasswd命令进行组管理
(4)组内成员:将组作为附属组的成员

二、用户与组管理

(1)用户管理

创建用户:useradd

作用:用于创建用户。

语法:

useradd [options] username
​
常用选项:
-u          指定用户的UID
useradd -u uid  username
​
eg:
[root@1060a ~]# useradd -u 1100 user1
[root@1060a ~]# id user1
用户id=1100(user1) 组id=1100(user1) 组=1100(user1)
​
-g          指定用户的私有组
useradd -g groupname username
​
eg:
[root@1060a ~]# useradd -g user1 user2
[root@1060a ~]# id user2
用户id=1101(user2) 组id=1100(user1) 组=1100(user1)
​
-G          指定用户的附加组
useradd -G groupname username
​
eg:
[root@1060a ~]# useradd -G user1 user3
[root@1060a ~]# id user3
用户id=1102(user3) 组id=1102(user3) 组=1102(user3),1100(user1)
​
-c          指定用户GECOS信息
useradd -c "字符串" username
​
eg:
[root@1060a ~]# useradd -c "web server" user4
[root@1060a ~]# grep user4 /etc/passwd
user4:x:1103:1103:web server:/home/user4:/bin/bash
在图形化登录界面中,登录用户选项中会看到一个web server的用户
​
-d          指定用户的家目录
useradd -d HOME_DIR username
​
[root@1060a ~]# useradd -d /opt/user5 user5
[root@1060a ~]# cd ~user5
[root@1060a user5]# pwd
/opt/user5
​
-s          指定用户默认是shell环境
useradd -s shell username
​
eg:
[root@1060a ~]# useradd -s /sbin/nologin user7
[root@1060a ~]# grep user7 /etc/passwd
user7:x:1106:1106::/home/user7:/sbin/nologin

当使用useradd创建用户时,本质上完成以下操作

  • 将UID和用户名的映射关系写入到/etc/passwd文件中
  • 将GID和组名的映射关系写入到/etc/group文件中
  • 将密码信息写入/etc/shadow中
  • 将组信息写入/etc/gshadow中
  • 创建用户指定家目录,如果未指定,默认在/home下创建一个同名的目录名
  • 在/var/spool/mail目录下创建与用户同名的文件

密码管理:passwd

作用:设置修改用户密码,创建新用户后需要设置密码,不然无法登录。

语法:

passwd [options] [username]
​
root用户设置密码
[root@1060a ~]# passwd user1
更改用户 user1 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
​
普通用户修改密码
[user1@1060a ~]$ passwd
更改用户 user1 的密码 。
当前 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
​
root用户可以修改所用用户密码,并且不需要验证旧密码以及可以使用弱密码
普通用户只允许修改自己密码,并且要先验证旧密码以及不允许使用弱密码
​
常用选项
-d          删除密码
passwd -d username
​
eg:
[root@1060a ~]# passwd -d user1
清除用户的密码 user1。
passwd: 操作成功
​
-l          锁定账户密码
passwd -l username
​
eg:
[root@1060a ~]# passwd -l user1
锁定用户 user1 的密码 。
passwd: 操作成功
​
-u          解锁用户
passwd -u username
​
eg:
[root@1060a ~]# passwd -u user1
解锁用户 user1 的密码。
passwd: 操作成功
​
密码锁定原理:
锁定密码本质上是在/etc/shadow文件中的加密密码字段前添加两个感叹号,这样密码就更改了。根据上文提到的密码验证过程,用户输入的密码经过加密后,不可能出现'!!$6$'开头的加密结果,与文件当中的加密字符串匹配不上,所以无法登录。
但是root切换用户不需要验证密码,所以root切换锁定的用户可以切换过去。
​
--stdin     从标准输入里面读取密码(不推荐使用)
echo 密码 | passwd --stdin username
​
eg:
[root@1060a ~]# echo uos1.2.3 | passwd --stdin user1
更改用户 user1 的密码 。
passwd:所有的身份验证令牌已经成功更新。

修改用户属性:usermod

作用:用于修改用户属性

语法:

usermod [options] username
​
常用选项:
-l          修改用户名
usermod -l new_name old_name
​
eg:
[root@1060a ~]# id 1100
用户id=1100(user1) 组id=1100(user1) 组=1100(user1)
[root@1060a ~]# usermod -l zhangsan user1
[root@1060a ~]# id 1100
用户id=1100(zhangsan) 组id=1100(user1) 组=1100(user1)
​
-u          修改用户UID
usermod -u uid username
​
eg:
[root@1060a ~]# id user2
用户id=1101(user2) 组id=1100(user1) 组=1100(user1)
[root@1060a ~]# usermod -u 6666 user2
[root@1060a ~]# id user2
用户id=6666(user2) 组id=1100(user1) 组=1100(user1)
​
-g          修改用户的私有组
usermod -g groupname username
​
eg:
[root@1060a ~]# id user3
用户id=1102(user3) 组id=1102(user3) 组=1102(user3),1100(user1)
[root@1060a ~]# usermod -g root user3
[root@1060a ~]# id user3
用户id=1102(user3) 组id=0(root) 组=0(root),1100(user1)
​
-G          修改用户的补充组
usermod -G groupname username
​
eg:
[root@1060a ~]# id user3
用户id=1102(user3) 组id=0(root) 组=0(root),1100(user1),1103(user4)
[root@1060a ~]# usermod -G user3 user3
[root@1060a ~]# id user3
用户id=1102(user3) 组id=0(root) 组=0(root),1102(user3)
注:该方式修改补充组,会直接覆盖之前的所有组,在生产环境不建议使用。
​
-c          修改用户备注
usermod -c 字符串 uername
​
eg:
[root@rhce ~]# grep user1 /etc/passwd
user1:x:1001:1001:mysql user:/home/user1:/bin/bash
[root@rhce ~]# usermod -c user1 user1
[root@rhce ~]# grep user1 /etc/passwd
user1:x:1001:1001:user1:/home/user1:/bin/bash
​
-md     修改用户家目录
usermod -md HOME_DIR username
注:修改用户家目录,需要目录事先存在,如果不存在需要使用-m选项同时创建家目录
​
eg:
[root@1060a ~]# grep user2 /etc/passwd
user2:x:6666:1100::/home/user2:/bin/bash
[root@1060a ~]# usermod -md /opt/user2 user2
[root@1060a ~]# cd ~user2
[root@1060a user2]# pwd
/opt/user2
​
-s          修改用户shell环境
usermod -s shell username
​
eg:
[root@1060a ~]# grep user4 /etc/passwd
user4:x:1103:1103:web server:/home/user4:/bin/bash
[root@1060a ~]# usermod -c "mysql server" user4
[root@1060a ~]# grep user4 /etc/passwd
user4:x:1103:1103:mysql server:/home/user4:/bin/bash

删除用户:userdel

作用:删除用户

语法:

userdel [options] username
​
常用选项:
-r          删除用户的家目录以及目录中的所有文件和邮箱目录
[root@1060a ~]# userdel -r user2
​
注:删除用户使用-r选项会将用户家目录和邮箱目录删除,不使用-r选择则只会删除四个信息文件中映射关系。
由于userdel删除用户时只会删除同名的组,所有当使用usermod修改名称之后,创建用户时同时创建的组就不会删除,下次再次创建这个用户,
会提示该用户组已存在,无法创建用户。需要使用-g选项指定私有组。

密码属性修改:chage

作用:修改用户的密码的相关时间属性

语法:

chage [options] username
​
常用选项:
[root@1060a ~]# chage zhangsan
正在为 zhangsan 修改年龄信息
请输入新值,或直接敲回车键以使用默认值
​
        最小密码年龄 [0]: 
        最大密码年龄 [90]: 
        最近一次密码修改时间 (YYYY-MM-DD) [2023-11-02]: 
        密码过期警告 [7]: 
        密码失效 [-1]: 
        帐户过期时间 (YYYY-MM-DD) [-1]: 

(2)组管理

创建用户组:groupadd

作用:创建用户组

语法:

groupadd [options]... groupname...
​
创建名称为it的用户组
[root@1060a ~]# groupadd it
​
常用选项:
-g          指定GID
groupadd -g gid grupname
​
eg:
[root@1060a ~]# groupadd it
[root@1060a ~]# groupadd -g 2000 ct
[root@1060a ~]# grep ct /etc/group
ct:x:2000:
​

修改用户组:groupmod

作用:修改用户组属性

语法:

groupmod [options] groupname
​
常用选项:
-n          修改名字
groupmod -n new_name old_name
​
eg:
[root@1060a ~]# grep  2000 /etc/group
ct:x:2000:
[root@1060a ~]# groupmod -n ctgroup ct
[root@1060a ~]# grep  2000 /etc/group
ctgroup:x:2000:
​
-g          修改GID
groupmod -g gid groupname
​
eg:
[root@1060a ~]# grep ct /etc/group
ctgroup:x:2000:
[root@1060a ~]# groupmod -g 2023 ctgroup 
[root@1060a ~]# grep ct /etc/group
ctgroup:x:2023:
​

删除用户组:groupdel

作用:删除用户组

语法:

groupdel [options] groupname
​
删除it组
[root@1060a ~]# groupdel it
​

组内用户管理:gpasswd

作用:给组设置密码,或者管理组内成员(该命令组管理员也可以使用)

语法:

gpasswd [option] groupname
​
给ctgroup组设置密码
gpasswd groupname
​
[root@1060a ~]# gpasswd ctgroup 
正在修改 ctgroup 组的密码
新密码:
请重新输入新密码: 
​
登录到ctgroup组
newgrp groupname
注:此处1060a有修改,该命令普通用户没有权限。但是其他发行版本中该命令普通用户可以使用。
​
1060a——eg:
[root@1060a ~]# id
用户id=0(root) 组id=0(root) 组=0(root)
[root@1060a ~]# newgrp ctgroup 
Welcome to 4.19.0-91.82.152.uelc20.x86_64
​
[root@1060a ~]# id
用户id=0(root) 组id=2023(ctgroup) 组=2023(ctgroup),0(root)
​
rhel9——eg:
[user1@rhce ~]$ id
uid=1001(user1) gid=1001(user1) groups=1001(user1) 
[user1@rhce ~]$ newgrp it
Password: 
[user1@rhce ~]$ id
uid=1001(user1) gid=1002(it) groups=1002(it),1001(user1) 
登录到用户组,就是将组临时变成自己的私用组。
​
常用选项:
-A          指定组管理员
gpasswd -A username groupname
​
eg:
[root@1060a ~]# gpasswd -A user3 ctgroup 
[root@1060a ~]# cat /etc/gshadow | grep ctgroup
ctgroup::user3:
​
-a          添加用户到组
gpasswd -a username groupname
​
eg:
[root@1060a ~]# id user4
用户id=1103(user4) 组id=1103(user4) 组=1103(user4)
[root@1060a ~]# gpasswd -a user4 user3
正在将用户“user4”加入到“user3”组中
[root@1060a ~]# id user4
用户id=1103(user4) 组id=1103(user4) 组=1103(user4),1102(user3)
​
-d          将用户从组里删除
gpasswd -d username groupname
​
eg:
[root@1060a ~]# id user4
用户id=1103(user4) 组id=1103(user4) 组=1103(user4),1102(user3)
[root@1060a ~]# gpasswd -d user4 user3
正在将用户“user4”从“user3”组中删除
[root@1060a ~]# id user4
用户id=1103(user4) 组id=1103(user4) 组=1103(user4)
​
-r          删除组密码
gpasswd -r groupname
​
eg:
[root@1060a ~]# gpasswd -r ctgroup

组管理:groupmems

作用:用于组管理(该命令只用root可以使用)

语法

groupmems -a username |-d username |[-g groupname] |-l | -p
​
常用选项:
-l          列出组内所有用户
groupmems -l -g grupname
​
eg:
[root@1060a ~]# groupmems -l -g ctgroup 
user3  user4  user5
​
-a          向组内添加用户
groupmems -a username -g groupname
​
eg:
[root@1060a ~]# groupmems -a zhangsan -g ctgroup 
[root@1060a ~]# groupmems -l -g ctgroup 
user3  user4  user5  zhangsan 
​
-d          删除组内用户
groupmems -d username -g groupname
​
eg:
[root@1060a ~]# groupmems -d zhangsan -g ctgroup 
[root@1060a ~]# groupmems -l -g ctgroup 
user3  user4  user5 
​
-p          清空组内所有用户
groupmems -p -g groupname
​
eg:
[root@1060a ~]# groupmems -l -g ctgroup 
user3  user4  user5 
[root@1060a ~]# groupmems -p -g ctgroup 
[root@1060a ~]# groupmems -l -g ctgroup 
Reply Favorite View the author
All Replies
废物头子
deepin
2023-11-03 02:33
#1

newgrp命令在1060a的帮助文档中显示为用户命令,但是1060a不给权限。而且修改权限后普通用户也登录不上去,现在很好奇是统信修改了这里还是龙蜥修改了这里。smirk

Reply View the author
废物头子
deepin
2023-11-03 17:08
#2

确认了,统信在newgrp命令这个地方改了confused

Reply View the author
yanjuner
Super Moderator
2023-11-03 17:25
#3

专业

点赞

Reply View the author
废物头子
deepin
2023-11-03 17:30
#4

感谢支持

Reply View the author
废物头子
deepin
2023-11-03 17:31
#5

统信改这条命令真的看不懂

Reply View the author
废物头子
deepin
2023-11-03 17:32
#6

把命令权限改成了rwxr--r--,普通用户用不了,把权限该回去,会发现登录有问题。但是在系统的man帮助手册里面这是一条用户命令,这没改彻底啊

Reply View the author
嘟嘟可大魔王
deepin
2023-11-04 02:48
#7

必须点赞

Reply View the author