欢迎光临
我们一直在努力

四、Linux 文件权限+sudo权限委派+IO重定向+vim高级

记录个人的成长笔记,感谢各位大佬的支持、建议及纠正


第一部分:Linux权限管理

一、Linux系统权限概述

Linux权限分为:

  • 基本权限:r、w、x
  • 特殊权限:SUID、SGID、SBIT
  • ACL权限:访问控制列表
  • sudo提权:权限委派
  • umask:默认权限掩码

二、RWX基本权限

1. 权限含义

权限

对文件的意义

对目录的意义

r(read)

可读取文件内容(如 cat、less)

可列出目录内容(需配合 x,如 ls)

w(write)

可编辑、修改文件内容

可在目录下创建、删除文件(即使文件属于 root)

x(execute)

可执行文件(命令、脚本)

可进入目录(cd)

目录最小有意义权限:r-x(可进入并查看内容)

2. 权限匹配优先级

访问文件时,系统按以下顺序匹配:

  • 是否文件的拥有人(user) → 使用 u 权限
  • 是否在文件的拥有组中(group) → 使用 g 权限
  • 其他人(other) → 使用 o 权限
  • 一旦匹配成功,不再继续向下匹配。

    3. 常见权限示例与报错分析

    操作

    结果

    原因

    cd /root/

    Permission denied

    /root 默认 700,普通用户无 x 权限

    touch /opt/a

    Permission denied

    /opt 默认 755,普通用户无 w 权限

    ls -l /opt/

    显示 ? 号

    有 r 但无 x,无法读取文件属性

    4. 文件 vs 目录的 w 权限风险
    • 目录有 w 权限时,即使文件属于 root,也可以被删除或重命名。
    • 建议:共享目录使用 SBIT 防止他人删除自己的文件。

    三、chmod – 修改权限

    1. 字符方式

    对象

    说明

    u

    拥有人

    g

    拥有组

    o

    其他人

    a

    所有人

    操作符

    说明

    +

    增加权限

    删除权限

    =

    覆盖权限

    chmod u+x file # 拥有人加执行
    chmod o-w file # 其他人去掉写
    chmod u=rwx,g=rx,o=r file
    chmod a+x file # 所有人加执行

    2. 数字方式

    数字

    权限

    4

    r–

    2

    -w-

    1

    –x

    chmod 640 file # 拥有人读写(4+2),组读(4),其他人无(0)
    chmod 755 file # rwxr-xr-x
    chmod 777 file # 所有人所有权限

    拥有人即使没有 w 权限,仍可通过 :wq! 强制保存(仅限 root 或文件拥有人)。


    四、chown – 修改拥有人/组

    chown zhangsan file # 改拥有人
    chown :zhangsan file # 改拥有组
    chown zhangsan:zhangsan file # 同时改
    chgrp group file # 只改组


    五、三大特殊权限

    1. SUID(Set User ID)
    • 作用对象:二进制可执行文件
    • 效果:任何人执行该文件时,以文件拥有人身份运行
    • 典型示例:/bin/passwd(普通用户可改密码,写入 /etc/shadow)

    chmod u+s /bin/file
    chmod 4755 /bin/file

    ❌ 不适合脚本、目录。

    2. SGID(Set Group ID)
    • 作用于文件:以文件拥有组身份执行
    • 作用于目录:目录下新创建的文件继承目录的组

    chmod g+s dir
    chmod 2755 dir

    3. SBIT(Sticky Bit)
    • 作用对象:目录
    • 效果:用户只能删除/重命名自己的文件
    • 典型示例:/tmp

    chmod o+t dir
    chmod 1755 dir

    查看特殊权限

    ls -l /bin/passwd # rwsr-xr-x
    stat /bin/passwd # Access: (4755)4代表有SUID权限

    标识

    含义

    s

    有 SUID + x

    S

    有 SUID 无 x

    t

    有 SBIT + x

    T

    有 SBIT 无 x


    六、ACL权限(访问控制列表)

    1. 为什么需要 ACL?

    传统权限只能控制 u/g/o,无法为多个指定用户单独授权。

    2. 设置ACL

    # 给用户 mengxin 设置读权限
    setfacl -m u:mengxin:r– /etc/shadow

    # 给用户 zhangsan 设置写权限
    setfacl -m u:zhangsan:-w- /etc/shadow

    # 给用户 wangwu 设置读写权限
    setfacl -m u:wangwu:rw- /etc/shadow

    # 给组设置权限
    setfacl -m g:zhangsan:rw- /etc/shadow

    3.查看ACL

    ll /etc/shadow # 权限位后会多一个 '+' 号
    # ———-+ 1 root root …

    getfacl /etc/shadow #获取ACL详细信息

    #输出示例
    # file: etc/shadow #文件路径
    # owner: root 拥有人
    # group: root 拥有组
    user::— 拥有人权限,如果冒号之间没有用户就是拥有人权限
    user:mengxin:r– 用户ACL权限,有名字是指定用户ACL权限
    group::— 拥有组权限
    mask::r– ACL权限掩码决定文件的有效权限
    other::— 其他人权限

    4. 匹配优先级(有 ACL 时)
  • 用户 ACL 权限
  • 文件拥有人权限
  • 用户组 ACL 权限
  • 文件拥有组权限
  • 其他人权限
  • 5. ACL 的 mask 掩码(权限掩码)
    • mask 决定 ACL 用户的有效权限
    • 若 mask 为空,即使配置了 ACL 也无效
    • ls -l 显示的组权限位置,实际上显示的是 mask 值(当文件有 ACL 时)
    • 使用 chmod g+rwx 修改的是 mask,不是真正的拥有组权限

    # 修改 mask
    setfacl -m m::rwx /etc/shadow

    # 修改真正的拥有组权限
    setfacl -m g::rwx /etc/shadow
    #冒号中间写了就是修改组的ACL 权限

    setfacl -n -m m::rwx /etc/shadow
    #-n不要自动重新计算 mask

    注意:chmod g+rwx 修改的是 mask,不是拥有组权限。

    chmod g+rwx /etc/shadow —>修改的其实是mask值

    等价于setfacl -m m::rwx /etc/shadow

    修改拥有组的权限:setfacl -m g::rwx /etc/shadow === 相当于原来的chmod g=rwx /etc/shadow

    修改其他人的权限:setfacl -m o::rwx /etc/shadow

    修改拥有人的权限:setfacl -m u::rwx /etc/shadow

    6.删除ACL

    setfacl -x u:mengxin /etc/shadow # 删除指定用户的 ACL
    setfacl -b /etc/shadow # 删除所有 ACL

    7. 默认 ACL(继承)

    需求:让 /opt 目录下新创建的文件/子目录自动继承 mengxin 的 rwx 权限。

    setfacl -m d:u:mengxin:rwx /opt/

    • 新文件/目录自动继承 ACL
    • 对已有文件无影响,对目录本身无效
    • 删除默认 ACL:setfacl -k /opt
    7. ACL 管理命令总结

    命令

    作用

    setfacl -m u:user:rwx file

    添加用户 ACL

    setfacl -x u:user file

    删除用户 ACL

    setfacl -b file

    清空所有 ACL

    getfacl file

    查看 ACL


    其他系的自己装一个软件包

    七、sudo 提权(权限委派)

    1. 配置文件 /etc/sudoers
    /etc/sudoers.d目录下也能配置,按照个人习惯

    root ALL=(ALL) ALL
    %wheel ALL=(ALL) ALL #组

    格式:

    用户 主机=(提权身份) 命令

    2. 示例

    zhangsan ALL=(root) /usr/sbin/useradd
    %lisi ALL=(ALL) NOPASSWD:ALL

    3. 别名定义

    大写字母

    别名类型

    说明

    User_Alias

    用户别名

    Host_Alias

    主机别名

    Runas_Alias

    提权身份别名

    Cmnd_Alias

    命令别名

    示例:

    User_Alias ADMINS = zhangsan, lisi
    Host_Alias LABS = lab.example.com
    Runas_Alias OP = root, wangwu
    Cmnd_Alias TOOLS = /usr/bin/touch, /usr/sbin/useradd
    ADMINS LABS=(OP) NOPASSWD:TOOLS

    4. 常用 sudo 选项

    选项

    说明

    sudo -u root cmd

    以 root 执行

    sudo -k

    强制下次提权输入密码

    sudo -l

    查看当前用户可执行的 sudo 命令

    5.sudo的弊端

    cd命令不能执行


    八、umask – 默认权限掩码

    1. 计算公式
    • 文件默认权限 = 666 – umask
    • 目录默认权限 = 777 – umask
    2. 示例

    umask

    文件权限

    目录权限

    022

    644

    755

    223

    444(自动去掉 x)

    554

    普通文件永远不会有执行权限,若计算结果包含 x 则自动 +1。

    3. 查看与设置

    umask # 查看当前
    umask 022 # 临时设置

    4. 永久设置
    • 所有用户:/etc/bashrc、/etc/profile
    • 指定用户:~/.bashrc、~/.bash_profile

    第二部分:IO重定向与管道

    一、标准输入输出

    类型

    编号

    名称

    默认设备

    stdin

    0

    标准输入

    键盘

    stdout

    1

    标准正确输出

    屏幕

    stderr

    2

    标准错误输出

    屏幕

    二、输出重定向

    符号

    说明

    >

    覆盖正确输出

    >>

    追加正确输出

    2>

    覆盖错误输出

    2>>

    追加错误输出

    &>

    全部输出

    2>&1

    错误输出重定向到正确输出

    ls /etc/passwd > ok.log
    ls /etc/xxx 2> err.log
    find / -name selinux &> all.log
    ls /etc/xxx > /dev/null 2>&1

    三、输入重定向

    mail -s "test" user < file.txt

    四、管道符 |

    • 只能传递正确输出
    • 将前一个命令的输出作为后一个命令的输入

    ls -l | grep .conf
    echo 1 | passwd –stdin devops

    五、三通管道 tee

    • 同时输出到屏幕和文件

    ls -l | tee list.txt | grep .txt

    六、特殊设备文件

    设备

    说明

    /dev/null

    黑洞文件,丢弃所有输入

    /dev/zero

    无限输出 0 字符

    dd if=/dev/zero of=/opt/swap bs=1M count=1024


    第三部分:vim 编辑器高级特性

    一、三大基本模式

    模式

    特征

    切换方式

    命令模式

    默认模式,可移动光标、删除、复制

    打开文件时

    编辑模式

    可编辑内容

    按 i(光标处)、a(光标下一行)、o(光标后一个字符)、I(光标所在行首)、A(光标行尾)、O(光标上一行)

    末行模式

    保存、退出、替换

    按 :

    编辑模式 ↔ 末行模式 必须经过命令模式(按 ESC)

    二、命令模式常用操作

    操作

    快捷键

    光标移动

    h/j/k/l 或方向键

    翻页

    ctrl+f(下)、ctrl+b(上)

    跳转行

    10G(指定行)、G(末尾)、gg(开头)

    行首/行尾

    ^ / $

    复制行

    yy,5yy(复制5行)

    粘贴

    p(粘贴到下一行),P(粘贴到上一行)

    删除行

    dd,5dd(删除5行)

    删除光标所在行到末尾

    dG

    撤销

    u

    反撤销

    ctrl+r

    查找

    /关键字(n/N 下上),?关键字(n/N 上下)

    加序号

    set nu

    三、末行模式常用命令

    命令

    说明

    :wq

    保存退出

    :w

    保存

    :q!

    强制退出

    :w /path

    另存为

    :set number

    显示行号

    :set paste

    粘贴模式

    :s/old/new

    替换当前行第一个

    :%s/old/new/g

    全局替换

    遇到特殊字符不能替换加反斜杠\\

    四、可视化模式(ctrl+v)

    删除 X

    • 批量注释:
  • ctrl+v 选择列
  • I 进入编辑
  • 输入 #
  • 按 ESC
  • 五、多窗口模式

    命令

    说明

    :sp file

    水平分屏

    :vsp file

    垂直分屏

    ctrl+w + 方向

    切换窗口

    六、常见问题

    现象

    原因

    解决

    .swp 文件提示

    文件被占用或异常退出(防止多人同时修改)

    删除 .swp 文件

    按 q: 进入历史记录

    错误操作

    输入 :q 退出



    赞(0)
    未经允许不得转载:171主机测评 » 四、Linux 文件权限+sudo权限委派+IO重定向+vim高级
    分享到: 更多 (0)

    评论 抢沙发

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