Linux用户管理

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.如果有则执行,否则报错退出

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值