用户管理
今日思维导图:
Linux中用户的概述
用户指的是能够正常登录Linux或windows系统
与windows用户的区别:
- 支持同一个用户多个设备同时登录
- 支持不同的用户多个设备同时登录
用户的作用
1:系统上的每一个进程(运行的程序)都需要特定的用户运行
2:每一个文件都有特定的用户拥有,所以访问一个文件或目录受到用户的限制
3:进程能够以何种方式访问某一个文件或目录, 与进程所关联的用户有关
查看系统中用户的命令
## 查看指定用户的信息
id:默认情况不加用户名则查看当前登录用户的信息
[root@01:24:27wudidesangege <sub>]\ id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
## 语法:
id 用户名
[root@01:24:51wudidesangege </sub>]\ id wyk
uid=1000(wyk) # UserID:用户id号
gid=1000(wyk) # GroupID:用户组id号
groups=1000(wyk) # 该用户的所有组信息
## 查看进程(每个进程的运行用户)
[root@01:26:56wudidesangege ~]\ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 01:24 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 01:24 ? 00:00:00 [kthreadd]
root 3 2 0 01:24 ? 00:00:00 [kworker/0:0]
系统用户相关的配置文件
## 用户信息配置文件
/etc/passwd
## 用户密码存储文件
/etc/shadow
## 用户组信息配置文件
/etc/group
## 用户组密码存储文件
/etc/gshadow
/etc/passwd
[root@01:28:59wudidesangege ~]\ 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
wyk:x:1000:1000::/home/wyk:/bin/bash
#取出文件内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
wyk:x:1000:1000::/home/wyk:/bin/bash
按:分隔 | 第一列 | 第二列 | 第三列 | 第四列 | 第五列 | 第六列 | 第七列 |
内容 | root | x | 0 | 0 | root | /root | /bin/bash |
作用 | 用户名 | 密码占位符 | Uid | Gid | 描述信息 | 用户家目录 | 用户登陆的shell |
/etc/shadow
## 存放用户密码相关信息文件
[root@01:34:25wudidesangege ~]\ cat /etc/shadow
root:$6$9UytHMhsDyyJ9.1g$TRn0uqVY8TUHFecAjWqZYhpLxCdSvMaFv7PhiUiNyhVB6wu1Sp.ux0z4zzpGcOJ5sugWl/VOJxGuouM.Xjjdo1::0:99999:7:::
bin:*:18353:0:99999:7:::
#以前CentOS6的文件↓
daemon:*:17834:0:99999:7:2:6627567:
以:分隔 | 第一列 | 第二列 | 第三列 | 第四列 | 第五列 | 第六列 | 第七列 | 第八列 | 第九列 |
内容 | daemon | * | 17834 | 0 | 99999 | 7 | 2 | 6627567 | 空 |
作用 | 用户名 | 密码(加密)或者没密码 | 从1970年开始到上一次密码过了多少天 | 密码最少使用多少天,0代表没有限制 | 密码最大使用多少天 | 密码快过期前7天提示要修改密码 | 密码过期后2天强制修改密码 | 用户账户过期时间从1970年开始 | 保留位 |
用户分类(约定、规范CentOS7)
用户UID号 | 系统中含义 |
0 | 超级管理员用户 |
1-200 | 系统用户(系统自己创建的) |
201-999 | 系统用户(可以手动创建) |
1000+ | 普通用户 |
chage命令修改用户信息
#修改时间为2014年08月31日,和图中时间匹配,方便后续验证
[root@01:44:10wudidesangege <sub>]\ date -s '20140831'
Sun Aug 31 00:00:00 CST 2014
[root@00:00:00wudidesangege </sub>]\ date
Sun Aug 31 00:00:06 CST 2014
[root@00:00:53wudidesangege <sub>]\ useradd wyk1
[root@00:02:45wudidesangege </sub>]\ echo "123" |passwd --stdin wyk1
Changing password for user wyk1. #修改用户wyk1的密码。
passwd: all authentication tokens updated successfully. #Passwd:所有认证令牌更新成功。
[root@00:03:07wudidesangege <sub>]\ tail -1 /etc/shadow
wyk1:!!:16312:0:99999:7:::
-d :设置最近一次更改密码时间, 0下次登陆系统强制修改密码
例↓
[root@00:03:58wudidesangege </sub>]\ chage -d "2014-09-01" wyk1
[root@00:10:51wudidesangege <sub>]\ tail -n1 /etc/shadow
wyk1:!!:16314:0:99999:7:::
-m :设置用户两次改变密码之间使用"最小天数"
例↓
[root@00:14:08wudidesangege </sub>]\ chage -m 2 wyk1
[root@00:14:04wudidesangege <sub>]\ tail -n1 /etc/shadow
wyk1:!!:16314:2:99999:7:::
-M :设置用户两次改变密码之间使用"最大天数"
例↓
[root@00:14:08wudidesangege </sub>]\ chage -M 15 wyk1
[root@00:14:04wudidesangege <sub>]\ tail -n1 /etc/shadow
wyk1:!!:16314:2:15:7:::
-W :设置密码更改警告时间 将过期警告天数设为“警告天数”
例↓
[root@00:15:05wudidesangege </sub>]\ chage -W 6 wyk1
[root@00:16:32wudidesangege <sub>]\ tail -n1 /etc/shadow
wyk1:!!:16314:2:15:6:::
-I :设置密码过期天数后, 密码为失效状态
例↓
[root@00:16:34wudidesangege </sub>]\ chage -I 5 wyk1
[root@00:18:03wudidesangege <sub>]\ tail -n1 /etc/shadow
wyk1:!!:16314:2:15:7:5::
-E :设置用户过期时间, 账户失效后无法登陆
例↓
[root@00:18:05wudidesangege </sub>]\ chage -E "2015-08-31" wyk1
[root@00:19:24wudidesangege <sub>]\ tail -n1 /etc/shadow
wyk1:!!:16314:2:15:7:5:16678:
-l :显示用户信息
例↓
[root@00:25:34wudidesangege </sub>]\ chage -l wyk1
Last password change : Sep 01, 2014 #最近一次更改密码时间
Password expires : Sep 16, 2014 #密码过期时间
Password inactive : Sep 21, 2014 #密码失效时间
Account expires : Aug 31, 2015 #用户失效时间
Minimum number of days between password change : 2 #密码最短使用时间
Maximum number of days between password change : 15 #密码最长使用时间
Number of days of warning before password expires : 7 #密码过期前警告天数
## 如何验证,只调整时间为如下进行验证↓
1.验证普通用户是否能修改密码, 不需要调整时间。
2.普通用户登陆系统后, 会提示警告密码还剩多少天过期
[root@00:18:05wudidesangege <sub>]\ date -s "2014-09-12"
3.普通用户登陆系统后, 强制要求修改密码
[root@00:18:05wudidesangege </sub>]\ date -s "2014-09-18"
4.普通用户登陆系统后, 提示账户已过期
[root@00:18:05wudidesangege ~]\ date -s "2014-09-23"
用户操作命令
用户创建
useradd adduser
注意:创建用户在默认不指定组的情况下,会同时创建出跟该用户名相同的组,跟uid相同的gid,除非-g指定组,则不会创建同名组
## 语法
useradd [选项]... 用户名
## 创建用户举例
[root@00:12:40wudidesangege <sub>]\ useradd wyk2
## 选项
-u:创建用户时指定用户的uid
-g:创建用户时指定用户的gid 指定用户组名(该组必须存在)
例↓
[root@00:20:16wudidesangege </sub>]\ useradd wyk3 -u 666 -g root
[root@00:20:50wudidesangege <sub>]\ id wyk3
uid=666(wyk3) gid=0(root) groups=0(root)
-G:创建用户时指定用户的附加组(该组必须存在)
例↓
[root@00:24:36wudidesangege </sub>]\ useradd wyk4 -G root,wyk1
[root@00:28:14wudidesangege <sub>]\ id wyk4
uid=1003(wyk4) gid=1003(wyk4) groups=1003(wyk4),0(root),1001(wyk1)
-c:创建用户时指定用户的描述信息
例↓
[root@00:28:24wudidesangege </sub>]\ useradd wyk5 -c 'yyds'
[root@00:33:15wudidesangege <sub>]\ tail -1 /etc/passwd
wyk5:x:1004:1004:yyds:/home/wyk5:/bin/bash
-d:创建用户时指定用户的家目录(该目录可以不存在,会自动创建)
例↓
[root@00:34:29wudidesangege </sub>]\ useradd wyk6 -d /jml1
[root@00:34:48wudidesangege <sub>]\ tail -1 /etc/passwd
wyk6:x:1005:1005::/jml1:/bin/bash
-M:创建用户时不创建用户的家目录
例↓
[root@00:34:57wudidesangege </sub>]\ useradd wyk7 -M
-s:创建用户时指定用户登录的shell(默认是/bin/bash)
例↓
[root@00:37:13wudidesangege <sub>]\ useradd wyk8 -s /sbin/nologin
[root@00:37:23wudidesangege </sub>]\ tail -1 /etc/passwd
wyk8:x:1008:1008::/home/wyk8:/sbin/nologin
-r:创建用户时指定用户为系统用户
例↓
[root@00:37:33wudidesangege <sub>]\ useradd wyk9 -r
[root@00:39:32wudidesangege </sub>]\ tail -1 /etc/passwd
wyk9:x:665:665::/home/wyk9:/bin/bash
## 报错1:
[root@22:32:29wudidesangege <sub>]\ useradd wyk1 -u 666 -g 666
useradd: group '666' does not exist
# 原因:666这个组不存在,前提,-g必须加入到一个已存在的组
## 报错2:
[root@22:34:43wudidesangege </sub>]\ mkdir /dsb
[root@22:34:54wudidesangege ~]\ useradd hl1 -d /dsb/
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
# 原因:使用-d指定用户的家目录时,家目录不能提前创建
修改用户
usermod modify
## 语法
usermod [选项] 用户名
## 选项
-u:修改用户时指定用户的uid
-g:修改用户时指定用户的gid 指定用户组名(该组必须存在)
-G:修改用户时指定用户的附加组,会覆盖原来的附加组(该组必须存在)
例↓
[root@22:38:33wudidesangege <sub>]\ id wyk2
uid=1002(wyk2) gid=1002(wyk2) groups=1002(wyk2)
[root@22:39:37wudidesangege </sub>]\ usermod wyk2 -G wyk1
[root@22:40:11wudidesangege <sub>]\ id wyk2
uid=1002(wyk2) gid=1002(wyk2) groups=1002(wyk2),1001(wyk1)
-a:修改用户附加组的时候,配合-G追加使用
例↓
[root@22:40:19wudidesangege </sub>]\ id wyk2
uid=1002(wyk2) gid=1002(wyk2) groups=1002(wyk2),1001(wyk1)
[root@22:44:05wudidesangege <sub>]\ usermod wyk2 -aG root
[root@22:44:16wudidesangege </sub>]\ id wyk2
uid=1002(wyk2) gid=1002(wyk2) groups=1002(wyk2),0(root),1001(wyk1)
-c:修改用户时指定用户的描述信息
-m:修改用户时迁移用户的家目录,必须配合-d使用
-d:修改用户时指定用户的家目录(该目录可以不存在,会自动创建)
例↓
[root@22:50:48wudidesangege <sub>]\ usermod wyk2 -m -d /home/zdh
[root@22:54:13wudidesangege </sub>]\ cat /etc/passwd
wyk2:x:1002:1002::/home/zdh:/bin/bash
-M:修改用户时不创建用户的家目录
-s:修改用户时指定用户登录的shell(默认是/bin/bash)
例↓
[root@22:57:09wudidesangege <sub>]\ usermod -s /bin/nologin wyk3
[root@22:58:32wudidesangege </sub>]\ cat /etc/passwd
wyk3:x:666:0::/home/wyk3:/bin/nologin
-r:修改用户时指定用户为系统用户
-l:更改用户登录名
例↓
[root@22:59:30wudidesangege <sub>]\ usermod wyk2 -l wykwd
[root@22:58:32wudidesangege </sub>]\ cat /etc/passwd
wykwd:x:1002:1002::/home/zdh:/bin/bash
-L:锁定用户
-U:解锁用户
## 报错
[root@22:59:30wudidesangege ~]\ usermod wyk3 -l wykddd
usermod: user wyk3 is currently used by process 70107
原因:wyk3用户当前正在被PID为70107进程占用,所以无法修改
删除用户
userdel delete
注意:删除用户,默认情况下,只删除用户本身,其他相关目录文件不会删除
## 语法
userdel [选项]... 用户名
[root@21:53:50wudidesangege <sub>]\ userdel wyk3
## 选项
-r:递归删除,用户所有相关文件
例↓
[root@21:53:50wudidesangege </sub>]\ userdel -r wyk4
## 警告
[root@21:53:50wudidesangege ~]\ useradd wyk3
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
原因:创建用户时,该用户以前创建过,但是在删除时没有加-r选项,没有删干净(用户同样可以创建出来)
记录:以后创建用户的一般就是以下格式
useradd mysql -s /sbin/nologin -M
查看用户其他命令
## 查看当前系统登录了哪些用户
[root@22:07:32wudidesangege <sub>]\ who
#用户 #终端 #登录时间 #从哪里连接过来
root tty1 2022-04-03 21:53
root pts/0 2022-04-03 21:53 (10.0.0.1)
## 查看当前系统登录了哪些用户
[root@22:09:33wudidesangege </sub>]\ w
22:10:27 up 17 min, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 21:53 16:43 0.02s 0.02s -bash
root pts/0 10.0.0.1 21:53 3.00s 0.02s 0.00s w
## 查看当前登录的用户
[root@22:10:27wudidesangege ~]\ whoami
root