news 2026/6/10 18:20:25

linux_实训2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
linux_实训2

文章目录

  • 一、问题场景说明(Scenario)
  • 二、传统权限方式的分析(不使用 SGID)
    • 1. 用户与组准备
    • 2. 创建开发目录
    • 3. 使用传统权限进行尝试
    • 4. 实际测试结果(问题出现)
      • alex 创建文件
      • arod 尝试访问
    • 5. 传统权限的根本缺陷
  • 三、SGID 的作用与解决方案
    • 1. 什么是 SGID(目录上的含义)
    • 2. 启用 SGID 并设置最终权限
    • 3. 再次测试(成功)
      • alex 创建文件
      • arod 访问文件
  • 四、为什么项目目录“必须”使用 SGID?
    • 1. 不使用 SGID 的后果
    • 2. 使用 SGID 的优势
    • 3. 管理员角度的最佳实践
  • 五、总结一句话

一、问题场景说明(Scenario)

系统中存在两个用户账号:

  • alex
  • arod

特点如下:

  • 两个账号各自有自己的主组
  • 同时都属于 project 这个附加组
  • 两人需要共同开发/srv/ahome目录下的项目
  • 其他用户不允许查看或访问该目录

管理员目标:

  • 让 alex 和 arod都能在该目录中创建、修改彼此的文件
  • 确保目录和文件的访问权限严格受控
  • 使用chmodchgrp等命令完成配置

二、传统权限方式的分析(不使用 SGID)

1. 用户与组准备

groupaddprojectuseradd-G project alexuseradd-G project arod

确认账号属性:

idalexuid=1008(alex)gid=1012(alex)groups=1012(alex),1011(project)idaroduid=1009(arod)gid=1013(arod)groups=1013(arod),1011(project)

说明:

  • 主组:alex / arod
  • 共同附加组:project

2. 创建开发目录

mkdir/srv/ahome ll -d /srv/ahome drwxr-xr-x2root root4096Sep2922:36 /srv/ahome

此时目录:

  • 属主:root
  • 属组:root
  • 权限:755(其他人可读)

这显然不符合需求


3. 使用传统权限进行尝试

管理员通常会想到:

  • 把目录属组改成 project
  • 给组写权限
  • 禁止其他人访问
chgrpproject /srv/ahomechmod770/srv/ahome

此时目录权限为:

drwxrwx--- root project /srv/ahome

看起来很合理

  • alex / arod 都在 project 组
  • 其他用户无法访问

4. 实际测试结果(问题出现)

alex 创建文件

su- alexcd/srv/ahometouchabcd ll abcd

结果类似:

-rw-rw-r--1alex alex0Sep2922:46 abcd

⚠️问题关键在这里:

  • 文件属主:alex
  • 文件属组:alex(主组)
  • 并不是 project

arod 尝试访问

su- arodcd/srv/ahome ll abcd

分析:

  • arod ≠ alex
  • abcd 的属组是 alex
  • arod不属于 alex 组
  • 因此 arod 被当成other

👉 即使目录权限正确,文件权限已经破坏协作
👉 arod无法修改 alex 创建的文件


5. 传统权限的根本缺陷

Linux 默认规则:

新文件的属组 = 创建者的“主组”

这意味着:

  • 多人协作目录中
  • 文件属组会被“分裂”
  • 权限管理复杂、不可控
  • 管理员需要频繁chgrp

👉传统权限机制不适合多人项目开发目录


三、SGID 的作用与解决方案

1. 什么是 SGID(目录上的含义)

SGID 设置在目录上时:

该目录中创建的所有新文件和子目录,自动继承目录的属组

⚠️ 注意:

  • 不改变属主
  • 只控制属组继承

2. 启用 SGID 并设置最终权限

chmod2770/srv/ahome

权限含义拆解:

含义
2SGID
7owner:rwx
7group:rwx
0other:—

查看结果:

ll -d /srv/ahome drwxrws---2root project4096Sep2922:46 /srv/ahome

s表示:SGID 已生效


3. 再次测试(成功)

alex 创建文件

su- alexcd/srv/ahometouch1234ll1234

结果:

-rw-rw-r--1alex project0Sep2922:531234

✔ 文件属组:project

arod 访问文件

  • arod 属于 project
  • umask = 002
  • 具有组写权限

👉双方可以互相修改文件


四、为什么项目目录“必须”使用 SGID?

1. 不使用 SGID 的后果

  • 文件属组混乱
  • 成员之间互相无法修改
  • 管理员需要频繁手动修正
  • 项目规模越大,问题越严重

2. 使用 SGID 的优势

优点说明
自动继承组文件永远属于 project
权限一致不会因主组不同而失效
管理成本低无需频繁 chgrp
安全性高other 永久无权访问
符合协作模型适合源码、脚本、配置文件

3. 管理员角度的最佳实践

多人开发目录标准配置:

chgrpproject /srv/ahomechmod2770/srv/ahome

配合:

umask002

这是Linux 项目开发环境的经典方案


五、总结一句话

在多人协作的项目目录中,仅依靠传统权限无法保证文件属组一致,必须通过在目录上设置 SGID,使新建文件自动继承项目组,从而确保组内成员能够互相修改文件,同时避免权限混乱。这是系统管理员配置开发环境的标准做法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 10:33:56

shell命令复习

一、Shell 与基础概念 1. Shell 的作用Shell 是 命令解释器功能: 接收用户输入的命令解析命令调用内核执行程序支持: 变量管道重定向条件执行二、Shell 变量 1. 变量的定义 namestring等号两边不能有空格变量名规则: 字母或下划线开头由字母、…

作者头像 李华
网站建设 2026/6/10 15:39:10

EmotiVoice助力无障碍阅读:为视障用户定制专属声音

EmotiVoice助力无障碍阅读:为视障用户定制专属声音 在数字信息爆炸的时代,我们每天通过屏幕获取新闻、阅读小说、浏览社交媒体。但对于全球超过3亿的视障人士而言,这些看似平常的行为却充满障碍。尽管屏幕阅读器早已存在,但冰冷、…

作者头像 李华
网站建设 2026/6/10 15:40:41

高效记忆:告别无效学习

您是否经常看到孩子熬夜背单词、记公式,第二天却忘得一干二净?明明花了大量时间在学习上,效果却总是不尽如人意。其实,这并非孩子不够努力,而是记忆方法出了问题。科学研究表明,人的大脑在不同状态下吸收信…

作者头像 李华
网站建设 2026/6/10 15:37:17

猫狗识别数据集:34,441张高质量标注图像,深度学习二分类任务训练数据集,计算机视觉算法研发,CNN模型训练,图像识别分类,机器学习实践项目完整数据资.md

引言与背景 在计算机视觉和深度学习领域,图像分类任务一直是最基础也是最重要的研究方向之一。随着卷积神经网络(CNN)技术的快速发展,以及迁移学习、数据增强等方法的广泛应用,图像分类模型的性能不断提升。然而&#…

作者头像 李华
网站建设 2026/6/10 16:14:39

14、嵌入式开发中的远程连接、调试与多线程编程

嵌入式开发中的远程连接、调试与多线程编程 1. 远程连接设置 在进行远程开发时,首先要建立与远程机器的连接。以下是具体步骤: 1. 可以将连接名称修改为你想要的,例如“BeagleBone”,描述也可以随意设置。 2. 点击“Next”,显示远程机器上可用的文件服务,此处无需更改…

作者头像 李华