Linux文件系统权限 文件的一般权限文件信息查看指令ll、ls -l构成按文件归属性对象分为owner所属者缩写ugroup所属组缩写gother其他人缩写o组成分析二进制表达字符表示二进制表示数字表示---0000--x0011-w-0102-wx0113r--1004r-x1015rw-1106rwx1117权限对文件对目录r(read可以读取文件的内容可以列出目录下的内容即目录下的文件的文件名w(write可以更改文件的内容可以创建或者删除目录中的任意文件 只有 w 权限无法创建删除文件需要和 x 权限一起使用x(execute)可以作为可执行文件如脚本执行 只有 x 权限不可执行文件需要与 r 权限连用可以切换到目录cdroot不受读写权限限制只受执行权限限制修改文件文件所属者和组chown修改文件或目录的所有者和组参数作用-R递归修改目录即所有子文件、子目录的所属者/组格式chown -参数 所有者/组 文件名/目录名chown root file #将file文件的所属者改为root chown zyz:zyz file #将file文件的所属者/组改为zyz #递归修改目录 mkdir test #创建文件夹test touch test/file{1..3} #再文件夹test下创建3个file文件 ll -d test/ ; ll test/ #查看test文件夹和文件夹下文件的信息 chown -R zyz:zyz test/ #修改test文件夹所属者/组为zyz ll -d test/ ; ll test/修改文件权限chmod全名change mode修改文件或目录的权限参数作用-R递归修改目录下所有文件以及子目录下所有文件权限字符型chmod -参数 u/g/o/a /-/ r/x/w 文件/目录名数字型chmod -参数 nnn 文件/目录名nnn用三位二进制表示权限#字符型 touch a.txt #新建文件 ll a.txt chmod x a.txt #给文件的三者添加x权限 ll a.txt chmod ow a.txt #只给o(owner)添加w权限 ll a.txt #数字型 touch b.txt #新建文件 ll b.txt chmod 777 b.txt #给三者添加77111rwx权限 ll b.txt chmod 000 b.txt #三者权限清零 ll b.txt #递归添加文件夹权限 mkdir -p a/b #递归创建文件夹 touch a/b/c.txt tree a/ ll -d m1/ ; ll -d a/b/ ; ll -d a/b/c.txt #逐级查看权限 chmod -R 777 m1/ #修改a文件及文件里的权限为777 ll -d a/ ; ll -d a/b/ ; ll -d a/b/c.txt #a文件夹及文件夹内的所有文件权限都是777特殊权限在Linux系统中文件除了rwx一般全权限外还有SET UIDSUIDSET GIDSGIDSticky Bit粘滞位用于对文件或目录进行更加灵活方便的访问控制SUID普通用户临时获得文件所有者权限所有者 u 执行位显示 s文件本身有 x 权限 或 S文件本身没有 x 权限设置 SUIDchmod us取消 SUIDchmod u-s/etc/shadow仅root可读写普通用户无权修改passwd 二进制带SUID 权限属主 root普通用户运行 passwd 时临时拥有 root 权限写入 shadow 更新密码ll /usr/bin/passwd # -rwsr-xr-x root属主s代表SUID ll /etc/shadow # ---------- 仅root可读可写suid 仅对二进制文件有效在执行过程中调用者会暂时获得该文件的所有者权限该权限只在程序执行的过程中有效‘SGID在目录下新建的文件和子目录会继承该目录的所属组Z可执行文件设置普通用户执行此文件时临时获得文件所属组权限所属组 g 执行位显示 s 文件/目录本身有 x 权限 或 S文件/目录本身没有 x 权限#实验准备 mkdir /a ll -d /a groupadd b #添加所属组b shown :b /a #修改所属组为b ll -d /a #在a目录没有SGID权限的情况下创建文件文件不会继承父目录的所属组 touch /a/aa ll /a/ chmod gs /a ll -d /a #在a目录有SGID权限下创建文件会继承父目录的所属组 touch /a/bb ll /a #如果目录的其他人权限没有w权限的话普通用户创建文件不会继承所属组 #给其他人添加w权限 chmod ow /a ll -d /a su - #切换用户再创建文件 touch /a/aa/aaa #普通用户创建文件所属组继承父目录Sticky Bit公共目录用户只能“删除/重命名/移动”自己创建的文件root除外其他人o执行位显示t目录本身有 x 权限 或 T目录本身没有 x 权限#上述公共目录文件不安全所有人都可以删除甚至可以删除root的文件 #给其他人这一组添加上 t 的权限使用 root 账户添加 ll -d /a chmod ot /a ll -d /a #假设rootfile为其他用户的文件userfile为自己的文件 rm -rf /a/rootfile #输出”不允许删除其他用户的文件“ rm -rf /a/userfile #删除成功只能删除自己的文件设置特殊权限格式指令SUIDchmod u ± sSGIDchmod g ± sSticky Bitchmod o ± t数字chmod nnnn​​​后三位是一般权限第一位是特殊权限第一位数字对应权限如下表特殊权限二进制表示数字表示-0000Sticky0011SGID0102SGID、Sticky0113SUID1004SUID、Sticky1015SUID、SGID1106SUID、SGID、Sticky1117ACL权限给指定用户/目录分配指定权限。上述权限的设置都是针对所属者所属组其他人这三个大类的限制如果要对其他人中的某一个人进行限制就要用到 ACL 访问控制列表来更加精确的限制某个人的权限getfacl查看ACL权限getfacl 文件名 #例子 touch a.cfg getfacl a.cfg #默认无ACL权限setfacl设置ACL权限setfacl -参数 文件名#创建a目录及所属组a_group #所属组里添加1、2用户此文件权限为770 #创建旁听用户3设定为a目录的ACL为r-x mkdir /a groupadd a_group useradd 1 useradd 2 gpasswd -M 1,2 a_group #将12用户添加到a_group里-M为覆盖组成员-a为追加 chown root:a_group /a chown 770 /a ll -d /a/ getfacl /a/ #查看a目录下的ACL权限 useradd 3 setfacl -m u:3:rx /a/ ll -d /a/ #基本权限后有标志说明其具有ACL权限 getfacl /a/ ..... mask::rwx #mask:最大允许上限。ACL里除了属主和其他人(other)不受mask管控其他二外添加用户权限都不能突破这个上限 ..... #测试 su - 3 cd /a/ touch a1 #输出touch: cannot touch a1: Permission denied #删除旁听用户的ACL权限 setfacl -x u:3 /a/ getfacl /a/ setfacl -x u:用户名 文件名 #删除指定用户的ACL权限 setfacl -x g:组名 文件名 #删除指定组的ACL权限 setfacl -b 文件名 #删除文件的所有ACL权限权限掩码umask显示或设置文件/目录的默认权限在Linux中用户创建新文件/目录时系统会为新文件/目录分配默认权限默认权限与umask值有关文件实际默认权限理论默认权限0666- umask值目录实际默认权限理论默认权限0777- umask值umask #查看默认umask值 #新建文件和目录并查看默认权限 touch a ll file mkdir b ll -d b/ umask 000 #临时修改umask值 #永久修改 #法一 vim /etc/profile umask 0000 #在文件最后添加 source /etc/profile #法二 vim ~/.bashrc umask 0000 #在文件最后添加 source ~/.bashrc