一、基本权限UGO
1.概述
在多用户(可以不同时)计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权力,像是文件夹、特定系统指令的使用或存储量的限制。
2.设置权限的两个基本元素
权限对象
权限类型
3.权限的三类对象
属主:u,文件所有者
属组:g,文件所属组成员
其他人:o,路人other
那么这三类对象,权限肯定是不一样的。
特殊对象:所有人:a(u+g+o)
4.权限的三种类型
针对文件来说:
读:r=4,read,可以看内容
写:w=2,write,可以修改内容
执行:x=1,excute程序(可能是二进制,也可能是脚本) 可以执行
后面的4,2,1则是权限的数字码,在授权的时候使用。针对目录文件来说:
读 r=4 read 可以浏览目录内文件列表,但是无法看到文件内容和文件属性。
写 w=2 write 可以删除,新建目录内文件。如果没有w权限,则无法在这个目录内删除或是新建文件。但是如果这个目录只有w写的权限,没有x执行权限,也不能删除新建,因为没有x权限,这个目录都进不去,就无法删除。
执行 x=1 excute cd 可以访问目录中的文件,看到这些文件的具体信息和属性信息,如果没有执行权限,就看不到,也不进去这个目录内的文件。
5.如何文件属性
使用ll,也就是ls -l查看文件的详细信息
文件属性:
例:
-rw-r–r-- 1 root root 26195 Dec 17 10:42 install.log
权限:引用数(连接数):所有者:所属组:大小:创建时间:文件名
这里我们看权限即可,也就是最前面的一列的权限码。
-rwx r-x r-x
-开头代表文件类型
剩下的权限码,三位一分
rwx 代表这个文件所有者的权限,读写无,r 读;w 写;x 执行。
r-x 代表这个文件的文件所属组成员权限,r 读;- 无;x 执行。
r-x 最后的r-x代表other的文件权限, r 读;- 无;x 执行。
6.设置权限
更改权限
使用符号:
chmod who opt per file
who:u 所有者user用户;g 所属group组;o other其他人;a所有人(a-x 这个文件的用户都没有执行权限 -x 前面默认为a)。
opt:操作权限。+ 增加一个权限;- 去掉一个权限;= 直接赋予(覆盖)什么权限。
per:r read读权限;w write写权限;x excete执行权限。
File就是指的具体文件了。例如:
Chmod o+w file1.txt
给other人群对file1.txt文件加一个write权限Chmod u=,g=r,o=rw file1.txt
给文件所有者清空权限,所属组读权限,other读写权限
Chmod -R g=r,o=rwx abc
对整个目录及其下的文件都授权,-R,递归。
Ls -d abc 查看目录
注意:如果一个用户既是所属组成员(附加组),又是other,那么权限是看组的。
一个用户的权限判断过程,先判断是否所属者,是则不继续判断下去,不是则继续判断是否所属组,是则不继续,不是则判断是other使用数字:
Chmod 614 file1,权限则是所有者有4+2,也就是读写权限,所属组有1,也就是执行权限,其他人则有4,也就是读权限。
绿色文件名表示有执行权限了。Chmod 777 file1,权限就是all所有人有这个文件的所有权限。
7.更改属主、属组
chown 用户 文件:chown change owner 修改所有者。
例:chown user01 file1:把file1文件的所有者改成user01。
chgrp 组 文件:chgrp change group 修改所属组。
例:chgrp user02 file1:把file1文件得所属组改成user02组。
chown和chgrp合二为一:
chown root.user03 file1
把file1文件的所有者改成root,所属组改成user03。
注意:如果root是所有者,那么所有者的权限对root是没用的。因为权限本身就是给普通用户设置的。
注意:删除一个文件,需要的权限不是看这个文件本身的权限,而是这个文件的上一级目录的权限。因为删除这个文件本身就是在上一级目录中去删除。
二、基本权限ACL
ACL accsee control list 访问 控制 列表
ACL是UGO的补充
区别:
ACL文件权限管理:设置不同用户,不同的基本权限(r、w、x)。对象数量不同。
UGO设置基本权限:只能一个用户,一个组和其他人。
语法:
设置acl权限:
Setfacl -m u:alice:rw /home/test.txt
命令 设置 用户/组:用户名/组名:权限 文件对象
Setfacl -m u:user01:rw /root/file9
Setfacl -m g:user01:r /root/file9
Setfacl -m o::rw /root/file9
Setfacl可以设置基础权限。(基本不用,建议还是chmod)
单个删除acl权限
Setfacl -x g:user01 /root/file9
Setfacl -x u:user01 /root/file9
清除所有acl权限
Setfacl -b /root/file9
清除所有acl权限
Setfacl -b /root/file9
查看acl权限:
Getacl /root/file9
从上到下
文件名;
属主;
属组;
User的UGO权限;
User的ACL权限;
Group的UGO权限;
Group的ACL权限;
Mask权限;这里指的是能给用户授予的ACL最大权限;
Ohter的UGO权限;
三、特殊权限
1.特殊位suid、sgid、Sticky
Suid(setuid)
例如,/usr/bin/passwd 权限码中就有s。
而这个Suid权限,就是当用户去执行这个命令或者用这个命令工具的时候,临时变更为这个文件的所有者。
注意:这个权限,是在文件所有者的权限中。添加suid权限:
chmod u+s /bin/cat
给cat文件加一个suid的权限。 sui权限就是使用这个命令时暂时变更成这个文件的所有者。再使用普通用户cat /etc/shadow 就能看到shadow内容了。
当前直接cat是没有权限查看shadow的。
设置suid的权限给cat命令,这个/bin/cat就是cat命令的文件
这时候切换普通用户,直接就能cat到shadow的内容了。chmod 4755 /usr/bin/nano
4就是Suid的权限。其他权限正常赋予。删除suid权限
chmod u-s /bin/cat
chmod 755 /bin/cat
正常赋予权限,也能去除suid权限。Sgid:
sgid(SetGID):Sgid权限,就是当用户去执行这个命令或者用这个命令工具的时候,临时变更为这个文件的所属组。
注意:这个权限,是在文件所属组的权限中。添加Sgid权限:
chmod g+s /bin/cat
给cat文件加一个sgid的权限。 这个时候,因为cat的所属组是root,sgid权限就是使用这个命令时暂时变更成这个文件的所属组。chmod 2755 /usr/bin/nano
2就是Sgid的权限。其他权限正常赋予。去除sgid权限:
chmod g-s /bin/cat
去掉cat文件所有者的sgid权限。chmod 755 /bin/cat
正常赋予权限,就能去除sgid权限。sgid作用于文件夹:
chmod g+s /data
给/data目录一个sgid的权限。/data目录当前已经有了sgid的权限。则在/data下面创建的所有文件,其文件所属组都是/data的文件所属组。注意:suid、sgid权限只针对二进制文件。
需要所有者对该文件有x权限。
暂时变更为文件拥有者身份只在执行过程中有效。
无法针对脚本程序。Sticky:
授予目录的权限,一旦目录有了这个权限。那么该目录下的文件只有文件所有者才能删除。添加Sticky权限:
Chmod o+t /tmp/
chmod 1777 /data
1 就表示sticky权限。Sticky权限码:
rwx rwx rwt
t会替代原本other的x。但是x仍然存在的,可以getfacl查看。
去掉sticky权限:
chmod o-t /data
chmod 777 /data
2.文件属性chattr
chattr +i 文件
该文件不能删除,改名,更改。
lsattr可以查看是否有chattr的权限
测试chattr的i权限是否成功
Chattr -i 文件
去掉chattr的i权限
Chattr +a 文件
只能在文件中追加内容。设置目录则只能给目录内新增文件,没办法删除目录内的其他文件
chattr -a 文件
去掉chattr的a权限。
3.权限掩码umask
语法:
Umask
直接执行,返回当前用户的umask值,root是0022,普通用户是0002。
概念:
Umask是控制用户创建一个文件夹或者文件的默认权限
Umask(umask)+default(默认权限)=创建文件最大权限666/创建文件夹最大权限777
文件最大权限如果是777,那么就会有执行权限。而执行权限本身就很危险。基于安全考虑,就限定了创建一个文件最大权限是666。
由上述的公式umask+default=666/777。则可以知道,
一个文件创建出来的默认权限就应该是666-umask值:
普通用户:umask是0002,创建最大文件权限666,则666-0002=664,对位详见。则具体权限是rw- rw- r–。
root用户:umask是0022,创建最大文件权限666,则 666-0022=644 对位相减。则具体权限是 rw- r-- r–。一个文件夹或者目录创建出来的权限是777-当前用户的umask值:
普通用户:umask是0002,创建最大文件夹权限是777,则 777-0002=775 对位相减。则具体权限是 rwx rwx r-x。
root用户:umask是0022,创建最大文件夹权限是777,则 777-0022=755 对位相减。则具体权限是 rwx r-x r-x。umask 掩码,真正算法是将umask值和最大的文件权限转换成二进制。让umask对最大文件权限进行对位遮掩。0是不遮,1是遮掩。
但是这样太麻烦。 所以衍生出另外一种算法:
新建file权限是:666-umask,如果所得结果某位存在奇数权限,那么其权限+1.
例:
umask是321。则666-321=345 。 但是奇数权限+1。就是446。
新建dir权限:777-umask。 无论是否奇数,不变。设置umask
umask 0022
暂时设置当前用户的umask为0022。永久设置有两种方法:
1.如果需要所有用户的umask的值一直是某个值。则修改/etc/profile文件
在最后一行直接新增一列即可。
然后source /etc/profile
这里source是重新加载profile文件的。
2.需要某个用户的umask改变,则在该用户的家目录下,修改.bashrc这个文件,注意是隐藏文件。如果没有,可以新建。
然后同样source一下即可。