欢迎光临
我们一直在努力

权限鬼故事:家目录找不到、登录无权限、UID 改 0 直接变系统二当家

Linux 用户和组管理

本地用户管理

综合案例

手动创建一个用户

# 1 添加账户
[root@centos7 ~ 16:51:13]# vim /etc/passwd
# 最后一行添加如下内容,注意uid要在原有的基础上增加1
zhangsan:x:1002:1002::/home/zhangsan:/bin/bash

# 2 添加组
[root@centos7 ~ 16:51:35]# vim /etc/group
# 最后一行添加如下内容
zhangsan:x:1002:

# 3 添加密码
[root@centos7 ~ 16:51:57]# vim /etc/shadow
# 最后一行添加如下内容
zhangsan:$6$FgUNKn74yoEDbcXD$pxDk9AEhsxkJGYi76Rv91zLy5LRns8olgAyGuNssQYG07ypaidhuX0gHAU4hrNi9Zp9A7vtMEvbyzCQ0e/gbk1::0:99999:7:::

# 4 准备家目录
[root@centos7 ~ 16:52:22]# cp -r /etc/skel/ /home/zhangsan
# 修改zhangsan家目录所属有zhangsan用户和组
[root@centos7 ~ 16:52:44]# chown zhangsan:zhangsan /home/zhangsan
[root@centos7 ~ 16:53:06]# ll -d /home/zhangsan
drwxr-xr-x. 16 zhangsan zhangsan 4096 719 14:00 zhangsan

# 测试
[root@centos7 ~ 16:53:28]# ssh zhangsan@localhost

bash 提示符变为初始字符

提示符如下: bash-4.2$

模拟:

[root@centos7 ~ 16:53:50]# mv /etc/bashrc{,.ori}
[root@centos7 ~ 16:54:12]# bash
bash-4.2#

原因:nologin shell打开的时候执行 /etc/bashrc 配置。

恢复:

bash-4.2# mv /etc/bashrc{.ori,}
bash-4.2# bash
[root@centos7 ~ 16:54:40]#

误删用户家目录

故障:

[root@centos7 ~ 16:55:02]# ssh zhangsan@localhost
zhangsan@localhost's password:
Activate the web console with: systemctl enable –now cockpit.socket

Last login: Fri Jul 19 14:13:47 2024 from ::1
Could not chdir to home directory /home/zhangsan: No such file or directory
-bash-4.2$

模拟:

[root@centos7 ~ 16:55:28]# rm -fr /home/zhangsan

解决

[root@centos7 ~ 16:55:50]# cp -r /etc/skel/ /home/zhangsan
[root@centos7 ~ 16:56:12]# chown zhangsan:zhangsan /home/zhangsan

没有权限切换家目录

故障

Could not chdir to home directory /home/zhangsan: Permission denied
-bash: /home/zhangsan/.bash_profile: 权限不够

模拟

[root@centos7 ~ 16:56:38]# chmod u=- /home/zhangsan

解决

[root@centos7 ~ 16:57:02]# chown -R zhangsan:zhangsan /home/zhangsan
[root@centos7 ~ 16:57:26]# chmod u=rwx /home/zhangsan
[root@centos7 ~ 16:57:50]# ll -d /home/zhangsan
drwx——. 3 zhangsan zhangsan 78 719 14:17 /home/zhangsan


本地组管理

groupadd 命令

# 创建名称为 admin 的组
[root@centos7 ~ 16:58:18]# groupadd admin

# 创建名称为sysadmin的组,组id为2000
[root@centos7 ~ 16:58:42]# groupadd sysadmin -g 2000

# 验证
[root@centos7 ~ 16:59:06]# grep admin /etc/group
printadmin:x:997:
admin:x:1002:
sysadmin:x:2000:

groupmod 命令

# 修改组名称
[root@centos7 ~ 16:59:30]# groupmod –new-name admins admin

# 修改组id
[root@centos7 ~ 16:59:54]# groupmod -g 2002 admins

# 验证
[root@centos7 ~ 17:00:18]# grep 'admins' /etc/group
admins:x:2002:

groupdel 命令

[root@centos7 ~ 17:00:42]# groupdel sysadmin
[root@centos7 ~ 17:01:06]# grep sysadmin /etc/group

groupmems 命令

[root@centos7 ~ 17:01:30]# groupmems –help
用法:groupmems [选项] [动作]

选项:
-g, –group groupname 更改组 groupname,而不是用户的组(只 root)
-R, –root CHROOT_DIR chroot 到的目录

动作:
-a, –add username 将用户 username 添加到组成员中
-d, –delete username 从组的成员中删除用户 username
-h, –help 显示此帮助信息并推出
-p, –purge 从组中移除所有成员
-l, –list 列出组中的所有成员

# 添加成员
[root@centos7 ~ 17:01:56]# groupmems -g admins -a chenxin
[root@centos7 ~ 17:02:22]# groupmems -g admins -l
chenxin
[root@centos7 ~ 17:02:48]# id chenxin
uid=1000(chenxin) gid=1000(chenxin)=1000(chenxin),10(wheel),2002(admins)

# 删除成员
[root@centos7 ~ 17:03:14]# groupmems -g admins -d chenxin
[root@centos7 ~ 17:03:40]# groupmems -g admins -l

# 清空组中所有成员
[root@centos7 ~ 17:04:06]# groupmems -g admins -a chenxin
[root@centos7 ~ 17:04:32]# groupmems -g admins -p

课后练习

  • 创建developer组,组id为2000

  • 修改developer组名称为developers,组id为3000

  • 创建developer1用户,并添加到组developers

  • 将developer1用户从组developers中删除

  • 删除组developers

  • # 1. 创建developer组,GID 2000
    [root@centos7 ~ 17:04:58]# groupadd developer -g 2000

    # 2. 改名+改GID
    [root@centos7 ~ 17:05:24]# groupmod –new-name developers developer
    [root@centos7 ~ 17:05:50]# groupmod -g 3000 developers
    [root@centos7 ~ 17:06:16]# grep developers /etc/group
    developers:x:3000:

    # 3. 创建developer1并加入组
    [root@centos7 ~ 17:06:42]# useradd developer1 -G developers
    [root@centos7 ~ 17:07:08]# id developer1
    uid=1001(developer1) gid=1001(developer1)=1001(developer1),3000(developers)

    # 4. 从组中删除
    [root@centos7 ~ 17:07:34]# groupmems -g developers -d developer1
    [root@centos7 ~ 17:08:00]# groupmems -g developers -l

    # 5. 删除组
    [root@centos7 ~ 17:08:26]# groupdel developers
    [root@centos7 ~ 17:08:52]# grep developers /etc/group


    管理用户密码

    shadow 文件

    /etc/shadow 文件保存操作系统登录用户密码信息。

    每行包含一个登录用户信息,以冒号分隔九个域。

    示例:

    [root@centos7 ~ 17:09:18]# grep chenxin /etc/shadow
    chenxin:$6$m0OgWyIu$P2TF1pB8MO...J3LopEUdhmp/Ir/:19300:0:99999:7:::

    解释如下:

    • login name:用户登录名。

    • encrypted password:加密的密码。

    • date of last password change:上一次密码更改日期,以距离1970-1-1过去的天数表示。设置为0,强制用户下次登录时更改密码。

    • minimum password age:最小密码生命周期。设置为0,密码可以随时更改。

    • maximum password age:最大密码生命周期。

    • password warning period:密码过期前,提前多少天告警。设置为0,不提示过期。

    • password inactivity period:密码过期后,非活跃天数,在期间密码仍可以使用。

    • account expiration date:账户过期时间,以距离1970-1-1过去的天数表示。

    • reserved field:保留域。

    chage 命令

    # 查看用户密码信息
    [root@centos7 ~ 17:09:44]# chage -l chenxin
    最近一次密码修改时间 :7月 18, 2026
    密码过期时间 :从不
    密码失效时间 :从不
    帐户过期时间 :从不
    两次改变密码之间相距的最小天数 :0
    两次改变密码之间相距的最大天数 :99999
    在密码过期之前警告的天数 :7

    # 修改用户密码要求
    [root@centos7 ~ 17:10:10]# chage -M 100 chenxin
    [root@centos7 ~ 17:10:36]# chage -l chenxin
    最近一次密码修改时间 :7月 18, 2026
    密码过期时间 :2月 16, 2023
    密码失效时间 :从不
    帐户过期时间 :从不
    两次改变密码之间相距的最小天数 :0
    两次改变密码之间相距的最大天数 :100

    [root@centos7 ~ 17:11:02]# chage -m 10 chenxin
    [root@centos7 ~ 17:11:28]# chage -l chenxin
    最近一次密码修改时间 :7月 18, 2026
    密码过期时间 :2月 16, 2023
    密码失效时间 :从不
    帐户过期时间 :从不
    两次改变密码之间相距的最小天数 :10
    两次改变密码之间相距的最大天数 :100
    在密码过期之前警告的天数 :7

    [root@centos7 ~ 17:11:54]# chage -d 0 chenxin
    # 验证
    [root@centos7 ~ 17:12:20]# ssh chenxin@localhost
    chenxin@localhost's password:
    You are required to change your password immediately (root enforced)
    Last login: Tue Nov 8 11:13:51 2026 from localhost
    WARNING: Your password has expired.
    You must change your password now and login again!
    更改用户 chenxin 的密码 。
    为 chenxin 更改 STRESS 密码。
    (当前)UNIX 密码:

    # 设置用户密码过期时间是过去的一个时间,以便确保用户密码过期,登录时强制用户更改密码
    # 设置为1,确保密码很久未改动
    [root@centos7 ~ 17:12:52]# chage -d 1 chenxin

    # 设置用户账户过期时间是过去的一个时间,以便锁定用户账户
    [root@centos7 ~ 17:13:18]# chage -E 1970-1-1 chenxin

    usermod -p 更改用户密码

    # 更改chenxin的密码与laowang一致
    [root@centos7 ~ 17:13:44]# grep laowang /etc/shadow
    laowang:$6$dQcDSqtz$Nboi6QLMzscWSLvnnRO86gm3XI/qbgfnK5zVv2Ix13EktQ97vwNsqQlrfI2K/b1mVnHNgzmMNIb0P4HnTugog/:19304:0:99999:7:::
    [root@centos7 ~ 17:14:12]# usermod -p '$6$dQcDSqtz$Nboi6QLMzscWSLvnnRO86gm3XI/qbgfnK5zVv2Ix13EktQ97vwNsqQlrfI2K/b1mVnHNgzmMNIb0P4HnTugog/' chenxin

    # 删除用户密码
    [root@centos7 ~ 17:14:40]# usermod -p '' chenxin

    usermod -s 限定用户shell

    # 默认情况下,root用户可以切换到任何用户而且不需要密码
    [root@centos7 ~ 17:15:08]# su – laowang
    上一次登录:二 118 11:19:14 CST 2022tty1 上
    [laowang@centos7 ~]$ 登出

    # 更改用户shell为 /sbin/nologin
    [root@centos7 ~ 17:15:36]# usermod -s /sbin/nologin laowang
    [root@centos7 ~ 17:16:04]# su – laowang
    上一次登录:二 118 11:21:23 CST 2022pts/0 上
    This account is currently not available.

    # 将用户shell改为/bin/bash
    [root@centos7 ~ 17:16:32]# usermod -s /bin/bash laowang

    usermod -L 锁定用户密码

    等效于passwd -l

    [root@centos7 ~ 17:17:00]# usermod -L laowang

    # 输入正确的密码也无法登录
    [chenxin@centos7 ~ 17:17:28]$ su – laowang
    Password:
    su: Authentication failure
    [chenxin@centos7 ~ 17:17:56]$

    usermod -U 解锁用户密码

    等效于passwd -u

    [root@centos7 ~ 17:18:24]# usermod -U laowang

    # 输入正确的密码登录
    [chenxin@centos7 ~ 17:18:52]$ su – laowang
    Password:
    [laowang@centos7 ~]$

    passwd -d 删除密码

    # 删除用户密码即可
    [root@centos7 ~ 17:19:20]# passwd -d laowang
    清除用户的密码 laowang。
    passwd: 操作成功

    用户登录的时候,输入用户名即可登录。

    设置账户过期

    等效于passwd -e

    # 设置账户过期时间为过去的某一个日期
    [root@centos7 ~ 17:19:48]# usermod -e 2024-7-18 laowang

    # 或者
    [root@centos7 ~ 17:20:16]# chage -E 2024-7-18 laowang

    增加一个 uid 为 0 的用户

    方法一

    [root@centos7 ~ 17:20:44]# vim /etc/passwd
    # 将自己的用户id该为0,此时chenxin用户可以行使root权限了
    chenxin:x:0:1000:chenxin:/home/chenxin:/bin/bash

    方法二

    [root@centos7 ~ 17:21:12]# useradd -o -u 0 chenxin
    [root@centos7 ~ 17:21:40]# id chenxin
    uid=0(root) gid=0(root)=0(root)

    chenxin 和 root 账户是两个不同的账户,但是 chenxin 用户获得了 root 账户权限。


    其他 shell

    # 查看系统中 shell 清单
    [root@centos7 ~ 17:22:08]# cat /etc/shells
    /bin/sh
    /bin/bash
    /usr/bin/sh
    /usr/bin/bash

    [root@centos7 ~ 17:22:36]# ll /bin/sh /usr/bin/sh
    lrwxrwxrwx. 1 root root 4 210 20:31 /bin/sh –> bash
    lrwxrwxrwx. 1 root root 4 210 20:31 /usr/bin/sh –> bash

    # 新增 tmux shell
    [root@centos7 ~ 17:23:04]# yum install -y tmux

    # 新增 c shell
    [root@centos7 ~ 17:24:16]# yum install -y tcsh
    [root@centos7 ~ 17:25:32]# ll /bin/csh /usr/bin/csh
    lrwxrwxrwx. 1 root root 4 423 2022 /bin/csh –> tcsh
    lrwxrwxrwx. 1 root root 4 423 2022 /usr/bin/csh –> tcsh

    tmux 控制键 ctrl+b:

    • c,新建一个会话

    • N,切换到N号会话,例如数字1,切换到1号会话。


    Linux 提权管理

    大多数时候Linux系统管理员以非特权用户身份登录系统,并使用工具暂时获得特权用户root管理系统。

    su 命令

    • 示例1:su username 启动一个非登录shell,使用当前的环境设置(上一个用户)

    • 示例2:su -l username 启动一个登录shell,设置了shell环境

    username 省略时,代表切换到root账户。

    # 不加用户名的 nologin shell
    [chenxin@centos7 ~ 17:26:02]$ su
    Password: `redhat`
    # 很多环境变量仍保留为chenxin用户
    [root@centos7 chenxin 17:26:32]# env | grep chenxin
    LOGNAME=chenxin
    MAIL=/var/spool/mail/chenxin
    PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/chenxin/.local/bin:/home/chenxin/bin
    PWD=/home/chenxin
    USER=chenxin
    XDG_DATA_DIRS=/home/chenxin/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share

    # 不加用户名的 login shell
    [chenxin@centos7 ~ 17:26:58]$ su -l
    Password: `redhat`
    Last login: Mon Nov 7 15:40:31 CST 2022 on pts/2
    # 所有环境变量都更改为了root用户
    [root@centos7 ~ 17:27:30]# set | grep chenxin
    [root@centos7 ~ 17:27:56]#

    提示: 尽可能使用 loging shell 登录。

    准备一个用户

    # 添加一个用户
    [root@centos7 ~ 17:28:24]# useradd laowang
    # 设置密码为redhat
    [root@centos7 ~ 17:28:50]# echo redhat | passwd –stdin laowang
    Changing password for user laowang.
    passwd: all authentication tokens updated successfully.
    [chenxin@centos7 ~ 17:29:16]$ grep laowang /etc/passwd
    laowang:x:1001:1001::/home/laowang:/bin/bash

    # 以特定用户身份执行特定命令
    [chenxin@centos7 ~ 17:29:42]$ su -l laowang -c id
    Password:
    uid=1001(laowang) gid=1001(laowang) groups=1001(laowang) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

    # 加单引号
    [chenxin@centos7 ~ 17:30:10]$ su -l laowang -c 'cat /etc/hosts'
    Password:
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

    # 不加单引号
    [chenxin@centos7 ~ 17:30:38]$ su -l laowang -c cat /etc/hosts
    Password:
    hello
    hello
    # 原因:没有把 "cat /etc/hosts" 当作整体

    其他使用方法

    # 创建的文件位置在 ~laowang/haha
    [root@centos7 ~ 17:31:08]# su -l -c 'touch haha' laowang

    # 无权创建
    [root@centos7 ~ 17:31:38]# su -c 'touch haha' laowang
    touch: 无法创建 'haha': 权限不够
    # 原因:nologin shell 执行,当前位置不变,导致laowang用户无法在/root下创建

    # 切换 nologin shell 账户
    [root@centos7 ~ 17:32:08]# grep adm /etc/passwd
    adm:x:3:4:adm:/var/adm:/sbin/nologin

    [root@centos7 ~ 17:32:38]# su -l adm -c id
    This account is currently not available.

    [root@centos7 ~ 17:33:06]# su -l adm -s /bin/bash -c id
    uid=3(adm) gid=4(adm)=4(adm)
    # 只有 root 用户可以指定 shell

    [root@centos7 ~ 17:33:36]# su -l adm -s /bin/bash
    -bash-4.2$
    # 提示符不正常,原因是家目录中缺少bash相关配置文件
    # 处理方法如下:
    [root@centos7 ~ 16:18:06]# grep adm /etc/passwd
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    [root@centos7 ~ 16:17:37]# cp /etc/skel/{.bash_profile,.bashrc} /var/adm
    [root@centos7 ~ 16:17:52]# su adm -l -s /bin/bash
    上一次登录:三 723 16:16:32 CST 2025pts/0 上
    [adm@centos7 ~ 16:17:55]$


    sudo 命令

    从根本上说,Linux实现了一个非常粗糙的获得权限模型:root 可以做任何事情,其他用户与系统相关什么也不能做。

    • su 缺点:

    • 用户必须知道 root 用户密码获取 root 用户所有权限。

    • 未记录用户执行命令。

    • 无法以 /sbin/nologin 的用户身份运行命令。

    • sudo 优点:

    • sudo 允许用户以其他用户身份执行特定命令。

    • sudo 需要用户输入用户自己的密码,而非他们想访问的用户密码。

    • sudo 执行的命令会记录在 /var/log/secure 文件中。

    sudo 语法:sudo [-u username] command

    # 有sudo权限的用户,输入自己的密码,确认是否是本人在操作
    [chenxin@centos7 ~ 17:34:04]$ sudo id
    [sudo] password for chenxin:
    uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

    # 没有sudo权限的用户
    [laowang@centos7 ~ 17:34:36]$ sudo id

    We trust you have received the usual lecture from the local System
    Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

    [sudo] password for laowang:
    laowang is not in the sudoers file. This incident will be reported.

    sudo 配置

    [root@centos7 ~ 17:35:08]# export EDITOR=vim
    [root@centos7 ~ 17:35:36]# visudo
    # 其中两条记录,wheel组中成员,可以以任何用户身份执行任何命令
    root ALL=(ALL) ALL
    # 组以%开头
    %wheel ALL=(ALL) ALL

    示例1:

    # laowang 记录如下
    laowang ALL=(ALL) ALL

    验证:

    [laowang@centos7 ~ 17:36:04]$ sudo id
    [sudo] password for laowang:
    uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

    示例2: 不需要输入密码情况下,直接执行命令。

    # laowang 记录如下
    laowang ALL=(ALL) NOPASSWD:ALL

    验证:

    [laowang@centos7 ~ 17:36:32]$ sudo id
    uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

    示例3: 只能够执行特定命令。

    # laowang 记录如下
    laowang ALL=(ALL) /sbin/useradd,/sbin/usermod,/sbin/userdel

    验证:

    [laowang@centos7 ~ 17:37:00]$ sudo id
    [sudo] password for laowang:
    Sorry, user laowang is not allowed to execute '/bin/id' as root on centos7.wanho.net.
    [laowang@centos7 ~ 17:37:28]$ sudo useradd laozhang
    [sudo] password for laowang:
    [laowang@centos7 ~ 17:37:56]$ id laozhang
    uid=1002(laozhang) gid=1002(laozhang) groups=1002(laozhang)

    总结: 在分配命令的时候,切记只给用户特定功能的命令 (例如用户管理相关命令),而不是通用功能的工具(例如 vim)。

    配置文件路径:

    • 主配置文件 :/etc/sudoers,正常情况不要修改。

    • 从配置文件 :/etc/sudoer.d/*,如果想添加配置,在此处添加。

    示例:

    [root@centos7 ~ 17:38:24]# echo 'laowang ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/laowang
    [root@centos7 ~ 17:38:52]# cat /etc/sudoers.d/laowang
    laowang ALL=(ALL) NOPASSWD:ALL

    命令别名

    Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
    # sys组中成员执行以下命令别名中的所有命令
    %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

    案例

  • 配置用户 xiaoniuma 可以以root身份运行vim命令

  • 用户 xiaoniuma 将自己提权为 root 用户 – 方法一:

  • 操作过程:

    # 创建用户
    [root@centos7 ~ 17:39:20]# useradd xiaoniuma
    [root@centos7 ~ 17:39:42]# echo 123 | passwd –stdin xiaoniuma

    # 配置sudo
    [root@centos7 ~ 17:40:06]# echo 'xiaoniuma ALL=(ALL) /bin/vim' > /etc/sudoers.d/xiaoniuma

    # 切换用户并修改用户id
    [xiaoniuma@centos7 ~ 17:40:32]$ sudo vim /etc/passwd
    # 修改 xiaoniuma 的 UID 为0
    xiaoniuma:x:0:1001::/home/xiaoniuma:/bin/bash

    # 验证
    [xiaoniuma@centos7 ~ 17:41:02]$ su -l xiaoniuma
    密码:
    [root@centos7 ~ 17:41:30]#

    还原环境

    # 修改用户id为原来的1001
    [xiaoniuma@centos7 ~ 17:41:54]$ sudo vim /etc/passwd
    xiaoniuma:x:1001:1001::/home/xiaoniuma:/bin/bash

    # 删除用户
    [root@centos7 ~ 17:42:22]# userdel -r xiaoniuma

    # 删除sudo规则
    [root@centos7 ~ 17:42:46]# rm -f /etc/sudoers.d/xiaoniuma

    提权总结

    以下是关于 Linux 中 su 和 sudo 使用的几条建议:

  • 优先使用 sudo 而非 su:sudo 允许临时获取管理员权限,操作完成后自动退回普通用户状态,降低误操作风险;而 su 会直接切换到 root 身份,长期保持高权限状态存在安全隐患。

  • 限制 su 的使用范围:尽量仅在需要长时间执行多个管理员操作时使用 su,且完成后立即通过 exit 退出 root 身份,避免在 root 权限下进行日常操作。

  • 合理配置 sudoers 文件:通过 visudo 命令配置 sudoers,精确控制用户可执行的管理员命令(如 user ALL=(ALL) /bin/apt),避免授予无限制的 sudo 权限。

  • 注意命令的完整路径:使用 sudo 时,尽量指定命令的绝对路径(如 sudo /usr/bin/apt update),防止因环境变量篡改导致的安全风险。

  • 避免在脚本中硬编码 sudo 密码:不要在脚本中直接写入 sudo 密码(如通过管道传递),可通过配置 sudoers 实现特定命令免密执行,或使用更安全的权限管理方式。

  • 定期审计操作日志:sudo 的操作会记录在 /var/log/auth.log(或 /var/log/secure)中,定期检查日志可追踪权限使用情况,及时发现异常操作。

  • 使用 sudo -i 替代 su 进行交互式操作:若需要类似 su 的交互式 root 环境,可使用 sudo -i,它会加载 root 的环境变量,同时保留 sudo 的日志记录功能。


  • 课后练习

    解析以下每个命令作用,并且至少使用三个示例说明。

    su 命令使用说明

    su 命令作用:切换当前登录身份为指定用户。使用时需要提供目标用户的密码(root 用户切换到其他用户时无需密码)。

    用法作用
    su -l username 或 su – username Login shell(登录式切换):完整加载目标用户的环境变量(PATH / HOME / USER / LOGNAME / PS1 等),工作目录也会进入目标用户的家目录。推荐使用。
    su username Non-login shell(非登录式切换):保留当前用户的大部分环境变量(PATH / HOME / USER 等仍指向上一个用户),仅身份切换。
    su -l username -c 'COMMAND' 以目标用户身份执行单条命令,执行完毕立即返回当前身份,命令参数必须用单引号包裹(否则会被当前 shell 先展开)。
    su -l nologinuser -s /bin/bash 临时指定登录 shell(仅 root 可用 -s),用于 /sbin/nologin 的系统账户。

    示例 1:root 使用 login shell 切换到 chenxin,观察 HOME / PATH 均已切换

    [root@centos7 ~ 17:43:18]# su -l chenxin
    [chenxin@centos7 ~ 17:43:32]$ pwd
    /home/chenxin
    [chenxin@centos7 ~ 17:43:50]$ echo $PATH
    /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/chenxin/.local/bin:/home/chenxin/bin

    示例 2:不加 -l 的 Non-login 方式(HOME / USER / MAIL 仍停留在 root,容易出现权限诡异问题)

    [root@centos7 ~ 17:44:16]# su chenxin
    bash-4.2$ echo $HOME
    /root
    bash-4.2$ echo $USER
    root

    示例 3:以 chenxin 身份执行一条单命令,且命令整体用单引号包住

    [root@centos7 ~ 17:44:48]# su -l chenxin -c 'id; whoami; echo 家目录是 $HOME'
    uid=1000(chenxin) gid=1000(chenxin)=1000(chenxin),10(wheel)
    chenxin
    家目录是 /home/chenxin


    sudo 命令使用说明

    sudo 命令作用:以"指定的其他用户"身份执行特定命令。默认目标用户是 root。使用时需要输入自己的密码(或通过配置免密),执行完毕立即退回原身份,所有操作会记录到 /var/log/secure。

    用法作用
    sudo COMMAND 以 root 身份执行一条命令(需要本人密码验证,验证成功后默认 5 分钟内再次 sudo 免密)。
    sudo -u username COMMAND 以指定的普通用户身份执行命令,而不是 root。
    sudo -i 进入交互式 login shell,效果近似 su – root,但保留 sudo 日志 + 输本人密码。
    sudo visudo 或 visudo -f /etc/sudoers.d/file 配置 sudo 权限规则(语法错误时 visudo 会自动检查并禁止保存)。

    示例 1:普通用户用 sudo 执行管理员命令(cat /etc/shadow 本应 Permission denied,加上 sudo 即可读取)

    [chenxin@centos7 ~ 17:45:20]$ cat /etc/shadow | head -n1
    cat: /etc/shadow: 权限不够

    [chenxin@centos7 ~ 17:45:44]$ sudo cat /etc/shadow | head -n1
    [sudo] password for chenxin:
    root:$6$............:19300:0:99999:7:::

    示例 2:-u 指定以非 root 用户身份运行(用 tom 用户在 /tmp 建文件,属主属组自动变 tom)

    [root@centos7 ~ 17:46:10]# sudo -u tom touch /tmp/tom-test-file
    [root@centos7 ~ 17:46:32]# ls -l /tmp/tom-test-file
    -rw-rw-r–. 1 tom tom 0 722 17:46 /tmp/tom-test-file

    示例 3:精确的 sudoers 规则配置 —— 只允许 laowang 跑 useradd / usermod / userdel 三条命令,且 NOPASSWD 免密

    [root@centos7 ~ 17:47:00]# cat > /etc/sudoers.d/laowang << 'EOF'
    laowang ALL=(ALL) NOPASSWD: /sbin/useradd, /sbin/usermod, /sbin/userdel
    EOF

    # 验证:sudo id 被拒(权限外的命令),但 sudo useradd 成功通过
    [laowang@centos7 ~ 17:47:34]$ sudo id
    Sorry, user laowang is not allowed to execute '/bin/id' as root on centos7.

    [laowang@centos7 ~ 17:48:02]$ sudo useradd user01
    [laowang@centos7 ~ 17:48:28]$ id user01
    uid=1002(user01) gid=1002(user01)=1002(user01)


    Linux 文件权限管理

    文件系统权限介绍

    文件系统权限介绍

    Linux文件权限简单灵活,易于理解和应用,能够处理大多数权限使用情况。

    文件有三个适用权限的用户类别:

  • 单个用户拥有者,通常是创建该文件的用户。

  • 单个组拥有者,通常是创建该文件的用户的主要组。

  • 除了用户拥有者和组拥有者之外的 其他用户。

  • [chenxin@centos7 ~ 17:48:56]$ ls -l myfile
    -rw-r—–. 1 chenxin wheel 2262 Dec 23 08:47 myfile

    对于/etc/passwd文件来说,-rw-r–r–字符串分成四份,格式如下:

  • 第一位 代表文件类型,例如,- 代表普通文件,d 代表目录,l(L的小写)代表软链接等。

  • 第二到第四位,代表user-owner具有的权限,也就是chenxin用户具有的权限。

  • 第五到第七位,代表group-owner具有的权限,也就是chenxin组中成员具有的权限。

  • 第八到第十位,代表user-owner和group-owner之外的用户具有的权限。

  • 权限优先级

    如果文件的用户是chenxin,组成员中也有chenxin用户,那么chenxin获得最终权限是chenxin用户拥有者的权限,而不是组中成员具有的权限。

    rwx 权限解读

    目录中保存文件,文件中保存数据(例如字符串)

    在这里插入图片描述


    课后作业

    在这里插入图片描述

  • 哪个常规文件归 operator1 所有并可被所有用户读取? a. lfile1 b. lfile2 c. rfile1 d. rfile2

    c

  • 哪个文件可以被 contractor1 用户修改? a. lfile1 b. lfile2 c. rfile1 d. rfile2

    b

  • 哪个文件无法被 operator2 用户读取? a. lfile1 b. lfile2 c. rfile1 d. rfile2

    d

  • 哪个文件的组所有者为 consultant1? a. lfile1 b. lfile2 c. rfile1 d. rfile2

    a

  • 哪些文件可以被 operator1 用户删除? a. rfile1 b. rfile2 c. 以上都对。 d. 以上都不对。

    c

  • 哪些文件可以被 operator2 用户删除? a. lfile1 b. lfile2 c. 以上都对。 d. 以上都不对。

    d


  • 赞(0)
    未经允许不得转载:171主机测评 » 权限鬼故事:家目录找不到、登录无权限、UID 改 0 直接变系统二当家
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址