基于PIC18F4553的低成本便携式条码扫描器开发
2026/7/3 21:28:50
系统中存在两个用户账号:
特点如下:
/srv/ahome目录下的项目管理员目标:
chmod、chgrp等命令完成配置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)说明:
mkdir/srv/ahome ll -d /srv/ahome drwxr-xr-x2root root4096Sep2922:36 /srv/ahome此时目录:
这显然不符合需求。
管理员通常会想到:
chgrpproject /srv/ahomechmod770/srv/ahome此时目录权限为:
drwxrwx--- root project /srv/ahome看起来很合理:
su- alexcd/srv/ahometouchabcd ll abcd结果类似:
-rw-rw-r--1alex alex0Sep2922:46 abcd⚠️问题关键在这里:
su- arodcd/srv/ahome ll abcd分析:
👉 即使目录权限正确,文件权限已经破坏协作
👉 arod无法修改 alex 创建的文件
Linux 默认规则:
新文件的属组 = 创建者的“主组”
这意味着:
chgrp👉传统权限机制不适合多人项目开发目录
当SGID 设置在目录上时:
该目录中创建的所有新文件和子目录,自动继承目录的属组
⚠️ 注意:
chmod2770/srv/ahome权限含义拆解:
| 位 | 含义 |
|---|---|
| 2 | SGID |
| 7 | owner:rwx |
| 7 | group:rwx |
| 0 | other:— |
查看结果:
ll -d /srv/ahome drwxrws---2root project4096Sep2922:46 /srv/ahomes表示:SGID 已生效
su- alexcd/srv/ahometouch1234ll1234结果:
-rw-rw-r--1alex project0Sep2922:531234✔ 文件属组:project
👉双方可以互相修改文件
| 优点 | 说明 |
|---|---|
| 自动继承组 | 文件永远属于 project |
| 权限一致 | 不会因主组不同而失效 |
| 管理成本低 | 无需频繁 chgrp |
| 安全性高 | other 永久无权访问 |
| 符合协作模型 | 适合源码、脚本、配置文件 |
多人开发目录标准配置:
chgrpproject /srv/ahomechmod2770/srv/ahome配合:
umask002这是Linux 项目开发环境的经典方案。
在多人协作的项目目录中,仅依靠传统权限无法保证文件属组一致,必须通过在目录上设置 SGID,使新建文件自动继承项目组,从而确保组内成员能够互相修改文件,同时避免权限混乱。这是系统管理员配置开发环境的标准做法。