Linux用户管理
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
- visudo === vi /etc/sudoers
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,/sbin/visudo
保存
修改xk密码
echo 密码 | passwd --stdin xk
tail /var/log/secure
sudo tail /var/log/secure
输入当前用户密码
# 2: 授权xk所有权限并且不需要输入密码
# root授权
xk ALL=(ALL) NOPASSWD: ALL
# xk2测试
# 查看当前用户具有什么sudo权限
[xk2@Kylin-V10-sp3 /root]$ sudo -l
[sudo] xk2 的密码:
匹配 %2$s 上 %1$s 的默认条目:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,
env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
用户 xk2 可以在 Kylin-V10-sp3 上运行以下命令:
(ALL) /bin/cat, /bin/less, /bin/more, /bin/head, /bin/tail, /sbin/visudo
[xk2@Kylin-V10-sp3 /root]$
[xk2@Kylin-V10-sp3 ~]$ sudo visudo # xk2虽然是普通用户,但可以使用visudo将自己修改成拥有root权限的用户。所以赋权要慎重!!!
visudo: /etc/sudoers.tmp 未更改
[xk2@Kylin-V10-sp3 ~]$
#然后切换到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编辑器
# sudo总结
能够给普通用户配置sudo权限执行指定的命令.
能够给普通用户配置sudo权限执行所有命令并且不需要密码.
5.2 别名
用于给命令设置昵称.
用途:
🅰 给危险命令加层防护. ✅
🅱 添加方便.给ls -l 设置别名ll
5.2.1 查看系统已有别名
# Ubuntu
[root@ubuntu2204 ~]# alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
[root@ubuntu2204 ~]#
# kylin
[root@Kylin-V10-sp3 ~]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
[root@Kylin-V10-sp3 ~]#
5.2.2 设置别名 ⭐⭐⭐⭐只要运行rm命令,实际运行echo命令输出警告 pls do not use rm
# 临时配置别名
alias rm='echo pls do not use rm'
# 测试别名
touch /test/1.txt
rm -fr /test/1.txt #发现无法删除
# 临时取消别名,使命令可用
\rm -fr /test/1.txtt
#(修改/etc/profile文件)永久配置别名
#1.修改配置文件 /etc/profile
vim /etc/profile
写入到最后一行
alias rm='echo pls do not use rm'
#2. 自己配置的rm别名与系统配置的rm别名冲突
#修改~/.bashrc里面关于rm的别名(只限于rm别名的时候)
vim ~/.bashrc
找到rm的那一行,行首添加个#注释即可.
#3. 别名或环境变量生效
source /etc/profile
#4. 最后测试(重新连接测试)
alias rm
5.2.3 配置grep,egrep别名,增加颜色
命令行临时测试
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
永久生效,/etc/profile
重新登录并生效,检查
5.3 Xshell无法使用
- 备用方案1:git bash
- 备份方法2:powershell
- 苹果系统(linux,unix)
上面各种系统通用的2个命令
ssh (远程连接) ssh -p 22 root@10.0.0.200
scp (传输文件) scp -P 22 -r KeePass-2.50.rar root@10.0.0.200:/home/
5.4 /etc/skel/
5.4.1 详解
- 目录下存放新用户的家目录模板.
- 添加新用户的时候会复制/etc/skel下面所有内容到新用户的家目录.
- 应用场景:
想让所有新用户,家目录下带个说明文件.
家目录被你删除了,通过复制/etc/skel下面内容恢复.
[root@kylin-v10-sp3 ~]# ll -a /etc/skel/
总用量 24
drwxr-xr-x. 2 root root 62 8月 23 12:14 .
drwxr-xr-x. 81 root root 8192 9月 4 08:18 ..
-rw-r--r--. 1 root root 18 4月 1 2020 .bash_logout
-rw-r--r--. 1 root root 193 4月 1 2020 .bash_profile
-rw-r--r--. 1 root root 231 4月 1 2020 .bashrc
5.4.2 故障案例:用户不小心误删除家目录,导致命令行变成-bash-4.2$形式⭐⭐⭐⭐⭐⭐
# 故障模拟(centos7)
第1步:注释掉/etc/profile中的 PS1的部分.
加上井号即可:
vim /etc/profile
G到最后一行,如果没有PS1,则不用修改直接到第2步即可.
#export PS1=xxxxxxxxxx
第2步:添加普通用户
useradd user1
第3步:切换用户,切换到user1用户
su - user1
第4步骤:删根
rm -f ~/.bash*
第5步骤:退出用户,重新切换到user1
按ctrl+d退出用户
su - user1重启切换到user1即可
# 故障原因:
用户误删除家目录下面的几个隐藏文件导致的.
.bash_profile 和.bashrc
命令行PS1的样子没了.
# 故障解决
从/etc/skel/下面重新复制即可(出故障的问题)
cp /etc/skel/.bash* ~
重新登录即可.
5.5 堡垒机
核心应用场景:
- 加强网站,系统安全(为了等保测评).
- 对用户操作,审计,限制(sudo),屏蔽命令.
http://docs.jumpserver.org 帮助与部署文档.
http://demo.jumpserver.org 演示站点.