linux用户用户组与ACL (2)

对权限进行详细分析如下,每个文件的权限都有10个字符表示,其中-表示无对应权限,这十个字符可分为四组,第一组就是第一个字符;表示文件类型,第二组就是第2、3、4个字符,是所有者拥有的权限,依次是r/w/x;第5、6、7个字符表示组权限,依次是r/w/x;第8、9、10个字符表示其他人的权限,依次是r/w/x。如果所在位置为-,则表示无对应权限。

对应上述/etc/shadow文件的权限为,所有者即root拥有读写权限,组shadow只有读权限,其他人没有任何权限。

rwx与421

在Linux系统中,可以使用chmod命令来改变文件的权限,例如:sudo chmod 640 /etc/shadow。这个含义就是将文件/etc/shadow的所有者权限改为6即rw;组权限改为4即r;其他人权限改为0即无任何权限。之所以6表示rw,4表示r,这是因为Linux是通过位来表示权限的。

因为文件拥有三种不同的权限r/w/x,Linux就使用3bit作为权限记录,如果是只读的那么就是100,如果是只写的就是010,如果是只可执行的就是001,可读可写的呢就是110啦。读者自行将二进制转换为十进制,就会发现6就表示110,也就是可读可写不可执行的意思啦。

当然,这里描述的3bit权限位并不是实际上Linux的权限实现机制,而是为了读者方便理解记忆,数字与权限的对应关系。实际的权限记录比较复杂。

关于权限的一些问题

一个文件可有只写权限但是不可读吗?
答案是可以的,如下图所示。

image_195

一个文件不具有可执行权限就一定不可执行吗?有了可执行权限就一定可以执行吗?
答案是不一定。

image_196


image_197

目录的rwx

目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入。

只有执行权限只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需要可读权限。

一个文件能不能被删除,主要看该文件所在的目录对用户是否具有写权限,如果目录对用户没有写权限,则该目录下的所有文件都不能被删除,文件所有者除外

目录的w位不设置,即使你拥有目录中某文件的w权限也不能写该文件

进程UID与文件权限类型的匹配

根据前文我们已经知道,对文件的访问和创建等操作需要检查的都是EUID,而不是RUID。即使RUID是普通用户,而EUID是root则就拥有了对root所能访问的所有文件的权限。对应/etc/shadow我们就检查对应的root权限是读写,因此该进程就可以对/etc/shadow进行读写操作。如果,该进程的EUID不是root,但是是属于shadow组的,那么就只有读权限,否则没有任何权限。

Set-UID提权

在一个典型的计算机系统中,用户需要使用超级用户的权限来完成诸如修改密码的操作。一种方式是通过守护进程(Windows下成为服务)方式来实现,另一种方式是通过设置Set-UID权限的方式来实现。

Set-UID程序和其他unix程序唯一的区别就在于他有一个特殊的标志位:Set-UID比特位。使用这个比特位的目的是告诉操作系统,当运行这个程序时应当与未设置该位的程序相区分。

我们在前文中提过,权限匹配是通过EUID来实现的。对于非Set-UID程序而言,进程的EUID是和RUID一致的,当它被一个用户ID为5000的用户运行时,RUID和EUID都是5000。而当执行一个Set-UID程序时,RUID和EUID的值是不一样的,RUID的值取决于执行该程序的用户ID,而EUID则取决于Set-UID程序文件的所有者。

设置Set-UID

image_198

提权测试

image_199

ACL(Access Control List)规则

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzwxwz.html