Linux权限理解
1、Linux权限概念
1.1、认识Linux下用户分类
Linux下用户分为,root:超级用户,zzy:普通用户,我们自己添加(adduser)的用户。
root用户是不受权限约束的,而普通用户是受权限约束的。

上面可以看到,普通用户命令提示符是$,超级用户命令提示符是#。
那么在Linux中如何进行用户切换呢?
1)普通用户切换成超级用户:su - 需要输入超级用户的密码

2)su切换:

可以看到,su -:切换后会改变环境变量和工作目录,使其与目标用户的登录环境一致。su:仅切换用户身份,不改变环境变量和工作目录。
3)su 用户名:切换成其他用户。或su -用户名。类似上面,su 用户名不改变环境变量和工作目录,而su -用户名会改变。

4)使用sudo命令,可以进行临时权限提升,将权限提升为root账户。
但是默认情况下你使用sudo命令是使用不了的,需要添加系统信任白名单才行。
下面介绍添加系统信任白名单使得用户可以使用sudo:使用vim打开/etc/sudoers,要使用root账号不然啥也看不到,而且你也没有权限修改。

在root账户下添加一行你的账户名,后面跟root一样即可。保存退出后就可以使用sudo了。

这时候使用sudo命令输入密码输入的就是你账户的密码。
1.2、什么叫做权限?
一件事情是否允许你做,这就叫做权限。例如,你不能跑到校长办公室去看校长在干什么,说你来视察工作。因为你没有权限。一本书你可以看,可以翻,但是你不能拿来吃,这是由书本身的属性决定的。因此:
1、权限认证的身份(权限和人有关)。
2、权限也和事物的属性有关。
那么对于文件,它的权限就是读、写、执行。
在linux中,有普通用户和超级用户root。还有三种角色:拥有者,所属组,其他人。
通过ll可以列出文件的详细信息:

第一列代表的是文件类型,分类有:
-:普通文件,如文本、可执行程序、库。
d:目录文件。
b:块设备文件,如磁盘文件。
c:字符设备文件,如键盘、显示器文件等。
p:管道文件,用来通信的。
l:软连接。
第二个框代表的是权限,总共有九个,三个为一组,分别是:拥有者、所属组、其他人的权限。
第三个框表示拥有者和所属组是谁。
第四个框表示文件的大小。
第五个框表示文件最近创建或修改的时间。
最后就是文件名了。
对于文件的权限:r表示可读,w表示可写,x表示可执行。如果为-表示该权限不存在。例如rw-表示可读可写,但不可执行。三个一组分别表示拥有者、所属组、其他人的权限。
在linux中并不以文件后缀表示文件的类型。但是,使用gcc/g++编译器是需要用后缀来标识文件的。
如何理解linux两种用户和三种角色呢?linux用户都是三种角色中的一种,只不过对于root来说,他是不受权限约束的。
那么为什么需要所属组呢?假设现在你们小组需要共同完成一项任务,你写的代码需要让小组的其他人看到,但是你又不想让另一个小组的人看到,如果不存在所属组,然后你把权限公开之后,虽然你小组的人也能看到,但是你的竞争对手另一个小组也能看到。所以需要所属组,有了所属组权限,你们小组的人都能看到你写的代码,但是另一个小组是其他人,就看不到你写的代码了。
2、Linux下修改权限
2.1、chmod修改权限
使用chmod可以修改拥有者、所属组、其他人的权限。
文件权限的修改,只有root和文件拥有者可以进行修改。
chmod u(+/-)(r/w/x):添加/删除拥有者的读、写、执行权限。
chmod g(+/-)(r/w/x):添加/删除所属组的读、写、执行权限。
chmod o(+/-)(r/w/x):添加/删除其他人的读、写、执行权限。
还可以使用chmod u=rwx进行修改。
1)使用chmod u+x添加拥有者可执行权限:

2)使用chmod u-rwx:删除拥有者的读、写、执行权限:

3)使用chmod o-r:删除其他人的可读权限:

可以看到其他人的权限为---,说明不可读不可写不可执行。对于root来说,照样可以用cat读取文件信息,说明root是不受权限约约束的。而对于其他用户zxf想读取文件信息则不行。
4)使用chmod g-rw:删除所属组的读、写权限。

还可以使用八进制的方式修改角色权限,对于上面每种角色都有三种权限rwx,对于每种权限存在就是1,不存在就是0。111表示可读可写可执行,那么转换为八进制数就是7。三种角色111 111 111合起来就是777,就是拥有者、所属组、其他人可读可写可执行。
5)chmod 777:修改文件权限为所有角色可读可写可执行。

6)chmod 166:修改权限为拥有者可执行,所属组可读可写,其他人可读可写。

7)使用chmod u=rw-:修改拥有者的u权限为可读、可写、不可执行。

8)使用chmod对多个角色进行权限修改

2.2、修改拥有者/所属组
修改拥有者/所属组可以使用以下命令:
chown zxf 文件名:修改文件拥有者为zxf。
chgrp zxf 文件名:修改文件所属组为zxf。
9)使用chown zxf修改文件的拥有者为zxf

可以看到默认是不能修改拥有者的,为什么?你把东西给别人能直接给吗?别人还不一定要。
这里我们使用sudo提升权限。
10)使用chgrp zxf修改文件的所属组为zxf

11)使用chown zzy:zzy,同时修改文件拥有者和所属组为zzy

3、默认权限

为什么创建出来的普通文件和目录是我所看到的样子?
普通文件默认权限:664
目录默认权限:775
其实:
默认给普通文件的起始权限是:666
默认给目录文件的起始权限是:777
umask:权限掩码,凡是在umask中出现的权限,不会在最终的文件权限中出现。
在linux下,可以通过umask查看权限掩码:

可以看到默认权限掩码为0002,我们只看后三位,就是002。
最终权限 = 起始权限 & (~umask)

现在我不想让创建出来的文件和目录有可执行权限,我可以将权限掩码修改为111:

4、目录权限
1)目录的读权限:

如图:去掉目录拥有者的读权限,拥有者还是可以进入该目录,可以移动目录下的文件。
目录的r权限:是否允许我们查看目录下的文件。
2)目录的写权限:

如图:删除目录拥有者的写权限,拥有者可以读,可以进入该目录,但是不可移动目录中的文件,也不能删除目录中的文件。
目录的w权限:是否允许我们在当前目录下进行创建、删除。
3)目录的可执行权限:

如图:删除目录拥有者的可执行权限,用户可以读,但是无法进入目录中。
目录的x权限:是否可以进入目录。
所以,我们能否进入一个目录中,看的是目录有没有可执行权限。
5、粘滞位
背景:比如张三将数据写好之后需要交给李四处理。那么我们就需要建立一个共享文件。

我们可以看到,用户家目录的权限对于其他人都是不可读、不可写、不可执行的。
所以我们不能在用户家目录下创建共享目录。
现在我们转而在根目录下创建共享文件shared,然后由于张三需要在里面创建文件,而李四需要在里面读取文件,所以对于其他人需要有读和可执行权限:

现在张三在里面创建了文件,文件对于其他人有可读权限,所以李四可以读取文件内容:

现在张三突然把其他人权限修改为不可读,李四就无法读取了,李四一气之下直接rm -rf把文件删了:

为什么张三创建的文件李四可以删除?因为目录下文件删除、增加、修改等都是由目录的w权限决定的。对于shared这个目录,它对于其他人有w可写权限,所以所有人都可以在该目录下添加文件,也可以删除该目录下的文件。
一个文件能否被删除,并不由文件本身决定,而是由这个文件所处的目录决定。
那么为了不让李四删除文件,我们能不能去掉shared对于其他人的w权限呢?
不行!因为如果去掉w权限,那么张三也不能在shared目录下创建文件了。
解决办法:粘滞位
粘滞位:给目录设置,一般是共享目录,大家可以在目录进行各自文件的增删查改,只允许文件的拥有者或root能删除这个文件,其他人一概不允许。t权限——一种特殊的x权限。


上图可以看到,文件创建者zzy是可以删除文件的,但是zxf是不能删除文件的。

被折叠的 条评论
为什么被折叠?



