当前位置: 首页 > news >正文

【Linux系统】Linux权限 | Shell命令以及运行原理

1. Shell命令以及运行原理

一、Shell命令的运行原理(前期理解)

  1. Shell的本质
    Shell是命令行解释器(Command Interpreter),核心功能是翻译用户指令

    • 将用户输入的命令翻译为操作系统内核(Kernel)能理解的指令 。
    • 将Kernel的处理结果翻译为用户可读的反馈(如终端输出)。
  2. 运行流程简化模型
    用户输入命令 → Shell解析命令 → 调用Kernel执行 → Kernel返回结果 → Shell输出结果 。
    关键点:即使未学习进程知识,可类比为**“翻译官”角色**:用户通过翻译官(Shell)与外国人(Kernel)沟通,避免直接交流障碍 。


二、为什么不能直接使用Kernel?

  1. 安全性与稳定性
    Kernel是操作系统的核心,直接操作可能导致:

    • 系统崩溃:用户误操作(如删除关键文件)会破坏系统稳定性 。
    • 非法访问:未授权操作可能引发安全漏洞(如越权访问硬件)。
  2. 易用性门槛
    Kernel操作需深入理解系统底层(如内存管理、硬件驱动),对普通用户极不友好 。
    例如:删除文件需直接操作磁盘数据结构,而Shell只需rm file.txt 。

  3. 设计哲学
    操作系统通过Shell/GUI等“外壳程序”隔离用户与内核,实现分层保护(类似防火墙)。


三、对比Windows GUI与Linux Shell

维度Windows GUILinux Shell本质共性
交互方式图形界面(点击图标/菜单)命令行(输入文本指令)均为用户与内核的中间层 
操作示例双击D盘图标进入D盘 输入cd /mnt/d进入D盘 GUI将点击翻译为系统调用,Shell将文本翻译为系统调用 
优势直观易用,适合普通用户 高效灵活,适合自动化与高级操作 均保护内核并简化操作 

核心结论:二者本质均为 用户与操作系统的“代理” ,GUI是图形化代理,Shell是文本化代理 。


四、通俗示例帮助理解

场景:餐厅点餐流程

  • 用户:顾客(想吃饭的人)。
  • Shell/GUI:服务员(接受用户指令并传达后厨)。
  • Kernel:厨师(实际执行烹饪操作)。

举个通俗易懂的例子:

假设你去餐厅吃饭,内核就像是厨师,他负责准备食物(处理任务),而Shell就像是服务员,他接收你的点餐(命令),然后告诉厨师去做(调用内核功能),最后把食物(结果)端给你。你不需要直接和厨师交流,只需要和服务员交流就行。在Windows系统中,GUI就像是一个点餐机,你通过触摸屏幕选择食物,这也很方便,但相对而言没有服务员(Shell)那样灵活,可以处理更复杂的点餐需求。

流程对比

  1. Linux Shell场景

    • 顾客对服务员说:“要一份番茄炒蛋”(命令cook egg_tomato)。
    • 服务员(Shell)翻译为后厨指令:“番茄200g+鸡蛋3个,大火翻炒3分钟”(Kernel指令)。
    • 厨师(Kernel)完成后,服务员将菜品端给顾客(输出结果)。
  2. Windows GUI场景

    • 顾客点击菜单上的“番茄炒蛋”图片(图形化操作)。
    • 服务员(GUI)将点击动作翻译为后厨指令(同Shell的翻译功能)。
    • 厨师完成菜品后由服务员端上 。

为何不能直接找厨师?

  • 顾客进厨房操作灶具(直接操作Kernel)可能导致:
    • 烧伤自己(系统崩溃)。
    • 干扰其他厨师工作(破坏多任务环境)。
  • 服务员的存在保证了效率与安全(隔离用户与核心系统)。

总结

  • Shell原理:用户指令的翻译官与传递者 。
  • 禁用直接Kernel访问:防止误操作破坏系统,降低使用门槛 。
  • Shell vs. GUI:前者以文本为媒介,后者以图形为媒介,但核心角色一致 。
  • 学习建议:前期可将Shell理解为“系统操作指令的翻译器”,后续再深入进程、系统调用等机制 。

2. Linux权限

2.1 Linux权限的概念

🔐 Linux权限体系核心:两类用户与切换机制

Linux通过严格的用户权限管理保障系统安全,其权限体系围绕 两种用户类型 和 三类切换命令 构建,下面从概念到实操全面解析。


⚖️ 一、用户分类:权限的底层逻辑
用户类型权限范围命令提示符创建方式典型场景
超级用户
(root)
无限制(可修改系统文件、安装全局软件等)#系统默认存在系统配置、软件安装、权限分配
普通用户受限(仅操作个人目录,禁止修改系统)$useradd 或 adduser 日常开发、文件编辑

关键差异

  • root用户UID=0,普通用户UID≥1000 
  • 普通用户操作受/etc/sudoers文件限制 

🔁 二、用户切换:三大命令详解

1. su命令(全切换)

su - [用户名]  # 加载目标用户环境变量(推荐)  
su [用户名]    # 不加载环境变量,保留原工作目录  
  • 切换root

    $ su -   # 或 su - root → 输入root密码
    # 成功提示符变为 #
    
  • 切换普通用户

    # su - alice  # root切用户免密
    $ su - bob    # 普通用户互切换需输入目标用户密码 
    
  • 退出用户

    $ exit  # 或 Ctrl+D 退回原用户 
    

2. sudo命令(临时提权)

sudo [命令]  # 以root权限执行单条命令
  • 前置条件:需在/etc/sudoers中授权
  • 示例
    $ sudo apt install nginx  # 普通用户安装软件
    

3. sudo -i(切换root环境)

$ sudo -i  # 直接进入root的HOME目录并加载环境变量 

操作注意

  • 输入密码时终端无回显(不显示*号) 
  • 使用su -而非su避免环境变量污染 

🛠️ 三、场景化命令对比
需求场景推荐命令优势
长期执行管理员任务su - → 执行任务 → exit环境隔离彻底
单次安装软件sudo apt install无需完全切换用户
调试其他用户环境su - bob完整加载目标用户配置 

⚠️ 四、安全实践指南
  1. 最小权限原则

    • 日常操作使用普通用户,避免误操作导致系统崩溃 
  2. sudoers精细授权

    # 在/etc/sudoers添加:  
    alice ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl  # 仅允许执行apt和systemctl
    
  3. 切换后验证身份

    $ whoami  # 显示当前用户 
    $ id      # 查看用户UID/GID 
    

💎 总结

Linux权限体系通过用户隔离精细切换实现安全与效率的平衡:

  1. 两类用户:root(#)掌握生杀大权,普通用户($)受限操作
  2. 三条通路
    • su - → 完全环境切换
    • sudo → 临时特权执行
    • sudo -i → 快速进入root环境
  3. 安全铁律:日常用普通用户,特权操作后立即退出root!

示例:

# 1. 当前用户身份验证(root用户)
root@hcss-ecs-d90d:\~# whoami  
root  # 确认当前是root超级用户# 2. 切换到普通用户ltx(保留环境变量)
root@hcss-ecs-d90d:\~# su ltx  # 3. 验证切换后用户身份
ltx@hcss-ecs-d90d:/root$ whoami  
ltx  # 当前已变为普通用户ltx# 4. 尝试列出/root目录内容(失败)
ltx@hcss-ecs-d90d:/root$ ls -a  
ls: cannot open directory '.': Permission denied  
# 原因:普通用户无权访问root的家目录(默认权限700)# 5. 返回当前用户(ltx)的家目录
ltx@hcss-ecs-d90d:/root$ cd \~  # 6. 列出ltx家目录内容(成功)
ltx@hcss-ecs-d90d:\~$ ls -a  
.  ..  .bash_history  .bash_logout  .bashrc  .profile  
# 显示标准用户配置文件(用户对自己的家目录有完全权限)# 7. 退出当前shell环境(返回root用户)
ltx@hcss-ecs-d90d:\~$ exit  
root@hcss-ecs-d90d:\~#  # 提示符变回root# 8. 以root身份列出/root目录内容(成功)
root@hcss-ecs-d90d:\~# ls -a  
.  ..  .bash_history  .bashrc  .cache  config.yml  file1.log  file2.log  file.txt  .history  .lesshst  .local  mydir  mydir1  mydir2  private  .profile  snap  .ssh  team_shared  test.txt  .viminfo  .Xauthority  
# root可查看所有系统文件(含隐藏文件)# 9. 再次切换到ltx用户
root@hcss-ecs-d90d:\~# su ltx  # 10. 确保位于ltx家目录
ltx@hcss-ecs-d90d:/root$ cd \~  # 11. 尝试复制mydir(失败:文件不存在)
ltx@hcss-ecs-d90d:\~$ cp mydir \~  
cp: cannot stat 'mydir': No such file or directory  
# 原因:当前目录(/home/ltx)没有mydir文件# 12. 尝试绝对路径复制(失败:权限不足)
ltx@hcss-ecs-d90d:\~$ cp /root/mydir \~  
cp: cannot stat '/root/mydir': Permission denied  
# 原因:普通用户无权读取/root目录# 13. 尝试递归复制(同样失败)
ltx@hcss-ecs-d90d:\~$ cp -r /root/mydir \~  
cp: cannot stat '/root/mydir': Permission denied  
# 原因:-r参数解决目录复制问题,但未解决权限问题# 14. 使用sudo提权复制(成功!)
ltx@hcss-ecs-d90d:\~$ sudo cp -r /root/mydir \~  
[sudo] password for ltx:  # 输入ltx用户密码
# sudo临时赋予root权限,突破目录访问限制# 15. 验证复制结果
ltx@hcss-ecs-d90d:\~$ ls -a  
.  ..  .bash_history  .bash_logout  .bashrc  mydir  .profile  
# 出现mydir目录,复制成功# 16. 查看目录结构
ltx@hcss-ecs-d90d:\~$ tree mydir  
mydir
├── a
│   └── b
│       └── c
├── file.txt
└── test.txt
3 directories, 2 files  
# tree命令显示完整目录结构(需安装tree包)# 18. 退出当前会话
ltx@hcss-ecs-d90d:\~$ exit  

2.2 Linux权限管理详解

一、权限的本质与必要性

  • 权限是什么
    权限是操作系统对资源访问的控制机制,通过限制用户对文件/目录的读写执行能力,保障系统安全与数据隔离。例如:VIP用户可访问会员区(r),普通用户仅能查看公共区(r--)。
  • 为什么需要权限
    • 防止误操作或恶意破坏(如普通用户删除系统文件)。
    • 实现多用户环境下的数据隐私(如用户A无法读取用户B的私人文件)。
    • 超级用户(root)拥有无限制权限,普通用户受约束。

二、文件访问者分类(角色)

Linux将用户分为三类,通过角色+文件属性控制访问:

角色身份定义权限范围存在意义
所有者 (u)文件创建者或指定用户可独立设置文件的rwx权限明确责任主体,避免多人争改文件
所属组 (g)与文件关联的用户组组内成员共享相同权限(如团队协作目录)简化批量权限管理
其他用户 (o)既非所有者也非组员的用户默认限制性权限(如仅读)保护文件不被无关用户访问

示例
文件report.txt权限为-rw-r-----(所有者可读写,组员仅读,其他人无权)。
若组员需编辑,命令:chmod g+w report.txt → 权限变为-rw-rw----


三、文件类型与访问权限

1. 文件类型(首字符标识)
类型标识示例说明
目录ddrwxr-xr-x存储文件的容器
普通文件--rw-r--r--文本/二进制文件
软链接llrwxrwxrwx快捷方式
套接口ssrw-rw----进程间通信文件
2. 权限作用
权限文件功能目录功能
r读取内容列出目录内容(如ls
w修改内容创建/删除目录内文件
x执行程序进入目录(如cd

关键区别

  • 目录的w权限不直接控制文件内容修改,而是控制文件增删。
  • 目录必须有x权限才能操作其内部文件。
  • 目录的x权限是进入前提(无xls失败)。
  • 目录的w权限需配合x生效(否则无法创建文件)。

示例
目录/projects权限为drwxr-x---

  • 所有者可进入、创建文件
  • 组员可进入、查看文件列表
  • 其他用户无法访问

四、权限值的表示方法

  1. 字符表示rwxr-xr--
    • 分三段:u(所有者)、g(组)、o(其他)
    • 例如:rwxr-x--- 表示所有者可读/写/执行,组可读/执行,其他无权限。
  2. 数字表示(8进制)
    • r=4, w=2, x=1,三者相加
    • 例如:rwxr-x--- → u=4+2+1=7g=4+1=5o=0 → 权限值750

五、权限设置方法

1. chmod:修改权限
# 符号法(操作直观)
chmod u+x script.sh    # 给所有者增加执行权
chmod g-w data.txt     # 移除组员的写入权
chmod o=r-- log.txt    # 设置其他用户仅可读# 数字法(批量设置)
chmod 755 script.sh    # rwxr-xr-x

:仅文件所有者或root可执行。

2. chown:修改所有者
chown alice report.txt          # 将所有者改为alice
chown alice:devteam project/    # 同时修改所有者和所属组
3. chgrp:修改所属组
chgrp developers app.py   # 将文件所属组改为developers
    4. umask:控制默认权限
    • 作用:决定新建文件/目录的初始权限(非减法!)。

    • 计算规则
      默认权限 = 基础权限 & ~umask

      • 文件基础权限:666(rw-rw-rw-
      • 目录基础权限:777(rwxrwxrwx
      umask 022              # 查看当前掩码:0022
      新建文件权限 = 666 & \~022 = 644(rw-r--r--)
      新建目录权限 = 777 & \~022 = 755(rwxr-xr-x)[[4, 15]]
      

      示例
      umask=027,新建文件权限:666 & \~027 = 640rw-r-----)。


    六、粘滞位(Sticky Bit)

    1. 作用

    为共享目录(如/tmp)设置后:

    • 允许:任何用户创建文件
    • 禁止:非所有者删除他人文件(仅root/文件所有者/目录所有者可删)
      解决痛点:避免共享目录中用户随意删除他人文件。
    2. 设置与识别
    chmod +t /shared_dir/   # 设置粘滞位
    ls -ld /shared_dir/      # 查看目录权限末位显示't'(如 drwxrwxrwt)
    

    示例
    用户A在/shared_dir创建fileA,用户B无法删除该文件,但可读/写自身文件。


    总结

    Linux权限通过 角色分离(u/g/o) 和 精细权限控制(r/w/x) 实现多用户环境的安全管理。chmodchownchgrp提供灵活设置,umask保障默认安全,而粘滞位解决了共享目录的删除冲突问题。理解文件与目录权限的差异(如目录需x权限)是避免操作错误的关键。

    http://www.lryc.cn/news/582237.html

    相关文章:

  • Python爬虫图片验证码和滑块验证码识别总结
  • Taro+Vue3实现微信小程序富文本编辑器组件开发指南
  • OpenCV人脸分析------绘制面部关键点函数drawFacemarks()
  • 虚幻引擎UE5 GAS开发RPG游戏-02 设置英雄角色-18 改成网络多人游戏
  • turborepo 如何解决git管理包过大的问题
  • 5、Receiving Messages:Message Listener Containers
  • Python实现文件夹中文件名与Excel中存在的文件名进行对比,并进行删除操作
  • 【无标题】三维拓扑量子色动力学模型:理论重构与实验验证
  • day16——Java集合进阶(Collection、List、Set)
  • windows安装python环境以及对应编辑器的详细流程
  • 从依赖地狱到依赖天堂PNPM
  • VmWare 安装 mac 虚拟机
  • 大模型在肾囊肿诊疗全流程预测及应用研究报告
  • 【保姆级喂饭教程】Git图形化客户端Sourcetree安装及使用教程
  • Linux系统从入门到精通!第四天(shell编程和Docker)
  • codeforces Round 1021-1030(部分题解)
  • 【Note】《Kafka: The Definitive Guide》第7章 Building Data Pipelines
  • 源哈希(sh)解析
  • etcd-cpp-apiv3 二次封装
  • [学习] C语言数学库函数背后的故事:`double erf(double x)`
  • 【数据分析】R语言基于虚弱指数的心血管疾病风险评估
  • JS实现基础算法与dom的结构
  • Spring MVC HandlerInterceptor 拦截请求及响应体
  • 【Netty高级】Netty的技术内幕
  • token非对称加密
  • AI的出现,是否能替代IT从业者
  • React19 新增Hooks:useOptimistic
  • 系统学习Python——并发模型和异步编程:进程、线程和GIL
  • 量子计算+AI芯片:光子计算如何重构神经网络硬件生态
  • 动手学深度学习13.7. 单发多框检测(SSD)-笔记练习(PyTorch)