Linux用户管理
- Linux下面我们管理系统通过对应的用户.
- 我们当前是root用户.我们就需要有不同类型的用户,然后通过不同的用户管理系统.
- 未来工作中的70%故障,安全事故,基本内部误操作导致.
- Linux是多用户系统,多个用户登录一般不会互相影响.
1. 分类
UID,GID
- ⭐ ⭐ ⭐ ⭐ ⭐ UID:User ID用户id号,类似于身份证号码.
- GID:Group ID用户组号,类似于户口本号码.
Linux用户分类 UID 说明
root 0 超级用户,管理员用户
虚拟用户(傀儡用户) 1-999 用于保证服务/进程正常运行的用户,这种用户无法直接使用.
普通用户 >= 1000 开始没有root那么高权限的用户,只能管理自己的家目录
2.相关文件
- 添加用户,系统会修改这几个文件的内容.
- 不要直接修改这几个文件.
文件 说明
/etc/passwd 不存放密码,用于存放用户的信息.UID,GID,家目录,命令解释器.
/etc/group 用户组信息.
/etc/shadow 密码信息.密码过期.通过man 5 shadow查看帮助
/etc/gshadow 几乎不用,用户组密码.
/etc/passwd ⭐⭐⭐⭐⭐
主要能看出与关注:用户名,UID,家目录,命令解释器即可(是否为虚拟用户).
1:统计/etc/passwd中可以登录系统的用户的数量
grep '/bin/bash' /etc/passwd | wc -l
2:统计/etc/passwd中虚拟用户数量(命令解释器非/bin/bash)
grep -v '/bin/bash' /etc/passwd |wc -l
3:统计排除root用户后可登录系统的用户数量(命令解释器为/bin/bash)
grep -v '^root' /etc/passwd |grep '/bin/bash' |wc -l
# ^ 以...开头的行,三剑客
3. 核心命令
3.1 增:添加用户
红帽系列系统中:useradd,adduser一致,添加普通用户,虚拟用户.
debian系列系统中: useradd添加用户,默认命令解释器/bin/sh,需要指定-s/bin/bash
useradd选项 说明
-u # 指定uid
-s # 指定命令解释器,默认是/bin/bash(红帽类系统) ubt/debian 要指定-s /bin/bash
-m # 创建家目录(ubt需要指定)
-M # 不创建家目录.
红帽系列添加用户user1,设置密码,切换用户⭐ ⭐ ⭐ ⭐ ⭐
#1.添加用户
useradd user1
#2.设置密码
passwd user1 #passwd 用户名只能root用户使用,其他用户只能运行
passwd
#3.切换用户 switch user
su - user1
#4.查看当前用户名 我是谁
whoami
#5.退出当前用户
ctrl + d #或者输入logout/exit
debian系列添加用户⭐ ⭐ ⭐ ⭐ ⭐
# 指定命令解释器和要求创建家目录
[root@ubuntu2204 ~]# useradd -s /bin/bash -m xk2
[root@ubuntu2204 ~]# passwd xk2
New password:
Retype new password:
passwd: password updated successfully
su - 与 su区别
su切换用户 switch user切换用户.(比如从root切换到user1普通用户时,user所在家目录还在/root下)
su - 是su命令的选项.系统在切换用户时更新环境变量(推荐)
添加虚拟用户vm1,指定uid 9999.⭐ ⭐ ⭐ ⭐ ⭐
# 潜台词:虚拟用户不需要创建家目录,指定命令解释器为/sbin/nologin
[root@Kylin-V10-sp3 ~]# useradd -u 9999 -s /sbin/nologin -M vm1
[root@Kylin-V10-sp3 ~]#
[root@Kylin-V10-sp3 ~]# grep vm1 /etc/passwd
vm1:x:1001:1001::/home/vm1:/sbin/nologin
[root@Kylin-V10-sp3 ~]#
[root@Kylin-V10-sp3 ~]# tree /home/
/home/
└── xk2
非交互修改密码(passwd为交互输入密码)
# 非交互: 一个回车/一键自动化实现功能
####红帽系统####
# 方法01: passwd选项实现(主要说这个)
# passwd --stdin非交互模式,通过管道获取密码.
[root@Kylin-V10-sp3 ~]# echo 1 | passwd --stdin user1
###红帽系统+ubt######
#方法02: 专用的批量修改密码的命令chpasswd
[root@ubuntu2204 ~] cat pass.txt |chpasswd
[root@ubuntu2204 ~]# cat pass.txt
xk:1
xk2:2
3.2 删:删除用户
userdel默认不会删除家目录,需要加上参数-r
[root@Kylin-V10-sp3 ~]# userdel -r xk2
如果删除失败,可以通过kill结束对应的进程,占用用户的进程.
#推荐大家通过在/etc/passwd进行注释操作,替代userdel删除.避免使用userdel.
3.3 改
修改已有用户的信息,很少用 了解即可 usermod
usermod选项与useradd类似
[root@ubuntu2204 ~]# usermod -c 'xk linux' xk # 给xk用户添加注释信息"xk linux"
[root@ubuntu2204 ~]#
[root@ubuntu2204 ~]# id xk
uid=1000(xk) gid=1000(xk) groups=1000(xk),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd)
[root@ubuntu2204 ~]#
[root@ubuntu2204 ~]# usermod -G root xk # 改变用户组
[root@ubuntu2204 ~]#
[root@ubuntu2204 ~]# id xk
uid=1000(xk) gid=1000(xk) groups=1000(xk),0(root)
[root@ubuntu2204 ~]#
[root@ubuntu2204 ~]# grep xk /etc/passwd
xk:x:1000:1000:xk linux:/home/xk:/bin/bash
xk2:x:1001:1001::/home/xk2:/bin/bash
[root@ubuntu2204 ~]#
[root@ubuntu2204 ~]# usermod -s /sbin/nologin xk # 改变解释器信息
[root@ubuntu2204 ~]#
[root@ubuntu2204 ~]# grep xk /etc/passwd
xk:x:1000:1000:xk linux:/home/xk:/sbin/nologin
xk2:x:1001:1001::/home/xk2:/bin/bash
[root@ubuntu2204 ~]#
3.4 查:查看用户的信息
查询用户信息指令 说明
whoami # 显示当前用户名字
id # 查看用户的信息或检查用户是否存在.
w # 查看谁登录了系统并在做什么
last # 查看用户的登录情况(谁,哪里,登入时间,登出时间)
lastlog # 查看所有用户的登录情况
查询用户信息指令 说明 应用场景
whoami 显示当前用户名字 # 查看用户,写入脚本剧本.
id 查看用户的信息或检查用户是否存在. # 检查用户是否存在.
w 查看谁登录了系统并在做什么查看系统登录了哪些用户? # 排查与定位系统是否繁忙(平均负载)?
last 查看用户的登录情况(谁,哪里,登入时间,登出时间) # 查看历史登录信息.
lastlog 查看所有用户的登录情况 # 查看历史登录信息.
检查用户是否存在
[root@Kylin-V10-sp3 ~]# id xk2
用户id=1000(xk2) 组id=1000(xk2) 组=1000(xk2)
[root@Kylin-V10-sp3 ~]#
[root@Kylin-V10-sp3 ~]# id user3
id: “user3”:无此用户
[root@Kylin-V10-sp3 ~]#
查看此时此时系统中有谁登录了?并且正在做啥?
# 登录用户名名字(USER)
# 登录用户来自于哪里(FROM)
# 登录用户正在做什么(WATH)
[root@ubuntu2204 ~]# w
16:58:44 up 6:31, 3 users, load average: 0.08, 0.04, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
xk tty1 - 16:58 20.00s 0.05s 0.01s -bash
root pts/0 10.0.0.1 16:57 2.00s 0.01s 0.00s w
root pts/1 10.0.0.1 16:58 12.00s 0.01s 0.00s tail -f /etc/passwd
[root@ubuntu2204 ~]#
[root@ubuntu2204 ~]# tty
/dev/pts/0
[root@ubuntu2204 ~]#
# tty表示终端 tty1表示本地登录
# WHAT -bash表示当前没做操作
# FROM - 表示本地的登录
其他命令
[root@Kylin-V10-sp3 ~]# whoami
root
[root@Kylin-V10-sp3 ~]#
[root@Kylin-V10-sp3 ~]# last | head -3 # 查看所有用户登录,登出情况.是否有异常登录
root pts/2 10.0.0.1 Wed Aug 28 12:52 still logged in
root pts/1 10.0.0.1 Wed Aug 28 11:42 - 14:15 (02:33)
root pts/0 10.0.0.1 Sun Aug 25 12:25 - 14:17 (3+01:52)
[root@Kylin-V10-sp3 ~]#
[root@Kylin-V10-sp3 ~]# lastlog | head -5 # 所有用户最近1次登录情况.
用户名 端口 来自 最后登录时间
root pts/2 10.0.0.1 三 8月 28 12:52:11 +0800 2024
bin **从未登录过**
daemon **从未登录过**
adm **从未登录过**
[root@Kylin-V10-sp3 ~]#
[root@Kylin-V10-sp3 ~]# export LANG=C
[root@Kylin-V10-sp3 ~]#
[root@Kylin-V10-sp3 ~]# lastlog | head -5
Username Port From Latest
root pts/2 10.0.0.1 Wed Aug 28 12:52:11 +0800 2024
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
[root@Kylin-V10-sp3 ~]#
4. 用户组
5. 安全防护
- 给危险命令设置别名,暂时无法使用rm。shell编程可以写回收站脚本,代替rm命令
- 给普通用户设置sudo权限,以root权限执行命令
- 用户操作审计,堡垒机,跳板机
5.1 sudo提权
5.1.1 应用场景
- 普通用户需要以root权限运行命令的时候或查看没有权限的文件的时候.
- 使用sudo实现需求.
- 也就是说想让普通用户临时成为root
5.1.2 案例
# 1 授权xk用户查看日志权限
选择好命令,head/tail/grep/less/more/cat
var log messages
var log secure
..
root用户进行授权(尚方宝剑)
xk用户使用(亮剑)
visudo #命令
100行
写入配置
xk ALL=(ALL) /bin/cat, /bin/head, /bin/less, /bin/more,
/bin/tail
保存
修改xk密码
echo 密码 | passwd --stdin oldboy
tail /var/log/secure
sudo tail /var/log/secure
输入当前用户密码
# 2: 授权devops-li所有权限并且不需要输入密码
# root授权
devops-li ALL=(ALL) NOPASSWD: ALL
# devops-li测试
# 查看当前用户具有什么sudo权限
sudo -l
#然后切换到root
sudo su - 直接切换到root不需要密码.
su - root 或su - 一个意思.切换为root.
# ubt/debian配置sudo
vim /etc/sudoers
在env_reset这行上面写上,
Defaults editor=/usr/bin/vim
Defaults env_reset
visudo的时候默认使用的是nano编辑器
5.1.3 sudo总结
能够说出sudo应用场景.
能够给普通用户配置sudo权限执行指定的命令.
能够给普通用户配置sudo权限执行所有命令并且不需要密码.
visudo === vi /etc/sudoers
后面直接添加到末尾.
5.2 别名
用于给命令设置昵称.
用途: