Loading... <p>参考:<br /> http://blog.chinaunix.net/uid-25314474-id-3313109.html<br /> <br />—————————————权限—————————————————-<br />r——4 \<br />w—–2 > umask —-root的系统umask:022 , 普通用户:umask:002 <br />x—– 1 / <br /> 修改系统默认的umask: /etc/login.defs</p> <p> 421 421 421 <br /> 系统默认目录到权限为:rwx rwx rwx ———————————————————目录<br /> 系统默认文件到权限为:rw- rw- rw- —————————————-文件</p> <p> root :— -w- -w- ===Umask遮盖后的权限===:rwx r– r– rwx r-x r-x<br /> 普通用户 :— — -w- ===Umsak遮盖后的权限=== : rw- rw- r– rwx rwx r-x<br /> <br />suid———-4<br />sgid———-2<br />sticky——–1<br />————————————————————————————————</p> <p>高级权限—-SUID,SGID 和 Sticky</p> <p> SUID,SGID和Sticky仅适合文件和目录:<br /> 因为SUID和SGID是在执行程序(程序的可执行位被设置)时起作用,而可执行位只对普通文件和目录文件有意义,<br /> 所以设置其他种类文件的SUID和SGID位是没有多大意义了。 <br /> <br /> 为何需要SUID和SGID权限?<br /> 最典型的一个问题就是普通用户该密码,因为改密码需要修改shadow文件,而shadow文件只有root可修改,<br /> 因此AT&T就开发了SUID/SGID来解决此问题;通过给passwd加SUID权限,就实现了普通用户也可以修改自己的密码了。</p> <p> SUID和SGID是如何解决这个问题呢? <br /> 首先,我们要知道一点:进程在运行的时候,有一些属性,其中包括 实际用户ID,实际组ID,有效用户ID,有效组ID等。<br /> 实际用户ID和实际组ID标识我们是谁,谁在运行这个程序,一般这两个字段在登陆时决定,在一个登陆会话期间,<br /> 这些值基本上不改变。而有效用户ID和有效组ID则决定了进程在运行时访问系统资源的权限。<br /> 内核在决定进程是否有文件存取权限时,是采用了进程的有效用户ID来进行判断的。</p> <p> 1.suid<br /> 作用:任何用户在执行拥有suid权限的命令时,都以该命令拥有者的身份执行<br /> 仅适合作用与文件,目录也可添加SUID,但不起任何作用。<br /> shell脚本不适合加SUID权限。最好是二进制可执行文件,如:passwd<br /> 注:若二进制文件没有执行权限,添加了SUID,也不能使其他人执行时获得拥有者的权限。<br /> chmod u+s 命令<br /> 验证方法:</p> <pre class="brush:bash;toolbar:false"> useradd test1 mkdir /tmp/abc; chmod 4777 /tmp/abc echo -e '#!/bin/bash\ntouch /abc.txt' > /tmp/abc/a.sh; chmod 4755 /tmp/abc/a.sh su - test1 //加“-” 是因为需要在切换到test1时,使用test1的全局环境设置。 cd /tmp/abc mkdir test1 //查看权限并没有继承任何特殊权限。 /tmp/abc/a.sh //执行shell脚本,报权限不足。</pre> <p> <br /> 2.sgid<br /> 作用:任何用户在拥有sgid权限的目录中,创建文件或目录都要强制继承该目录的所属组。<br /> 注: 对于可执行文件:SGID可让执行该文件的用户临时拥有该文件组的权限。<br /> 但是,若所属组没有执行权限,other有执行权限,则即便加了SGID的权限,<br /> 也无法让其他用户临时拥有该文件组的权限。<br /> 对于目录:SGID可让目录下的所有子目录和文件的所属组都强制改为该目录的所属组。<br /> 即便, SGID位为 大S (即:目录组没有执行权限),它依然后继续影响其下的<br /> 子目录和文件的所属组。<br /> 验证方法:<br /> 目录:</p> <pre class="brush:bash;toolbar:false"> useradd test1 mkdir /tmp/abc; chmod 2777 /tmp/abc su - test1 cd /tmp/abc; touch test1.txt mkdir test1 //查看权限,继承了父目录去的SGID权限。 su - root chmod g-x /tmp/abc su - test1 cd /tmp/abc; touch test2.txt mkdir test2 //查看权限,依然继承了父目录的SGID权限。</pre> <p> 二进制可执行文件:</p> <pre class="brush:bash;toolbar:false"> su - test1 cd /tmp; cp /bin/cat . ; chmod g+s ./cat echo "This is a test" > test1.txt su - test2 cd /tmp /bin/cat test1.txt //报权限不足 /tmp/cat test1.txt //成功查看test1.txt su - test1 chmod g-x /tmp/cat su - test2 /tmp/cat test1.txt //报权限不足。</pre> <p> <br /> 普通文件的SUID和SGID的作用:<br /> 对于上例中,cat命令是任何普通用户都可以执行的命令,它默认是没有SUID位的,那UNIX的内核是根据什么来<br /> 确定一个进程对资源的访问权限的呢?对,是这个进程的运行用户的(有效)ID,包括 UID 和 GID。<br /> 用户可以用id命令来查到自己的或其他用户的user id和group id。 <br /> <br /> 一个进程如果没有SUID或SGID位,则euid=uid egid=gid,分别是运行这个程序的用户的uid和gid。<br /> 例:【如上测试的例子】<br /> </p> <pre class="brush:bash;toolbar:false"> -rwxr-xr-x 1 root root 25216 Jul 13 2009 /bin/cat test1: UID=500 GID=600 test2: UID=501 GID=601</pre> <p> test2 运行/bin/cat /tmp/test1.txt 时, euid=uid=501, egid=uid=601; <br /> 内核根据这些值来判断进程对资源访问的限制,虽然/bin/cat的属主和属组是root,<br /> 但实际运行/bin/cat的用户是test2,与root用户没有一点关系.因此test2查看test1<br /> 的私有文件test1.txt时就失败了。<br /> <br /> 若一个若程序设置了SUID或SGID,则euid和egid将变成被运行程序的所有者的uid和gid<br /> 例:<br /> </p> <pre class="brush:bash;toolbar:false"> -rwxr-sr-x 1 test1 test1 25216 Jul 13 2009 /tmp/cat</pre> <p> test2 运行 /tmp/cat /tmp/test1.txt 时, euid=500, egid=600, 而 uid=501, gid=601<br /> 因此,test2 就成功的读出了test1的私有文件test1.txt的文件内容。</p> <p> 3.sticky (t) 粘贴位 冒险位<br /> 作用:任何用户在拥有t权限的目录下创建的文件,只能自己,目录所有者和root能删除外,其他人无权删除<br /> 仅适合作用于目录,文件也可添加但不会有任何作用。<br /> chmod o+t dir/ <br /> 验证方法:</p> <pre class="brush:bash;toolbar:false"> useradd test1 useradd test2 useradd abc mkdir /test ; chmod 777 /test su - abc cd /test ; mkdir abcdir chmod 7777 abcdir //给目录abcdir添加SUID,SGID,sticky权限。 su - test1 cd /test/abcdir; touch test1.txt; mkdir test1; chmod 777 test* su - test2 cd /test/abcdir; rm -rf test* //将失败。 su - abc cd /test/abcdir; rm -rf test* //成功。</pre> <p> </p> <p>基础命令</p> <pre class="brush:bash;toolbar:false"> $ chmod [-cvRf] 模式[,模式]... 文件... # 更改文件的权限 # -c 同-v,但只在有更改时才显示结果 # -f 去除大部份的错误信息 # -R 递归操作 # -v 为处理的所有文件显示诊断信息 # --reference=参考文件 使用指定参考文件的模式,而非自行指定权限模式 # --no-preserve-root 不特殊对待根目录(默认) # --preserve-root 禁止对根目录进行递归操作 每种 MODE 都应属于这类形式"[ugoa]*([-+=]([rwxXst]*|[ugo]))+"。</pre> <pre class="brush:bash;toolbar:false"> $ chown [-cvRfh] --reference=RFILE|[OWNER][:[GROUP]] file... # 改变文件所有者和所属组 # -c 同-v,但只在有更改时才显示结果 # -v 为处理的所有文件显示诊断信息 # -f 去除大部份的错误信息 # -R 递归操作 # -h 改变符号链接本身而不是其所指向文件的属性。 # --dereference 改变符号链接所指向的文件,而不是符号链接本身。 # --from=CURRENT_OWNER:CURRENT_GROUP 只有当文件属性和该模式匹配,才修改文件属性。 # --no-preserve-root 不特殊对待根目录(默认) # --preserve-root 禁止对根目录进行递归操作 # --reference=参考文件 使用参考文件的属性,而不用指定参数来设置。</pre> <pre class="brush:bash;toolbar:false">$ chgrp [选项]... 用户组 文件... # --reference 则将每个文件的所属组设置为与指定参考文件相同。 # --dereference 影响符号链接所指示的对象,而非符号链接本身(默认值) # -h 会影响符号链接本身,而非符号链接所指示的目的地 # --no-preserve-root 不特殊对待"/"(默认值) # --preserve-root 不允许在"/"上递归操作 # --reference=RFILE 使用参考文件的所属组,而非指定值 # -f 去除大部份错误信息 # -R 递归处理所有的文件及子目录 # -v 为处理的所有文件显示诊断信息 # -c 类似 -v,但只在有更改时才显示结果 以下选项是在指定了 -R 选项时被用于设置如何穿越目录结构体系。 如果您指定了多于一个选项,那么只有最后一个会生效。 -H 如果命令行参数是一个通到目录的符号链接,则遍历符号链接 -L 遍历每一个遇到的通到目录的符号链接 -P 不遍历任何符号链接(默认)</pre> <p>文件访问的其他权限<br /> 隐藏权限</p> <pre class="brush:bash;toolbar:false"> chattr 和 lsattr chattr [-|+|=] Following Options a:只能增加数据,不能删除数据,不能移动文件; i:不能被删除/改名/设置链接/不可新增和写入。 u:删除时不实际删除; s:删除文件时,彻底删除。 d:当执行dump(备份)程序时,设置d属性可使该文件(或目录)具有转储功能。 A:禁止修改AccessTime属性; S:写入时直接sync到磁盘;</pre> <p> ACL<br /> facl(文件访问控制列表)</p> <pre class="brush:bash;toolbar:false"> 使用ACL的前提: 1. mount -----> 先查看分区是否支持ACL, 默认 根分区 是支持 ACL的。 例:mount -o remount,acl /dev/sda2 //若不支持ACL,则可重新挂载/dev/sda2的分区,并让其支持ACL 2. getfacl 和 setfacl 格式:setfacl [-mxbd] { [u | g | m]:[user | group | umask ] :[rwx] } 查看: getfacl aa.txt //查询文件访问控制列表内容 设置: setfacl -m u:robin:rw aa.txt //设置用户访问控制 u:针对用户设置:[ u :用户列表:rwx] setfacl -m g:looking:rw aa.txt //设置组的访问控制 g: 针对群组设置:[ g :群组名: rwx] setfacl -m o:rwx aa.txt //设置其他人 setfacl -m m:r aa.txt //设置掩码值,任何人权限不可超过掩码值 m : 针对默认权限设置:[ m :rwx] 删除: setfacl -x u:robin aa.txt setfacl -x g:looking aa.txt 移除所有访问控制设置 setfacl -b aa.txt 设置递归继承robin用户权限,这个用户所建立目录和文件会继承robin设置的默认权限 setfacl -m d:u:robin:rwx test/ setfacl -m d:g:looking:rwx test/ setfacl -m d:o:rwx test/</pre> <p> </p> <p> </p> <p> </p> <p> </p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信