Linux基础_用户管理


用户管理

目录
  • 用户管理
    • Linux中用户的概述
    • 用户的作用
    • 查看系统中用户的命令
    • 系统用户相关的配置文件
      • /etc/passwd
      • /etc/shadow
    • 用户分类(约定、规范CentOS7)
    • chage命令修改用户信息
    • 用户操作命令
    • 用户创建
    • 修改用户
    • 删除用户
    • 查看用户其他命令
    • 思维导图

Linux中用户的概述

  • 用户指的是能够正常登录Linux或windows系统
  • linux用户与windows用户的区别:
    • 支持同一个用户多个设备同时登录
    • 支持不同的用户多个设备同时登录

用户的作用

  • 系统上的每一个进程(运行的程序)都需要特定的用户运行

  • 每一个文件都有特定的用户拥有,所以访问一个文件或目录受到用户的限制

  • 进程能够以何种方式访问某一个文件或目录, 与进程所关联的用户有关

查看系统中用户的命令

# 查看指定用户的信息
id:默认情况不加用户名则查看当前登录用户的信息

# 语法:
id 用户名

[root@localhost ~]# id lx01
uid=1001(lx01)             ## UserID:用户id号
gid=1001(lx01)             ## GroupID:用户组id号
groups=1001(lx01)          ## 该用户的所有组信息

# 查看进程(每个进程的运行用户)
[root@localhost ~]# ps -ef

示例:
[root@localhost ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 Apr02 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 Apr02 ?        00:00:00 [kthreadd]
root          3      2  0 Apr02 ?        00:00:02 [ksoftirqd/0]
root          5      2  0 Apr02 ?        00:00:00 [kworker/0:0H]
root          6      2  0 Apr02 ?        00:00:03 [kworker/u256:0]
root          7      2  0 Apr02 ?        00:00:00 [migration/0]


系统用户相关的配置文件

## 用户信息配置文件
/etc/passwd

## 用户密码存储文件
/etc/shadow

## 用户组信息配置文件
/etc/group

## 用户组密码存储文件
/etc/gshadow

/etc/passwd

[root@localhost ~]# cat /etc/passwd
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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
PTYH:x:1000:1000::/home/PTYH:/bin/bash
lx01:x:1001:1001::/home/lx01:/bin/bash
lx02:x:10010:10010::/home/lx02:/bin/bash
lx03:x:10011:10010::/home/lx03:/bin/bash
lx04:x:10012:10012::/home/lx04:/bin/bash

# 文件内容
root:x:0:0:root:/root:/bin/bash
PTYH:x:1000:1000::/home/PTYH:/bin/bash
lx01:x:1001:1001::/home/lx01:/bin/bash
lx02:x:10010:10010::/home/lx02:/bin/bash
第一列 第二列 第三列 第四列 第五列 第六列 第七列
内容 root x 0 0 root /root /bin/bash
作用 用户名 密码 UID gid 描述信息 用户家目录 用户登录的shell

/etc/shadow

# 存放用户密码相关信息文件

[root@localhost ~]# cat /etc/shadow
root:$6$UkY6ENCap2wU5Ab1$ssZI0eNQAJsOEYssZR7pA86BMYJ6vi8jH/sO8idl8xcEgGsgJovTOTj931.d4VsZBC/gR90p0l.PgosW3c2MQ0::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:26627567

lx04:!!:19083:0:99999:7:::

第一列 第二列 第三列 第四列 第五列 第六列 第七列 第八列 第九列
内容 root * !!(没有密码) 19083 0 99999 7 7 6627567
作用 用户名 密码(加秘) 从1970年开始上一次修改密码过了多少天 密码最少使用多少天,0代表没有限制 密码最大使用多少天 密码快过期前7天提示要修改密码 密码过期后2天强制修改密码 用户账户过期时间从1970年开始 保留位

用户分类(约定、规范CentOS7)

用户UID 系统中含义
0 超级管理员用户
1-200 系统用户(系统自己创建的)
201-999 系统用户(可以手动创建)
1000+ 普通用户

chage命令修改用户信息

-d //设置最近一次更改密码时间, 0下次登陆系统强制修改密码
-m //设置用户两次改变密码之间使用"最小天数"
-M //设置用户两次改变密码之间使用"最大天数"
-W //设置密码更改警告时间 将过期警告天数设为“警告天数”
-I //设置密码过期天数后, 密码为失效状态
-E //设置用户过期时间, 账户失效后无法登陆
-l //显示用户信息

//修改时间为2014年08月31日,和图中时间匹配,方便后续验证
[root@localhost ~]# date -s '20140831'
Sun Aug 31 00:00:00 CST 2014
[root@localhost ~]# date
Sun Aug 31 00:00:13 CST 2014
[root@localhost ~]# useadd lx05
-bash: useadd: command not found
[root@localhost ~]# useradd lx05
[root@localhost ~]# echo "123" |passwd --stdin lx05
Changing password for user lx05.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# tail -1 /etc/shadow
lx05:$6$BFqbJwRy$Sm5RxfXnHnmvTY/VZMMFsY2xB/gySaCXetuIJTqIkAREImfHXRrrc0TGzt8xJhqLSOeCfinHLZ9yrhtmeV9xN1:16312:0:99999:7:::

//设置最近一次修改密码时间
[root@localhost ~]# chage -d "2015-05-01" lx05
[root@localhost ~]# tail -n1 /etc/shadow
lx05:$6$BFqbJwRy$Sm5RxfXnHnmvTY/VZMMFsY2xB/gySaCXetuIJTqIkAREImfHXRrrc0TGzt8xJhqLSOeCfinHLZ9yrhtmeV9xN1:16556:0:99999:7:::

//设置最短使用密码时间
[root@localhost ~]# chage -m 2 lx05
[root@localhost ~]# tail -n1 /etc/shadow
lx05:$6$BFqbJwRy$Sm5RxfXnHnmvTY/VZMMFsY2xB/gySaCXetuIJTqIkAREImfHXRrrc0TGzt8xJhqLSOeCfinHLZ9yrhtmeV9xN1:16556:2:99999:7:::

//设置密码最长使用时间
[root@localhost ~]# chage -M 10 lx05
[root@localhost ~]# tail -n1 /etc/shadow
lx05:$6$BFqbJwRy$Sm5RxfXnHnmvTY/VZMMFsY2xB/gySaCXetuIJTqIkAREImfHXRrrc0TGzt8xJhqLSOeCfinHLZ9yrhtmeV9xN1:16556:2:10:7:::

//设置密码警告时间
[root@localhost ~]# chage -W 6 lx05
[root@localhost ~]# tail -n1 /etc/shadow
lx05:$6$BFqbJwRy$Sm5RxfXnHnmvTY/VZMMFsY2xB/gySaCXetuIJTqIkAREImfHXRrrc0TGzt8xJhqLSOeCfinHLZ9yrhtmeV9xN1:16556:2:10:6:::

[root@localhost ~]# chage -W 8 lx05
[root@localhost ~]# tail -n1 /etc/shadow
lx05:$6$BFqbJwRy$Sm5RxfXnHnmvTY/VZMMFsY2xB/gySaCXetuIJTqIkAREImfHXRrrc0TGzt8xJhqLSOeCfinHLZ9yrhtmeV9xN1:16556:2:10:8:::

//设置密码过期时间
[root@localhost ~]# chage -I 5 lx05
[root@localhost ~]# tail -n1 /etc/shadow
lx05:$6$BFqbJwRy$Sm5RxfXnHnmvTY/VZMMFsY2xB/gySaCXetuIJTqIkAREImfHXRrrc0TGzt8xJhqLSOeCfinHLZ9yrhtmeV9xN1:16556:2:10:8:5::

//设置用户过期时间
[root@localhost ~]#  chage -E "2015-08-31" lx05
[root@localhost ~]# tail -n1 /etc/shadow
lx05:$6$BFqbJwRy$Sm5RxfXnHnmvTY/VZMMFsY2xB/gySaCXetuIJTqIkAREImfHXRrrc0TGzt8xJhqLSOeCfinHLZ9yrhtmeV9xN1:16556:2:10:8:5:16678:


[root@localhost ~]# chage -l lx05
Last password change					: May 01, 2015        //最近一次更改密码时间
Password expires					: May 11, 2015            //密码过期时间
Password inactive					: May 16, 2015            //密码失效时间
Account expires						: Aug 31, 2015           //用户失效时间
Minimum number of days between password change		: 2       //密码最短使用时间
Maximum number of days between password change		: 10      //密码最长使用时间
Number of days of warning before password expires	: 8       //密码过期前警告天数

//如何验证,只调整时间为如下进行验证:

1.验证普通用户是否能修改密码, 不需要调整时间。

2.普通用户登陆系统后, 会提示警告密码还剩多少天过期
[root@localhost ~]# date -s "2015-05-09"

3.普通用户登陆系统后, 强制要求修改密码
[root@localhost ~]# date -s "2015-05-13"

4.普通用户登陆系统后, 提示账户已过期
[root@localhost ~]# date -s "2015-09-23"

用户操作命令

用户创建

# 命令:
useradd adduser

# 注意:创建用户在默认不指定组的情况下,会同时创建出跟该用户名相同的组,跟uid相同的gid,除非-g指定组,则不会创建同名组

# 语法
useradd   [选项]... 用户名

# 选项
-u:创建用户时指定用户的uid
-g:创建用户时指定用户的gid 指定用户组名(该组必须存在)
-G:创建用户时指定用户的附加组(该组必须存在)
-c:创建用户时指定用户的描述信息
-d:创建用户时指定用户的家目录(该目录可以不存在,会自动创建)
    使用-d创建用户的家目录时,家目录不能提前创建
-M:创建用户时不创建用户的家目录
-s:创建用户时指定用户登录的shell(默认是/bin/bash)
-r:创建用户时指定用户为系统用户

# 创建用户举例
[root@localhost ~]# useradd lx01

# -u -g
[root@localhost ~]# useradd lx02 -u 10010
[root@localhost ~]# id lx02
uid=10010(lx02) gid=10010(lx02) groups=10010(lx02)
[root@localhost ~]# useradd lx03 -u 10011 -g lx02
[root@localhost ~]# id lx03
uid=10011(lx03) gid=10010(lx02) groups=10010(lx02)

# -G
[root@localhost ~]# useradd lx04 -u 10012 -G lx01
[root@localhost ~]# id lx04
uid=10012(lx04) gid=10012(lx04) groups=10012(lx04),1001(lx01)
[root@localhost ~]# id lx01
uid=1001(lx01) gid=1001(lx01) groups=1001(lx01)

# -c
[root@localhost ~]# useradd lx06 -c 'ceshimiaoshu'
[root@localhost ~]# id lx06
uid=10014(lx06) gid=10014(lx06) groups=10014(lx06)
[root@localhost ~]# cat /etc/passwd
lx06:x:10014:10014:ceshimiaoshu:/home/lx06:/bin/bash

# -d
[root@localhost ~]# useradd lx07 -d /lx
[root@localhost ~]# cat /etc/passwd
lx07:x:10015:10015::/lx:/bin/bash

# -M
[root@localhost ~]# useradd lx08 -M
[root@localhost ~]# cat /etc/passwd
lx08:x:10016:10016::/home/lx08:/bin/bash
[root@localhost ~]# ll /home
total 0
drwx------  2 lx01 lx01  62 Apr  1  2022 lx01
drwx------  2 lx02 lx02  62 Apr  1  2022 lx02
drwx------  2 lx03 lx02  62 Apr  1  2022 lx03
drwx------  2 lx04 lx04  62 Apr  1  2022 lx04
drwx------  2 lx05 lx05  62 Aug 31 00:01 lx05
drwx------  2 lx06 lx06  62 Aug 31 01:28 lx06
drwxr-xr-x. 3 root root  70 Mar 21  2022 oldboy
drwx------. 4 PTYH PTYH 108 Mar 27  2022 PTYH
drwxr-xr-x. 4 root root  32 Mar 21  2022 zls

# -s
[root@localhost ~]# useradd lx09 -s /sbin/nologin

# -r
[root@localhost ~]# useradd lx09 -r
[root@localhost ~]# cat /etc/passwd
lx09:x:998:996::/home/lx09:/bin/bash


# 报错:
[root@localhost ~]# mkdir /lx
[root@localhost ~]# useradd lx10 -d /lx/
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
原因:使用-d指定用户的家目录时,家目录不能提前创建


## 记录:以后使用过程当中用的比较多的情况如下
##  useradd mysql -s /sbin/nologin -M

修改用户

# 命令:
usermod   modify

# 语法
usermod   [选项]    用户名

# 选项
-u:修改用户时指定用户的uid
-g:修改用户时指定用户的gid 指定用户组名(该组必须存在)
-G:修改用户时指定用户的附加组,会覆盖原来的附加组(该组必须存在)
-a:修改用户附加组的时候,配合-G追加使用
-c:修改用户时指定用户的描述信息
-d:修改用户时指定用户的家目录(该目录可以不存在,会自动创建)
-m:修改用户时迁移用户的家目录,必须配合-d使用
-s:修改用户时指定用户登录的shell(默认是/bin/bash)

=========
-l:更改用户登录名
-L:锁定用户
-U:解锁用户


# 示例

# -G
[root@localhost ~]# id lx04
uid=10012(lx04) gid=10012(lx04) groups=10012(lx04),1001(lx01)
[root@localhost ~]# usermod lx04 -G lx02
[root@localhost ~]# id lx04
uid=10012(lx04) gid=10012(lx04) groups=10012(lx04),10010(lx02)

# -aG
[root@localhost ~]# id lx04
uid=10012(lx04) gid=10012(lx04) groups=10012(lx04),10010(lx02)
[root@localhost ~]# usermod lx04 -aG lx06
[root@localhost ~]# id lx04
uid=10012(lx04) gid=10012(lx04) groups=10012(lx04),10010(lx02),10014(lx06)

# -md
[root@localhost ~]# usermod lx01 -m -d /home/lx11
[root@localhost ~]# cat /etc/passwd
lx01:x:1001:1001::/home/lx11:/bin/bash

# -s
[root@localhost ~]# usermod lx09 -s /sbin/nologin

# -l
[root@localhost ~]# usermod lx09 -l lx12
[root@localhost ~]# id lx12
uid=998(lx12) gid=996(lx09) groups=996(lx09


## 报错:
## 报错
[root@localhost ~]# usermod lxl3 -l hl38
usermod: user lxl3 is currently used by process 70107
原因:lxl3用户当前正在被PID为70107进程占用,所以无法修改

删除用户

# 命令:
userdel        delete

## 注意:删除用户,默认情况下,只删除用户本身,其他相关目录文件不会删除

# 语法
userdel [选项]... 用户名

# 选项
-r:递归删除,用户所有相关文件

# 举例
[root@localhost ~]# userdel -r lx12

# 警告
[root@localhost ~]# useradd test
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists

原因:创建用户时,该用户以前创建过,但是在删除时没有加-r选项,没有删干净(用户同样可以创建出来)

查看用户其他命令

# 查看当前系统登录了哪些用户
[root@localhost ~]# who

[root@localhost ~]# who
#用户     #终端         #登录时间          #从哪里连接过来
root     pts/0        2022-04-03 11:00 (10.0.0.1)
root     pts/1        2022-04-03 11:15 (10.0.0.1)


# 查看当前系统登录了哪些用户
[root@localhost ~]# w
 03:36:34 up 1 day,  3:46,  1 user,  load average: 0.01, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    10.0.0.1         11:15     ?     0.21s  0.00s w


# 查看当前登录的用户
whoami
[root@localhost ~]# whoami
root

思维导图