账户及组的概念**用户:**创建账户及组
useraddgroupaddid 删除账户及组
userdelgroupdel 修改账户及组
passwdgpasswdnewgrpusermodgroupmod 用户身份切换
susudo 账户与组文件解析
账户信息文件账户密码文件组账户信息文件组账户密码文件
账户及组的概念
Linux系统对账户与组的管理是通过ID号来实现的,我们在登陆系统时,输入用户名与对应的密码,后台系统会将用户名转化为ID号后在判断该账户是否存在,并对比密码是否匹配
Linux中,用户ID号被称为UID,组ID称为GID
1~499之间的ID号系统会预留下来,这样我们创建的普通用户ID号会从500开始算起
Linux的组有基本组与附加组之分,一个用户只可以加入一个基本组中,但可以同时加入多个附加组,创建用户时,系统默认会自动创建同名的组,并设置用户加入该基本组中
用户:超级用户:UID为0,GID也为0;root用户
系统用户:UID为201-999;用来管理和运行服务,系统用户的shell为/sbin/nologin,不让该用户登录
**一般用户:**UID为1000-60000;添加一般用户时,系统默认为该用户创建主目录和邮箱(/home/用户名)(/var/mail/用户名)
创建账户及组 useradd
描述:创建新的linux账户
语法:useradd [选项] 用户名称
| useradd | [选项] | 用户名 | 说明 |
|---|---|---|---|
| -c | 设置账户描述信息,一般为账户全称 | ||
| -d | 设置账户家目录,默认为/home/用户名 | ||
| -e | 设置账户的失效日期,格式为 YYYY-MM-DD | ||
| -g | 设置账户的基本组 | ||
| -G | 设置账户的附加组,多个附加组中间用逗号隔开 | ||
| -M | 不创建账户家目录,一般与-s结合使用 | ||
| -s | 设置账户的登陆Shell,默认为bash | ||
| -u UID | 指定账户UID |
#创建普通账户redhat [root@rhel8-3 ~]# useradd redhat #创建无法登陆系统且没有家目录的用户zhangsan [root@rhel8-3 ~]# useradd -s /sbin/nologin -M zhangsan #创建系统账户名称为admin,全名为 administrator,账户家目录为/home/admin ,账户失效日期为 2020年9月15日,账户基本组为root ,附加组为 bin,adm,mail [root@rhel8-3 ~]# useradd -c administrator -d /home/admin -e 2020-09-15 -g root -G bin,adm,mail admingroupadd
描述:创建组账户
用法:groupadd [选项] 组名称
| groupadd | [选项] | 组号 | 说明 |
|---|---|---|---|
| -g | 设置组ID号 |
[root@rhel8-3 ~]# groupadd tom #创建tom组 [root@rhel8-3 ~]# groupadd -g 1001 jerry #创建GID为1001的组jerryid
描述:显示账户及组信息
语法:id 用户名
[root@rhel8-3 ~]# id redhat uid=1000(redhat) gid=1000(redhat) 组=1000(redhat) [root@rhel8-3 ~]# id root uid=0(root) gid=0(root) 组=0(root)删除账户及组 userdel
描述:删除账户及相关文件
语法:userdel [选项] 账户名称
选项:
-r 删除账户及相关文件(家目录)
[root@rhel8-3 ~]# userdel tom #删除账户tom,但是账户的文件不删除 [root@rhel8-3 ~]# userdel -r tom #删除账户tom,并删除相应的家目录groupdel
描述:删除组账户
语法:groupdel 组名
[root@rhel8-3 ~]# groupdel jerry #删除组jerry修改账户及组 passwd
描述:更新账户认证信息
用法:passwd [选项] [账户名称]
| passwd | [选项] | [账户名称] | 说明 |
|---|---|---|---|
| 修改当前用户的密码 | |||
| 用户 | 修改用户密码 | ||
| -d | 用户 | 快速清空账户密码,仅root可以使用此选项 | |
| -l | 用户 | 锁定账户,仅root可以使用此选项 | |
| -u | 用户 | 解锁账户 | |
| --stdin | 从文件或管道读取密码 |
[root@rhel8-3 ~]# passwd #修改当前账户密码 [root@rhel8-3 ~]# passwd tom #修改tom的密码 [root@rhel8-3 ~]# passwd -I tom #锁定账户tom [root@rhel8-3 ~]# passwd -u tom #解锁账户tom [root@rhel8-3 ~]# passwd -d tom #清空账户tom的密码 (无密码可登陆系统) [root@rhel8-3 ~]# echo "123456" | passwd --stdin tom #设置tom的密码为123456gpasswd
描述:修改组密码
用法:gpasswd [选项] [组名]
| gpasswd | [选项] | 组名 | 说明 |
|---|---|---|---|
| 组名 | 给组添加密码 | ||
| -r | 组名 | 删除组密码 | |
| -a | 组名 | 添加用户到组 | |
| -d | 组名 | 将指定用户移出本组(从附加组移除) | |
| -M | 组名 | 设置组成员列表 | |
| -A | 组名 | 指定组管理员为哪个用户 |
描述:登陆一个新组
用法:newgrp [组名]
退出登录的组:exit
usermod
描述:修改账户信息
语法:usermod [选项] 账户名称
| usermod | [选项] | 用户名 | 描述 |
|---|---|---|---|
| -d | 用户名 | 修改账户家目录 | |
| -e | 用户名 | 修改账户失效日期 | |
| -g | 用户名 | 修改账户所属基本组 | |
| -G | 用户名 | 修改账户所属附加组 | |
| -s | 用户名 | 修改账户登陆shell | |
| -u | 用户名 | 修改账户UID |
[root@rhel8-3 ~]# usermod -d /home/tomcat tom #修改tom的家目录,/home/tomcat目录必须存在 [root@rhel8-3 ~]# usermod -s /bin/bash zhangsan #修改zhangsan登陆shell为bash [root@rhel8-3 ~]# usermod -s /bin/nolongin zhangsan #修改zhangsan为不可登陆 [root@rhel8-3 ~]# usermod -u 1004 tom #修改tom的UID为1004groupmod
描述:修改组信息
语法:groupmod -n 新组名 -g gid 原组名
选项:
-n 指定新组名
-g 修改gid信息
用户身份切换 su
**描述:**切换用户身份的命令。
**语法:**su [选项] [-c 命令] [username]
| su | [选项] | 说明 |
|---|---|---|
| 切换用户后,使用的是root的环境变量 不加用户,代表切换到root | ||
| - | 切换用户后,使用的是root的环境变量 不加用户,代表切换到root | |
| -l | 与-类似,也是login-shell的方式 不加用户,代表切换到root | |
| -m | -m与-p是一样的,表示使用目前的环境变量设置,而不读取新用户的配置文件 | |
| -c | 仅进行一次命令,所以-c后面可以加上命令 |
#切换到m用户 [root@localhost ~]# su m #切换到m用户 [root@localhost ~]# su - m [m@bogon root]$ su root -c ls /root
su命令的缺点
普通用户必须知道root密码才可以切换到root,这样root密码就泄露了使用su命令切换身份,无法对切换后的身份做精细的控制 sudo
通过sudo命令,可以将超级管理员的命令授权给普通用户
sudo命令相对于su命令来说,在系统用户的分权管理方面进步了很多,从而使系统的安全性方面加强了很多。
$ vim /etc/sudoers## Next comes the main part: which users can run what software on## which machines (the sudoers file can be shared between multiple## systems).## Syntax:#### user MACHINE=COMMANDS#### The COMMANDS section may have other options added to it.#### Allow root to run any commands anywhere#root代表的用户 ALL代表主机=(ALL)以什么身份运行 要执行的命令 root ALL=(ALL) ALL redhat ALL=(ALL) /usr/sbin/useradd xiaohong ALL=(ALL) /usr/sbin/userdel # %用户组 机器=(授权使用哪个角色的权限) ALL %redhat ALL=(ALL) /usr/sbin/userdel
sodu useradd xiaobai
参数代表含义:
1、用户账号:系统哪个账号可以使用sudo这个命令。默认为root用户。
2、登录者的来源主机名:这个账号由哪台主机连接到本地Linux主机。默认值root可来自任何一台网络主机。
3、可切换的身份:这个账号可以切换成什么身份来执行后续的命令。默认root可以切换成任何人。
4、可执行的命令:这个命令最好使用绝对路径编写。默认root可以切换任何身份且进行任何命令。
ALL是关键字,代表任何身份、主机或命令。
账户与组文件解析 账户信息文件账户信息被保存在/etc/passwd文件中,通过命令 cat /etc/passwd 查看文件内容如下:
[root@rhel8-3 ~]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin...省略...sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
文件以冒号为分隔符
第一列 root 为账户名称,第二列为密码占位符
第二列 x 表示该账户需要密码才可以登陆,为空时,账户无需密码即可登陆
第三列 0 为账户UID
第四列 0 为GID
第五列 root 为账户附加基本信息,一般存储账户名全称、联系方式等信息
第六列 /root 为账户家目录位置
第七列 /bin/bash 为账户登陆shell,/bin/bash为可登陆系统shell,/sbin/nologin表示账户无法登陆系统
账户密码文件账户密码信息被保存在 /etc/shadow文件中,通过命令cat /etc/shadow 查看文件内容如下:
[root@rhel8-3 ~]# cat /etc/shadowroot:$6$y47BIosYvWJMDneR$/TFwVTqJkJvYAYvaPlS2.x0g9KLeMH36Ql25sPO0NMLy5yHXmG5gRn7yLgVKsdXfy09e3rH/xmgZ0Re5XzkoS.:18519:0:99999:7:::bin:*:17784:0:99999:7:::...中间部分省略...apache:!!:18508::::::saslauth:!!:18508::::::redhat:!!:18519:0:99999:7:::admin:!!:18519:0:99999:7::18520:[root@rhel8-3 ~]#
文件以冒号为分隔符
第一列 账户名称
第二列 为密码(账户未设置密码时为 !!,设置密码后加密显示)
第三列 为上次修改密码的时间距离1970年1月1日有多少天
第四列 为密码最短有效天数(密码至少使用多少天,0代表无限制)
第五列 为密码最长有效天数(默认99999可以理解为用不过期)
第六列 为过期前的告警天数(默认过期前提前7天警告,但进去告警日期后仍可以使用旧密码登陆系统)
第七列 为密码过期后的宽限天数(密码过期后,预留几天给账户修改密码,此时已经无法使用旧密码登陆系统)
第八列 为账户失效日期(从1970年01月01日起多少天后账户失效)
第九列 暂时保留未使用
组账户信息文件组账户信息被保存在/etc/group 文件中,通过命令cat /etc/group 查看文件内容如下:
[root@rhel8-3 ~]# cat /etc/group root:x:0: bin:x:1:admin daemon:x:2: sys:x:3: games:x:20: ...内容省略... apache:x:48: saslauth:x:76: redhat:x:1000:
文件以冒号为分隔符
第一列 组账户名称
第二列 为密码占位符
第三列 为GID
第四列 为组成员信息(注意,这个仅显示附加,基本成员不显示)
组账户密码文件组账户密码信息被保存在/etc/gshadow 文件中,通过命令 cat /etc/gshadow 查看内容如下
[root@rhel8-3 ~]# cat /etc/gshadow root::: bin:::admin daemon::: sys::: ...省略中间内容... saslauth:!:: redhat:!::
文件以冒号为分隔符
第一列 为组账户名称
第二列 为组密码(一般为组管理员密码)
第三列 为组管理员
第四列 为组成员(与/etc/group 第四列相同)
通过
[root@rhel8-3 ~]# gpasswd admin #设置组密码[root@rhel8-3 ~]# gpasswd -A admin admin #将admin账户设置为组admin的管理员



