
模块L03 用户、组与 DAC篇号L03-03 / 38预计阅读45 分钟主线Linux 设备与存储文章目录本篇目标30 秒速览正文1. chmod改权限1.1 八进制模式1.2 符号模式1.3 谁能改2. chown / chgrp改属主与属组3. umask新建时的「默认扣除」4. sticky bit目录谁能删5. setuid / setgid认得出即可6. 和挂载、镜像的衔接常用选项清单必会chmodchown / chgrpumask特殊位配合 chmodAndroid 对照检查清单练习判断题对 / 错选项题操作题远程服务器操作题Android只读观察优先本篇边界下一篇预告本篇目标在会读 ugoL03-02的基础上学会改chmod改权限、chown/chgrp改属主属组、umask影响新建默认权限并理解目录sticky bit以及 setuid/setgid 的够用认知。收口这些命令的常用选项能在远程服务器上安全练会并知道 Android 上常见改法入口如 init 脚本里的chmod/chown。30 秒速览chmod八进制0755或符号模式ux,g-w-R递归要谨慎。chown改属主/属组chown user:group-R同样危险。umask从「请求权限」里扣掉的位决定新建文件/目录的默认权限。stickychmod t/1777目录里通常只能删自己的文件如/data/local/tmp一类思路。setuid/setgid执行时提权/强制组存储排障认得出即可本篇不展开攻击面。真机改系统分区常受只读挂载与策略限制完整选项在服务器练。正文1.chmod改权限1.1 八进制模式cd/tmpmkdir-pchmod-labcdchmod-labechohia.txtchmod644a.txtchmod755.stat-c%a %A %na.txt.与 L03-02 一致0644rw-r--r--0755rwxr-xr-x。写四位时最高位是特殊位sticky/setgid/setuid见第 5 节日常文件常用三位或前导0的四位。1.2 符号模式chmod [ugoa...][-][rwxXst...] 文件...chmodux tool.sh# 属主加执行chmodgo-w a.txt# 组与其他人去掉写chmodar a.txt# 所有人加读a ugochmodurwx,grx,o.# 直接指定各组chmod-Rgw tree/# 递归务必确认路径谁含义ugo属主 / 属组 / 其他a全部默认有时等同于 a-添加 / 去掉 / 赋成指定集合X仅当已是目录或已有某人x时才加x递归时很有用chmod-RurwX,grX,orX tree/# 目录保留可穿越文件不一定被强行 x1.3 谁能改通常文件属主可chmodroot 可改任意。Android 上shell用户往往不能改/data根或系统文件需adb root或在 init 阶段设置。2.chown/chgrp改属主与属组# 服务器示例需相应权限sudochownalice a.txtsudochownalice:devs a.txt# 属主 alice属组 devssudochown:devs a.txt# 只改属组sudochgrpdevs a.txt# 等价只改属组sudochown-Ralice:alice tree/stat-c%U:%G %u:%g %na.txtls-lna.txtAndroid 示意需 root路径因产品而异adb root adb shellchownsystem:system /productiondata adb shellchmod0777 /productiondata adb shellls-ldn/productiondata注意挂载为ro时改不了先 remount / 查 fstabL07。改属主属组是 DACSELinux 标签是另一层后续专栏。符号链接默认chown常改链接本身或跟随取决于实现与-h改 by-name 前先分清对象L02-03。3.umask新建时的「默认扣除」创建文件/目录时内核先有一个请求模式再与 umask按位清除。直觉简化文件常用请求 0666 目录常用请求 0777 实际权限 ≈ 请求 ~umaskumask# 查看如 0022umask-S# 符号形式touch/tmp/u1mkdir/tmp/ud1stat-c%a %n/tmp/u1 /tmp/ud1# umask 022 时常见文件 644目录 755umask0077touch/tmp/u2mkdir/tmp/ud2stat-c%a %n/tmp/u2 /tmp/ud2# 常见文件 600目录 700umask文件常得目录常得直觉022644755其他人只读文件/ 可进可列目录027640750其他人无权限077600700仅自己脚本里需要可预期权限时显式chmod不要只靠 umask。Android 上进程 umask 由运行环境决定产品分区最终权限更常在 init / 安装逻辑里chownchmod钉死。4. sticky bit目录谁能删粘滞位加在目录上时通常有写权限也不意味着能删别人的文件常见规则是「只能删自己的」root 例外。# 服务器演示mkdir-p/tmp/sticky-labchmod1777/tmp/sticky-labls-ld/tmp/sticky-lab# 末位常显示 tdrwxrwxrwtd rwx rwx rwt │ └─ o 的 x 位置出现 t sticky 仍有 x │ 若无 x 而有 sticky有的实现显示 T八进制1出现在四位模式最高位如1777。Android/data/local/tmp一类目录常带 sticky避免用户互相删文件。自定义分区若给0777要考虑是否加 sticky1777——产品策略问题本篇先会认、会设。5. setuid / setgid认得出即可特殊位八进制高位ls常见样子够用认知setuid4xxx属主x处为s无 x 则为S执行文件时以文件属主身份跑setgid2xxx属组x处为s文件以属组跑目录新建项继承目录属组sticky1xxx其他x处为t见上一节chmod4755some_root_helper# setuid 示例勿乱做chmod2755shared_dir# 目录 setgid新建文件跟目录组chmod1777/tmp/sticky-lab存储排障见到s/t能解释不要在块设备节点上乱加这些位。细节与安全模型留给专项。6. 和挂载、镜像的衔接镜像/格式化时的默认权限 → 首次启动 init 里 chown/chmod → 运行时进程 umask 影响新建文件 → 人为 adb shell 修改常需 root且可能下次开机被脚本改回自定义分区常见目标示意挂载点目录 chmod 0777 chown system:system 块设备节点 chmod 0660 chown root:system块设备为何用0660而不是0777L03-04。常用选项清单必会chmod选项/用法含义典型场景Android/toybox远程服务器MODE八进制直接指定权限chmod 644 f有有ugoa[-]rwxXst符号模式chmod ux f有有-R递归整树改权路径必须核对有有-v打印每个改动调试脚本视实现有-c仅当有改动时汇报脚本少噪音视实现有-f尽量压制错误信息批处理视实现有--referenceRFILE权限抄自另一文件对齐权限常无有GNUX符号条件加执行位chmod -R arX tree视实现有chmod -h/ 不跟随改符号链接本身实现相关少见先分清对象视实现视实现chown/chgrp选项/用法含义典型场景Android/toybox远程服务器USER只改属主chown system f有需权限有USER:GROUP同时改属主属组chown system:system d有有:GROUP/.GROUP只改属组chown :system f视实现有chgrp GROUP只改属组同上有有-R递归整树改属主有有-h不跟随符号链接改链接本身处理 symlink视实现有-v/-c/-f汇报/安静脚本视实现有--referenceRFILE属主属组抄自参考文件对齐常无有GNU--fromOU:OG仅当旧属主匹配才改安全批处理常无有GNUumask用法含义典型场景Android/toybox远程服务器umask显示当前掩码常为八进制检查默认有有umask -S符号形式显示可读视实现有umask MODE设置当前 shell 掩码脚本开头有有umask -p可重新输入的输出形式保存/恢复视实现有umask是 shell 内建影响当前 shell 及其子进程的新建文件默认权限。特殊位配合chmod用法含义典型场景chmod t DIR/chmod 1777 DIR目录 sticky共享可写目录chmod gs DIR/chmod 2755 DIR目录 setgid新建文件继承组chmod us FILE/chmod 4755 FILE文件 setuid认得出慎用Android 对照场景说明adb shell chmod/chown常需adb rootsystem 分区可能 roinit.rc / *.rc开机阶段chmod/chown/mkdir钉死权限umask各守护进程各自环境产品权限勿只靠交互 shell 的 umasktoybox支持常用chmod/chownGNU 长选项可能缺失adb root adb shellidadb shellls-ld/data/local/tmp adb shellstat-c%a %A %U:%G %n/data/local/tmp若看到drwxrwxrwt或模式1777即为带 sticky 的共享临时目录形态。检查清单会用八进制与符号两种chmod知道-R的风险改前核对路径会用chown user:group/chgrp并用ls -ln/stat验证能解释umask 022与新建644/755的关系能认出并设置目录 stickyt/1777见到s/t能区分 setuid、setgid、sticky练习判断题对 / 错chmod 755 file与chmod urwx,grx,orx file可以达到同一套 ugo 权限。umask直接改已有文件的权限。目录 sticky 位的常见作用是即使目录对所有人可写普通用户一般也不能删别人的文件。chown -R可以随便对/执行以「统一权限」。参考答案对。错。影响新建默认权限。对。错。极度危险且会破坏系统。选项题希望目录shared权限为所有人可读写穿越且带 sticky应使用A.chmod 0777 sharedB.chmod 1777 sharedC.chmod 2755 sharedD.umask 0777参考答案B。1表示 sticky777为 ugo 全开。A 无 stickyC 是 setgid755D 不是设置该目录权限的正确方式。操作题远程服务器cd/tmprm-rfchmod-lab sticky-labmkdirchmod-lab sticky-labechoxchmod-lab/a.txtchmod640chmod-lab/a.txtchmodux,go-w chmod-lab/a.txtstat-c%a %A %nchmod-lab/a.txtchmod1777sticky-labls-ldsticky-labumask0022rm-f/tmp/um1;touch/tmp/um1stat-c%a/tmp/um1# 若有 sudo练习 chown用户名换成自己的# sudo chown $USER:$USER chmod-lab/a.txt# ls -ln chmod-lab/a.txt操作题Android只读观察优先adb shellls-ld/data/local/tmp adb shellstat-c%a %A %U:%G %n/data/local/tmp2/dev/null判断是否带 sticky符号里的t或模式1xxx。本篇边界不讲块设备为何不该0777的专项论证L03-04不讲 init.rc 语法与 fs_mgr后续专栏不讲 SELinuxrestorecon/ file_contexts不讲 ACLgetfacl扩展权限模型下一篇预告L03-04《目录权限 vs 块设备权限为什么块设备不该0777》— 把挂载点目录与/dev/block节点两套权限彻底分开收口 L03。