Linux用户管理
超级管理员用户
Windows:Administrator
Linux:root
用户的作用
登录操作系统
Windows默认:不允许多用户操作
Linux默认:允许多用户操作
1.用户用来运行程序
2.每一个文件或者目录都有指定的权限
3.程序运行用户要与程序调用文件目录权限相同
如何判断系统是否存在该用户
id + 用户名
## 用户存在
[root@oldboy ~]# $ id old01
uid=1000(old01) gid=1000(old01) groups=1000(old01)
## 用户不存在
[root@oldboy ~]# $ id zls
id: zls: no such user
用户相关的配置文件
/etc/passwd # 存放用户信息
/etc/shadow # 存放用户密码
/etc/passwd
[root@oldboy ~]# $ head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
## 以冒号为分隔符,分隔了7列内容
第一列:用户名
第二列:密码占位符
第三列:用户的id/uid root的uid就是0
第四列:用户组id/gid root的gid也是0
第五列:对用户的描述(可有可无)
第六列:用户的家目录
第七列:用户登录的bash
/etc/shadow
[root@oldboy /tmp]# $ cat /etc/shadow
oldboy01:$6tVYg0:18788:0:99999:7:::
## 以冒号为分隔符,分割了9列内容
第一列:用户名
第二列:加密后的密码,*和!!表示没有设置密码
第三列:上一次更改密码的时间,从1970年到更改密码过了多少天
第四列:密码最少使用天数,0表示无限制
第五列:密码最长使用天数,99999默认代表无限制使用
第六列:密码到期前7天提示需要更改密码
第七列:密码过期后N天提示强制变更密码
第八列:账户失效的时间,也是从1970年开始计算
第九列:空,保留
用户分类
用户分类(约定、规范)
用户uid | 系统中的含义 |
---|---|
0 | 超级管理员(最高权限用户) |
1-200 | 系统用户,由系统分配给用户使用 |
201-999 | 系统用户,用来运行服务用户,不需要登录系统(动态分配) |
1000+ | 普通用户 |
使用chage更改用户密码密码使用情况(了解内容)
-d //设置最近一次更改密码时间, 0下次登陆系统强制修改密码
-m //设置用户两次改变密码之间使用"最小天数"
-M //设置用户两次改变密码之间使用"最大天数"
-W //设置密码更改警告时间 将过期警告天数设为“警告天数”
-I //设置密码过期天数后, 密码为失效状态
-E //设置用户过期时间, 账户失效后无法登陆
-l //显示用户信息
//修改时间为2014年08月31日,和图中时间匹配,方便后续验证
[root@zls ~]# date -s '20140831'
Sun Aug 31 00:00:00 CST 2014
[root@zls ~]# date
Sun Aug 31 00:00:01 CST 2014
[root@zls ~]# useradd zls1
[root@zls ~]# echo "123" |passwd --stdin zls1
[root@zls ~]# tail -1 /etc/shadow
zls1:!!:16312:0:99999:7:::
//设置最近一次修改密码时间
[root@zls ~]# chage -d "2014-09-01" zls1
[root@zls ~]# tail -n1 /etc/shadow
zls1:!!:16314:0:99999:7:::
//设置最短使用密码时间
[root@zls ~]# chage -m 2 zls1
[root@zls ~]# tail -n1 /etc/shadow
zls1:!!:16314:2:99999:7:::
//设置密码最长使用时间
[root@zls ~]# chage -M 15 zls1
[root@zls ~]# tail -n1 /etc/shadow
zls1:!!:16314:2:15:7:::
//设置密码警告时间
[root@zls ~]# chage -W 6 zls1
[root@zls ~]# tail -n1 /etc/shadow
zls1:!!:16314:2:15:6:::
[root@zls ~]# chage -W 7 zls1
[root@zls ~]# tail -n1 /etc/shadow
zls1:!!:16314:2:15:7:::
//设置密码过期时间
[root@zls ~]# chage -I 5 zls1
[root@zls ~]# tail -n1 /etc/shadow
zls1:!!:16314:2:15:6:5::
//设置用户过期时间
[root@zls ~]# chage -E "20115-08-31" zls1
[root@zls ~]# tail -n1 /etc/shadow
zls1:!!:16314:2:15:6:5:6627567:
[root@zls ~]# chage -l zls1
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@zls ~]# date -s "2014-09-12"
3.普通用户登陆系统后, 强制要求修改密码
[root@zls ~]# date -s "2014-09-18"
4.普通用户登陆系统后, 提示账户已过期
[root@zls ~]# date -s "2014-09-23"
用户相关的命令
增
useradd
adduser
#语法:
useradd [option] 用户名
-c:创建用户的同时给用户添加一个描述
-d:创建用户的同时给用户指定家目录(默认普通用户的家目录在/home)
-u:创建用户的同时给用户指定uid
-g:指定用户的gid 前提条件是gid组必须存在
-G:指定用户的附加组 前提条件是gid组必须存在
-M:不创建家目录
-s:指定用户登录的shell 普通用户默认登录的是/bin/bash
-r:创建系统用户,并且不创建家目录
删
userdel
#语法
userdel [option] 用户名
-r:删除用户及该用户的所有相关文件
改
usermod
#语法
usermod [option] 用户名
-u:修改用户的uid
-g:修改用户的gid
-G:修改用户的附加组
-a:配合-G追加附加组,不替换原来的附加组
-c:修改用户的注释信息
-d:修改用户新的家目录(必须结合-m使用)
-m:迁移家目录(原来的家目录必须存在)
-s:修改用户登录的shell
-l:修改用户的登录名
-L:锁定用户
-U:解锁用户
查
cat /etc/passwd
id 用户名
id id后面不加用户名,查询的是当前登录的用户
whoami
用户相关的其它命令
[root@oldboy /tmp]# $ who
root pts/0 2021-06-10 09:02 (10.0.0.1)
用户拓展知识
用户在创建过程中,跟两个文件息息相关
/etc/login.defs
# 看文件中内容,不要注释,不要空行
[root@oldboy ~]# $ grep -Ev '^#|^$' /etc/login.defs
# 创建用户时,用户相关邮件所在路径
MAIL_DIR /var/spool/mail
# 控制用户最长使用密码的天数
PASS_MAX_DAYS 99999
# 控制用户最短使用密码的时间
PASS_MIN_DAYS 0
# 控制用户密码的最小长度
PASS_MIN_LEN 5
# 控制新创建的用户,警告密码过期前7天提示修改密码
PASS_WARN_AGE 7
# 普通用户uid从1000开始
UID_MIN 1000
# 普通用户uid最大到60000
UID_MAX 60000
# 系统用户uid从201开始
SYS_UID_MIN 201
# 系统用户uid最大到999
SYS_UID_MAX 999
# 普通用户gid从1000开始
GID_MIN 1000
# 普通用户gid最大到60000
GID_MAX 60000
# 系统用户gid从201
SYS_GID_MIN 201
# 系统用户gid最大到999
SYS_GID_MAX 999
# 默认创建用户会创建家目录
CREATE_HOME yes
# 规定创建用户后 用户的家目录权限
UMASK 077
# 创建用户的同时,创建出该用户名的用户组
USERGROUPS_ENAB yes
# 加密方式 SHA512
ENCRYPT_METHOD SHA512
**/etc/default/useradd **
[root@oldboy ~]# $ cat /etc/default/useradd # useradd defaults file
# 被/etc/login.defs文件的USERGROUPS_ENAB yes的这个选项控制,如果是no,那就走这一行配置
GROUP=100
# 默认指定普通用户的家目录在home下
HOME=/home
# 用户过期后不会停止使用,-1表示不开启这个功能
INACTIVE=-1
# 用户是否过期在这里控制
EXPIRE=
# 创建用户时默认的shell
SHELL=/bin/bash
# 普通用户的环境变量存放目录
SKEL=/etc/skel
# 创建用户时是否同时创建邮件
CREATE_MAIL_SPOOL=yes
用户的密码管理
# 语法
passwd + 用户名
# 交互:命令行提示需要输入的内容 人和机器之间的交流
# 免交互设置密码
echo 123|passwd --stdin 用户名
## 随机生成复杂密码
echo $RANDOM|md5sum|cut -c 1-10
## 批量创建用户并且设置随机密码
[root@oldboy ~]# $ seq 5|awk '{print "useradd ld"$1";echo $RUNDOM|md5sum|cut -c 1-8|tee -a /tmp/ld.txt|passwd --stdin ld"$1}'
# 生成密码的其它命令
[root@oldboy ~]# $ yum install -y expect
[root@oldboy ~]# $ mkpasswd -l 24 -d 2 -c 5 -C 2 -s 1
aw7myeDow%hkmnfzz7nbcbmC
-l:长度
-d:数字
-c:指定小写字母的个数
-C:指定大写字母的个数
-s:特殊符号的个数
用户的组管理
# 组相关文件
# /etc/group
[root@oldboy ~]# $ tail -1 /etc/group
oldboy02:x:1002:
第一列:组名称
第二列:组密码占位符
第三列gid
第四列:空
# /etc/gshadow
[root@oldboy ~]# $ tail -1 /etc/gshadow
oldboy02:!::
第一列:组名
第二列:组密码 !表示没有密码
第三列:组管理员
第四列:附加组成员,不显示基本组成员
# 组的相关命令
# 创建组 groupadd
group [option] 组名
-g:指定gid
# 删除组 groupdel
groupdel 组名
# 修改组 guoupmod
-g:修改组的gid
# 查
cat /etc/group
id 用户名
**重点注意:**创建用户useradd受到2个文件的影响/etc/passwd
/etc/group
用户切换身份
su - 用户名
-:表示进入这个用户的家目录下,并且加载这个用户的环境变量
优点:简单,方便
缺点:需要知道root密码,不安全,切换到root没有日志审计功能
sudo 提权,将普通用户的身份提权成root,执行root可以执行的命令
优点:安全,方便
缺点:复杂(需要在配置文件里面配置)
用户身份提权
提权的两种方式
### 方法一:使用`visudo`命令编辑sudo配置文件, 相当于 vim /etc/sudoers`配置文件
# 配置选项详解
1.用户名 2.主机名 3.角色名 4.命令名
root ALL= (ALL) ALL
oldboy01 ALL= (ALL) /bin/rm, /bin/cp #允许使用sudo执行命令
oldboy01 ALL= (ALL) NOPASSWD: /bin/cp, /bin/rm //不需要密码使用rm、cp命令
# 使用visudo -c检查配置文件
[root@oldboy ~]# $ visudo -c
/etc/sudoers: parsed OK
### 方法二:配置组
# 如果每增加一个用户需配置一行sudo,这样设置非常麻烦。所以可以进行如下设置
%ld ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #新增组
# 创建用户加入该组
[root@oldboy ~]# $ useradd ld01 -g ld
[root@oldboy ~]# $ useradd ld02 -g ld
# root用户建立目录
[root@oldboy ~]# $ mkdir /tmp/ld_sudo
# 切换用户并删除测试
[ld@oldboy ~]$ rm -rf /tmp/ld_sudo/
rm: cannot remove ‘/tmp/ld_sudo/’: Operation not permitted
# 使用sudo
[ld@oldboy ~]$ sudo rm -rf /tmp/ld_sudo/do
普通用户验证sudo权限
#1.切换普通用户
[root@oldboy ~]# $ su - ld
[ld@oldboy ~]$
#2.检查普通用户sudo权限明细
[ld@oldboy ~]$ sudo -l
...
User ld may run the following commands on this host:
(ALL) /bin/rm, (ALL) /bin/cp
#3.普通用户删除opt目录,删除失败
[ld@oldboy ~]$ rm -f /opt/ld.txt
rm: cannot remove ‘/opt/ld.txt’: Permission denied
#4.使用sudo提权,验证用户权限是否可用,需要输入普通用户的密码
[ld@oldboy ~]$ sudo rm -f /opt/ld.txt
sudo免密码配置选项
#1.普通用户执行sudo不需要输入密码配置
[root@oldboy ~]# $ visudo
ld ALL=(ALL) /bin/rm, /bin/cp #默认
ld ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #修改后
#2.默认普通用户无权删除
[ld@oldboy ~]$ rm -f /root/002
rm: cannot remove `/root/002': Permission denied
#3.验证sudo免密码执行权限
[ld@oldboy ~]$ sudo rm -f /root/002
sudo配置组
# 如果每增加一个用户需配置一行sudo,这样设置非常麻烦。所以可以进行如下设置
%ld ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #新增组
# 创建用户加入该组
[root@oldboy ~]# $ useradd ld01 -g ld
[root@oldboy ~]# $ useradd ld02 -g ld
# root用户建立目录
[root@oldboy ~]# $ mkdir /tmp/ld_sudo
# 切换用户并删除测试
[ld@oldboy ~]$ rm -rf /tmp/ld_sudo/
rm: cannot remove ‘/tmp/ld_sudo/’: Operation not permitted
# 使用sudo
[ld@oldboy ~]$ sudo rm -rf /tmp/ld_sudo/do
sudo执行流程
1.普通用户执行sudo命令, 会检查/var/db/sudo是否存在时间戳缓存
2.如果存在则不需要输入密码, 否则需要输入用户与密码
3.输入密码会检测是否该用户是否拥有该权限
4.如果有则执行,否则报错退出