一、权限的理解
Linux下的身份
u -user 拥有者
g -group 所属组
o -other 其它人
a -all 以上所有
权限与身份对应
linux下,一个用户对于某个dir或file,只能有唯一一种身份,而每种身份所对应的权限大小/有无是确定的。
这是一般情况下的权限。对于一个dir或file你是否具有以下功能。
读(r):read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写(w):write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行(x):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
注:权限还对应事物属性。例如对于一个文本文件,它本身就是无法执行的,此时无论你是怎样的身份,都不可能做到执行该文件。
二、用户分类
创建/删除用户
分为超级用户root和普通用户。
root用户拥有一切权限,例如:该文件不让其它人读写,但是root可以。同时我们可以使用sudo指令让某个用户的某条命令短暂提权,但需要提前加入到白名单中。
我们可以在root账号下,使用adduser增加账户,deluser -r 递归删除该用户相关的dir和file
。
用户间的切换
使用su指令+用户名 来切换用户 (root到普通用户,不用密码。普通用户之间互相切换需要。普通用户到root都需要密码)
且su仅仅改变用户,改变后工作目录pwd不变。
使用su - 切换到root账号,且回到 /root 目录下。
用户与身份间的对应关系
root和普通用户,都可以作为任意一个dir/file 的o/g/o,但是root可以无视权限限制。
更改用户与身份间的对应关系
每次新创建一个 dir/file 它的默认 user和group都是本身。
注:对于other这里没有给出。因为当other操作该dir/file时,会自动对比这个other用户是否与user和group相同,因此没必要也做不到在 属性这里列出来。
chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
由于改变身份与用户的对应关系需要两方面的权限(既要给出去,又要允许接收,普通用户不使用sudo提权是无法完成的)
这里我切换回root,将Tohka用户下的dir文件的拥有者和所有组都改为LZF。-R是将dir和其下面所有的子目录/文件的 g/u 都改变。
三、不同身份对应权限的修改
chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
chmod
用户表示符+/-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
同时,由于仅有r/w/x 3种权限,因此可以用1个八进制的数来表示3个二进制数,1/0表示是否拥有该权限。
由于之前我已经把dir/file的u/g权限都交给了LZF,此时Tohka便不能修改了。
之前讲过,每次创建一个用户,其家目录都是700的权限,即自己有所有权限,group和other没有任何权限,因此普通用户LZF是打不开另一个普通用户Tohka的家目录的,更别说改变其中dir目录的权限了。
可以这样理解:之前改变Tohka下的dir目录的user和group时,需要借助root的权限,因此想要
改变这个不在自己目录下的dir的权限时,也是需要root权限的。
这里我用a+rwx,给所有身份都加上了所有权限,等价于chmod 777
四、文件/目录权限/粘滞位
从上面的规则可以知道:只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。
例如:在多人协同开发时,由于普通用户不能相互进入各自的/home,因此需要在/home外创建一个目录(如DIR),可以将DIR设置为777,其它用户可以通过x进入DIR,r读取DIR内的子目录和file,w目录增加或减少或修改 子目录/file。
但是这里有个问题,如果用户A在DIR下创建了一个目录,但是没有给用户B写(w)权限,但是由于目录rwx的原因,可以删除别人的目录/文件,这一点是矛盾的。
为了解决这个问题,增加了粘滞位权限。(只能给目录添加,防止该目录下的子目录/file被普通用户之间互删)。
五、dir/file初始化权限问题
在Tohka下新创建一个目录dir和文件file,可以发现
目录初始权限为:775 文件初始权限为:664
为了保护文件,other的w权限默认都是没有的。对于文件,都是先默认没有执行权限。
这是由于umask系统默认的权限掩码导致的。(没有时为777和666)
默认权限=权限&(~umask)(umask中出现的,最终的权限就不会出现)
只看后3位,默认为002,即 000 000 010,将other的写权限去掉
目录