Linux基本权限 笔记
基本权限:
LInux中每个文件都有相应的属性权限,如这个文件是否可以被某个用户改写,是否可以被某个用户执行查看,在Linux中文件的访问权限通常为以下几种。
访问权限:
读取:允许查看内容-read (r)表示
写入:允许修改内容-write (w)表示
可执行:允许运行和切换-execute (x)表示
特殊权限: Set GID (s/S),Set UID (s/S),Sticky Bit (t) 特殊权限会在最下面讲解。
ACL权限:访问策略权限
ls -l查看LInux的文件/目录信息我们就能看到在详细信息前有“drwxr-xr-x”或者“-rwxr-xr--.”等字符,这些就表示了文件它所对应的权限
上图所示一共划分了三个框,每个框都代表了该文件所有者,所属组,其他用户 所对应拥有的权限,其中它以三个字符为一组,r表示可读,w表示可写,x为可执行,-为空
注:在一组权限中它的顺序一定是“rwx” r在最前面,x在最后,w在中间,空的用 - 表示 包括赋予命令时也一样 。
举例:
第一个框(所有者),权限为“rwx”表示,该文件的所有者有可读(r),可写(w),可执行(x)三种权限。
第二个框(所属组),权限为"r-x",表示该文件的所属组有可读(r),可执行(x)的权限。
第三个框(其他用户),权限为“r-x”,表示除该文件的所有者以及所属组外的其他用户都有着可读(r),可执行(x)的权限。
,
权限适用对象(归属)所有者:拥有此文件/目录的用户-user (u)表示
所有者相当于你自己,给予文件所有者权限时只有你(当前用户)才能使用这些权限。
所属组:拥有此文件/目录的组-group (g)表示
所属组相当于一个大家庭,在这个家庭内(所属组内)的所有成员(用户)都可以使用该文件的所属组权限
其他用户:除所有者/所属组以外的用户-other (o)表示
相对与一个外人,你可以共享该文件给外人可查看的权限,也可给外人(其他用户)更高的权限
设置基本权限:
chmod 命令:
chmod [-R] 归属关系+-=权限类型 FIle
chmod [-R] 权限数值 FIle
符号:
" +" 是添加一些权限
" - " 是去除一些权限
" = " 是重置权限
-R : 递归
例如:
chmod u+x aaa.txt # u代表"所有者(user)"意思是将aaa.txt文件的所有者权限添加(x)可执行权限
chmod g-w ccc.sh # g代表"所属组(group)"意思是将ccc.sh文件所属组的(w)可写权限去除掉
chmod o=r ccc.sh # o代表"其他用户(other)"意思是将ccc.sh文件的其他用户权限重新赋予,将原来的权限替换成(r)只读
chmod u=rwx,g=rw,o=--- aaa.txt #可用逗号分割将aaa.txt文件的权限分别修改为所有者rwx,所属组rw,其他用户---。 “---”就是什么权限都没有的意思
chmod ugo=rw aaa.txt # 将aaa.txt文件的 u,g,o权限都重新赋为可读可写
chmod -R u=rwx ddd/ #将ddd目录下所有子目录/子文件 的所属用户权限改为(rwx)可读可写可执行
chmod +w file #单独写+x不写对象的话默认是 为(所有者)添加上"w"可写权限
chmod a+x file #表示将所有权限(所有者,所属组,其他用户)都添加上"x"可执行权限
chmod 777 aaa.txt #表示将aaa.txt的 所有者,所属组,其他用户的权限都设为可读可写可执行,(7=1+2+4),数字1=w,2=x,4=r
chmod 654 aaa.txt #表示将aaa.txt的 所有者权限为(可读可执行 6=2+4),所属组为(可读可执行 5=4+1),其他用户为(只读=4)
chmod 7 aaa.txt #如果单独只写一个数值的话,就表示其他用户有“7”的权限,所有者以及所属组将没任何权限。
chmod 77 aaa.txt #如果只写二个数值的话,就表示其他用户以及所属组有“7”的权限,所有者将没任何权限。
注: 在赋予目录可写权限时给予的当面目录下(不包含本目录)的所有子目录/文件,也就是这个目录下所有的文件都能被修改。
chown 命令:
chown [-R] 所有者 File #修改所有者为*** chown [-R] :所属组 File #修改所属组为*** chown [-R] 所有者:所属组 File #修改所有者以及所属组为***
例如:
chown work log.log #修改log.log文件的所有者为work用户
chown :work log.log #修改log.log文件的所属组为work组
chown work:work log.log #修改log.log文件的所属组以及所有者都为wrok
特殊权限(附加权限):
Set GID: (s或S)表示 附加在所属组的(x)位置,如所属组的(x)位置是(s)说明原本所属组是有(x)执行权限只不过被附加权限盖住了,如果是(S)说明原本所属组的(x)位置是空的没有执行权限仅附加了SetGID权限。
Set GID权限适用于目录,可以使目录下新增的目录自动设置与父目录相同的属组,让子目录继承父目录的所属组身份。
命令 :
chmod g+s aaa/ #在aaa/目上录添加setGID权限
在有setGID权限的目录下创建的目录都会继承父级目录的所属组权限。
SetUID: 与SetGIU相同也是用(s或S)表示 附加在所有者权限的(x)位置,附加SetUID权限后会将(x)位替换为(s或S)
SetUID适用于可执行文件,可让当前的使用者具有文件所有者的身份以及部分权限。 热知识:我们Linux上所执行的命令都只是调用一个程序去执行这个程序,大多数执行程序都在/usr/bin/下
命令 :
chmod u+s 执行文件 #所有用户使用或执行这个执行文件/命名都有文件所有者的身份/部分权限。 赋予权限后会显示为红色
这里我们切换用其他用户"userA"用mkdir命令创建文件会发现创建的文件所有者是“root”,原因就是mkdir执行文件的所有者就是root,而我们又将mkdir执行文件附加了SetUID权限,所以无论是那个用户只要是使用这个mkdir执行文件都拥有mkdir文件所有者的身份,以及权限。
SetUID权限尽量不要乱用,那如果假设我们将“/usr/bin/chmod”执行文件做了SetUID权限,那几乎所有的用户都可以自定义权限了,^^.
Sticky Bit: 用(t)表示 附加在其他用户的(x)位上,附加后其他用户的(x)位会变成(t)
适用于开发(w)权限的目录,可以阻止用户滥用(w)写入权限(禁止别人操作文档),比较常用的附加权限。
命令:
chmod o+t 文件名 #以当前用户为文件附加(t)权限
ACL权限:
能够对个别的用户,个别的组设置独立权限,(比如设置A用户能读,B用户能写,C用户能读能写,D用户只能执行等)
命令:
setfacl -m [u:用户:权限] [g:组:权限] 文件/目录
举例:
setfacl -m u:userA:rw aaa.txt #单独为userA用户添加对aaa.txt文件可读可写的权限
上述aaa.txt文件userA属于其他用户,但我们想让userA用户有可读可写的权限又不想把他加到组里或让他成为所有者,并且其他用户权限也不能改变,
那我们就可以使用“setfacl -m u:userA:rw aaa.txt”命令单独将userA的权限变成rw可读可写。
setfacl -x u:userA aaa.txt #删除指定用户的setfacl权限策略
setfacl -d aaa.txt #删除所有的setfacl权限策略
getfacl aaa.txt #可查看文件详细的权限策略