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 演示站点.

posted @ 2024-08-29 20:13  老虎死了还有狼  阅读(20)  评论(0编辑  收藏  举报