用户管理
基本概述
用户,又称使用者,是指使用电脑或网络服务的人,通常拥有一个用户账号,并以用户名识别。
正常登录Linux或Windows系统,本质都是登陆系统,但是Linux支持同一时间多个用户同时登陆windows默认不支持,但是修改组策略的情况下也是可以多用户登录的。
Linux下的用户的作用
- 系统上的每一个进程(运行的程序),都需要一个特定的用户运行
- 通常在公司是使用普通用户管理服务器,因为root权限过大,容易造成故障。
- 每一个文件都有特定的用户拥有,所以访问一个文件或目录受到用户的限制
- 进程能够以何种方式访问某一个文件或目录,与进程所关联的用户有关
查看系统中所存在的用户
1.查看当前登录的用户信息
[root@localhost ~]# id #查看当前登录用户信息
uid=0(root) gid=0(root) groups=0(root)
UserID:用户id号|GroupID:用户组ID号|该用户的所有组信息
2.每一个进程都会由一个用户身份运行
[root@localhost ~]# ps aux|less #下面结果的第一列就是用户名称
root 33782 0.0 0.0 0 0 ? R 02:46 0:00 [kworker/u256:0]
root 35637 0.0 0.0 0 0 ? R 05:11 0:03 [kworker/0:2]
系统用户相关的配置文件
用户信息配置文件
/etc/passwd
用户密码存储文件
/etc/shadow
用户组信息配置文件
/etc/group
用户组密码存储文件
/etc/gshadow
Linux系统会将用户的信息存放在/etc/passwd,记录了用户的信息,但没有密码信息,密码被存放在/etc/shadow中。
1./etc/passwd 配置文件解释如下图
2./etc/shadow 配置文件解释如下图
用户分类(约定、规范CentOS7)
用户UID | 系统中含义 |
---|---|
0 | 超级管理员用户 |
1-200 | 系统用户,用来运行系统自带的进程,默认已创建 |
201~999 | 系统用户,用来运行用户安装的程序,所以此类用户无需登录系统 |
1000+ | 普通用户,正常可以登陆系统的用户权限比较小能执行的任务有限 |
chage命令修改用户信息
-d 设置最近一次更改密码时间, 0下次登陆系统强制修改密码
-m 设置用户两次改变密码之间使用"最小天数"12
-M 设置用户两次改变密码之间使用"最大天数"
-W 设置密码更改警告时间将过期警告天数设为“警告天数”
-I 设置密码过期天数后, 密码为失效状态
-E 设置用户过期时间, 账户失效后无法登陆
-l 显示用户信息
-d 设置最近一次更改密码时间, 0下次登陆系统强制修改密码
-m:设置用户两次改变密码之间使用的最小天数
-M :设置用户两次改变密码之间使用最大天数
-W:设置密码更改警告天数,将过期天数设为警告天数
-I:设置密码过期天数后密码为失效状态
-E:设置用户过期时间,账户失效后无法登录
-l:显示用户信息
用户操作命令
用户创建
useradd adduser
注意:创建用户在默认不指定组的情况下,会同时创建出跟该用户名相同的组,跟uid相同的gid,除非-g指定组,则不会创建同名组
## 语法
useradd [选项]... 用户名
## 选项
-u:创建用户时指定用户的uid
-g:创建用户时指定用户的gid 指定用户组名(该组必须存在)
-G:创建用户时指定用户的附加组(该组必须存在)
-c:创建用户时指定用户的描述信息
-d:创建用户时指定用户的家目录(该目录可以不存在,会自动创建)
-m:修改用户时迁移用户的家目录,必须配合-d使用
-M:创建用户时不创建用户的家目录
-s:创建用户时指定用户登录的shell(默认是/bin/bash)
-r:创建用户时指定用户为系统用户
创建用户
[root@localhost ~]# useradd lw
-u -g创建用户时指定用户的gid 指定用户组名(该组必须存在)
[root@localhost ~]# useradd lw1 -u 666 -g root
[root@localhost ~]# id lw1uid=666(zls1) gid=0(root) groups=0(root)
-G:创建用户时指定用户的附加组(该组必须存在)
[root@localhost ~]# useradd lw -G root,zhujiao
[root@localhost ~]# id lw
uid=1001(lw) gid=1001(lw) groups=1001(lw),0(root),1000(zhujiao)[root@localhost ~]# useradd lw1 -g zhujiao
[root@localhost ~]# id lw1
uid=1002(lw1) gid=1000(zhujiao) groups=1000(zhujiao
修改用户
usermod modify
## 语法
usermod [选项] 用户名
## 选项
-u:修改用户时指定用户的uid
-g:修改用户时指定用户的gid 指定用户组名(该组必须存在)
-G:修改用户时指定用户的附加组,会覆盖原来的附加组(该组必须存在)
-a:修改用户附加组的时候,配合-a追加使用
-c:修改用户时指定用户的描述信息
-d:修改用户时指定用户的家目录(该目录可以不存在,会自动创建)
-M:修改用户时不创建用户的家目录
-s:修改用户时指定用户登录的shell(默认是/bin/bash)
-r:修改用户时指定用户为系统用户
---------------------------------------
-l:更改用户登录名
-L:锁定用户
-U:解锁用
## 报错
[root@localhost ~]# usermod lw -l lw1
usermod: user lw is currently used by process 70107
原因:lw用户当前正在被PID为70107进程占用,所以无法修改
删除用户
userdel delete
注意:删除用户,默认情况下,只删除用户本身,其他相关目录文件不会删除
## 语法
userdel [选项]... 用户名
## 选项
-r:递归删除,用户所有相关文件
## 警告
[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选项,没有删干净(用户同样可以创建出来)
记录:useradd mysql -s /sbin/nologin -M
查看用户其他命令
## 查看当前系统登录了哪些用户
[root@localhost ~]# who
#用户 #终端#登录时间 #从哪里连接过来
root tty1 2022-03-1416:47
root pts/0 2022-04-0111:00 (10.0.0.1)
root pts/1 2022-03-2312:22 (10.0.0.1)
root pts/2 2022-03-2109:16 (10.0.0.1)
root pts/3 2022-03-2312:22 (10.0.0.1)
lw pts/4 2022-04-0111:13 (10.0.0.1)
lw2 pts/5 2022-04-0112:00 (10.0.0.1)
## 查看当前系统有那些登录的用户详细信息
[root@localhost ~]# w
12:09:03 up 11 days, 5:20, 6 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 11:00 7.00s 0.77s 0.09s tail -f/var/log/messages
root pts/1 10.0.0.1 23Mar22 7.00s 0.51s 0.00s w
root pts/2 10.0.0.1 21Mar22 8days 0.04s 0.04s -bash
root pts/3 10.0.0.1 23Mar22 8days 0.06s 0.06s -bash
lw pts/4 10.0.0.1 11:13 54:15 0.08s 0.08s -bash
lw2 pts/5 10.0.0.1 12:00 8:29 0.06s 0.06s -bash
## 查看当前登录的用户
[root@localhost ~]# whoami
root
用户的创建流程
1./etc/login.defs 是设置用户帐号限制的文件。该文件里的配置对root用户无效。/etc/login.defs 文件用于在Linux创建用户时,对用户的一些基本属性做默认设置,例如指定用户 UID 和 GID 的范围,用户的过期时间,密码的最大长度,等等。
2.需要注意的是,该文件的用户默认配置对 root 用户无效。并且,当此文件中的配置与 /etc/passwd 和 /etc/shadow 文件中的用户信息有冲突时,系统会以/etc/passwd 和 /etc/shadow 为准。
3.如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs
查看配置文件
[root@localhost ~]# less /etc/login.defs
拓展:
过滤空行: # grep -Ev '^#|^$' /etc/login.d
设置项 | 含义 |
---|---|
MAIL_DIR/var/spool/mai | 指定创建用户时,默认邮件文件位置 |
PASS_MAX_DAYS 99999 | 创建用户默认密码最大使用天数 |
PASS_MIN_DAYS 0 | 创建用户默认密码最少使用天数(0代表无限) |
PASS_MIN_LEN 5 | 密码最短位数 |
PASS_WARN_AGE 7 | 密码过期前七天警告 |
UID_MIN 1000 | 普通用户最小UID是1000 |
UID_MAX 60000 | 普通用户最大UID是60000 |
SYS_UID_MIN 201 | 系统用户最小UID是201 |
SYS_UID_MAX 999 | 系统用户最大UID是999 |
GID_MIN 1000 | 普通用户最小GID是1000 |
GID_MAX 60000 | 普通用户最大GID是60000 |
SYS_GID_MIN 201 | 系统用户,最小GID是201 |
SYS_GID_MAX 999 | 系统用户,最大GID是999 |
CREATE_HOME yes | 默认创建用户的家目录 |
UMASK 077 | UMASK 077 指定用户创建家目录的默认权限 |
USERGROUPS_ENAB yes | 创建用户时,如果不用-g指定组,那么会默认创建出该用户的同名组 |
ENCRYPT_METHOD SHA5 | 用户密码的加密方式 SHA51 |
查看useradd配置文件
# cat /etc/default/usera
如果login.defs文件中的USERGROUPS_ENAB yes是no,该行配置才会生效
如果创建用户不创建同名组,默认会将该用户加入GID为100的系统组中(users)GROUP=100
# 指定用户默认创建家目录的位置
HOME=/home
# 用户账户停权 -1永远不过期
INACTIVE=-1
# 账号终止时间的设置,不设置不终止
EXPIRE=
# 用户默认创建登录
shellSHELL=/bin/bash
# 该目录下存放的是,用户的环境变量初始配置文件
SKEL=/etc/skel
# 创建用户的同时,创建该用户的邮箱文件
CREATE_MAIL_SPOOL=yes
用户的环境变量初始配置文件
当使用useradd创建用户时,创建的用户家目录下会存在.bash_*环境变量相关的文件,这些环境变量默认文件在/etc/skel目录中拷贝。这个默认拷贝环境变量位置是由/etc/defaults/useradd配置文件中定义
案例:
#在当前用户的家目录下,想要删除所有文件,执行了如下命令
[root@db04 ~]# rm -fr .*
#结果再次登录时
-bash-4.1#
#解决办法
-bash-4.1# cp /etc/skel/.bash* .
#再次登录 即可恢复
[root@db04 ~]#
用户密码管理
创建完账户后,默认是没有设置密码的,所以该账户是没有办法登陆操作系统。只有使用passwd设置好密码后方可登录系统。
注意:
- 普通用户只能更改自己的密码(密码必须满足8位字符)
- 管理员用户能更改任何人的密码(密码长度无限制)
语法:
passwd [用户名]
如果不加用户名,则修改当前登录用户的密码,只有root用户能在passwd命令后加用户名
## 免交互方式
stdin:标准输入
stdout:标准输出
stderr:错误输出
[root@localhost ~]# echo '123@qqdianCOM'|passwd --stdin zls1001Changing password for user zls1001.passwd: all authentication tokens updated successf
随机密码生成
tee:管道命令
-a:append 追加
[root@localhost ~]# echo $RANDOM|tee -a /tmp/pass.txt |passwd --stdin zls
Linux用户权限
为什么Linux目录默认权限755,而文件默认权限为644呢,这是因为Linux权限掩码umask导致。
每个Linux终端都拥有一个umask属性,umask熟悉可以用来确定新建文件、目录的默认权限,默认系统权限掩码为022。在系统中每创建一个文件或者目录,文件默认权限是666,而目录权限则为777,权限对外开放比较大,所以设置了权限掩码之后,默认的文件和目录权限减去umask值才是真实的文件和目录的权限。
对应目录权限为:777-022=755;
对应文件权限为:666-022=644;
执行umask命令可以查看当前默认的掩码,umask -S 023可以设置默认的权限掩码。
Linux权限可以将rwx用二进制来表示,其中有权限用1表示,没有权限用0表示;
Linux权限用二进制显示如下:
rwx=111
r-x=101
rw-=110
r--=100
依次类推,转化为十进制,对应十进制结果显示如下:
rwx=111=4+2+1=7
r-x=101=4+0+1=5
rw-=110=4+4+0=6
r--=100=4+0+0=4
得出结论,用r=4,w=2,x=1来表示权限。
awk批量创建用户习题剖析
需求:
1.批量创建100个用户
2.给这100个用户随机生成密码
3.将100个用户的密码保存到文件中
例如:创建100用户 zls001-zls100用户名:密码
cat /tmp/pass.txt
zls001:71297391
zls002:1892319283
zls003:182372873
步骤一:先将命令逐个写出来
# 需求:
1.批量创建100个用户
useradd zls001
2.然后给这100个用户随机密码
echo$RANDOM|passwd --stdin zls001mima=$RANDOM
3.将100个用户的密码保存到文件中
echo zls001:$RANDOM >> /tmp/pass.txt
步骤二:命令进行拼接
方式一:
useradd zls001;echo 123|passwd --stdin zls001;echo zls001:123 >> /tmp/pass.txt
方式二:
useradd zls001 && echo123|passwd --stdin zls001 && echo zls001:123 >> /tmp/pass.txt
步骤三:使用 awk 命令
[root@localhost ~]# seq -w 5|awk '{print $1}
把命令当成字符串,放入awk中:
[root@localhost ~]# seq -w 5|awk '{print "useradd zls001;echo 123|passwd --stdinzls001;echo zls001:123 >> /tmp/pass.txt
用$1替换001部分(001部分是写死的部分,不能批量创建)
[root@localhost ~]# seq -w 5|awk '{print "useradd zls$1;echo 123|passwd --stdinzls$1;echo zls$1:123 >> /tmp/pass.txt"}'
把$1放在双引号的外面(不放在外面,则表示它自己)
[root@localhost ~]# seq -w 5|awk '{print "useradd zls"$1";echo 123|passwd --stdinzls"$1";echo zls"$1":123 >> /tmp/pass.txt}'
密码要设置变量(变量输出结果给到变量名)
mima=echo $RANDOM
# 最终命令,塞到awk里
mima=echo $RANDOM
;useradd zls5;echo $mima|passwd --stdin zls5;echo zls5:$mima >>/tmp/pass.txt
Comments | NOTHING