Linux权限粗解

在分析SUID提权之前我们要了解一下linux下的严格权限等级。所以趁着这个机会静下心来学学基础的东西。

整篇文章脉络和知识来自大佬的文章,原文请戳文章大标题。我的属于阉割版本,很多自己的瞎逼逼。

文件基本权限

root@kali:~# ls -l
......
drwxrwxrwx 4 root root     4096 6月   5 12:17 CobaltStrike
drwxr-xr-x 5 root root     4096 7月  22 01:08 HashPump
-rwxrw-rw- 1 root root      214 7月  21 08:40 test.txt

上面查出来的文件权限信息列表,分别代表:

文件类型、文件权限、链接数、所属用户、所属用户组、文件大小、最后修改时间、文件名。共八项,这里着重讲前两个。

文件类型分类

总共有七种分类,在列表中的第一位,仅占一个字符且和文件权限相连。

-  :  普通文件
d  :  目录文件
l  :  软连接(类似快捷方式)
b  :  块设备文件(如:硬盘、光驱等)
p  :  管道文件
c  :  字符设备文件(如猫等串口设备)
s  :  套接口文件、数据接口文件(如:启动MySQL服务器时产生的mysql.sock文件)

文件权限分类

总共三种,但组合变换很多

权限对应数字对文件对目录
r4可读文件的内容(catmoreheadtail)可以查询目录下的文件(lsll)
w2可编辑文件但不能删除(vimecho)增删改移该目录下的文件和目录(cpmvtouchrm)
x1可执行可执行但不能运行,可进入目录(cd)

最初的列表中除第一位之外,每三位一组,共三组。

如:drwxr-xr-x 5 root root 4096 7月 22 01:08 HashPump可以看出这个是一个目录文件,也就是文件夹。后续跟了三组的文件权限信息,如下:

rwx:第一组代表文件所有者(即U)权限,这里是root,root对该文件拥有读写执行权限;

r-x:第二组代表所属组(即G)的权限,这里所属组拥有对该文件读和执行的权限;

r-x:第三组代表其他人(即O)的权限,这里与G的权限一样。

更改权限的命令

chown命令:用来改变文件或目录的所有者和所属用户组。
chgrp命令:用来改变文件或目录的所属的用户组。

对于文件来讲,最高权限是x,而对于目录是w

对于文件能否删除,首先要对目录具有执行权限,同时对文件也要有可执行权限;

对于目录的赋权为05(r-x)7(rwx),其中1,4,6无意义。

chown -R 777 *

这是最高权限赋值语句!其中-R是给当前目录及其所有子目录进行相同权限变更,777是Linux系统下的最高权限数字,*通配符,指当前目录下的所有文件及目录。

命令的具体用法建议自行Google。

Linux常用权限值:

600(rw------):只有root有读写权限;
644(rw-r--r--):只有root有读写权限;group用户和other用户只有读权限;
755(rwxr-xr-x):root有读、写、执行权限;group用户和other用户只有读、执行权限。

默认权限

linux系统中新建一个文件或者目录,那么这个文件或目录会有一个权限,这个权限就是默认权限。这个权限就是靠umask的值来定义的。

umask(权限掩码) 就是指定当前用户在建立文件或目录时候的权限默认值。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次登录系统时,umask命令都被执行, 并自动设置掩码mode来限制新文件的权限。用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉。
root@kali:~# umask
0022

这是我kali虚拟机root账户下的默认权限,来学习一下为啥是0022。

root@kali:~# mkdir test
root@kali:~# touch test.txt
root@kali:~# ls -l
总用量 4
drwxr-xr-x 2 root root 4096 7月  29 09:50 test
-rw-r--r-- 1 root root    0 7月  29 09:50 test.txt

这么看就好说了,首先0022的第一个0是文件特殊权限,022是文件默认权限。

其次再看刚创建的新目录,默认权限是755;新文件的默认权限是644。

最后我们再研究这玩意儿和umask的关系是怎么建立的。

文件及目录默认权限的特点

1、文件的默认权限为非执行权限,所以默认最大为666;目录的默认权限就是最大为777。

2、默认权限都需要换算成对应的字母再进行相减。

3、建立文件或者目录后的默认权限为对应最高权限(666或者777)减去对应的umask值。

文件默认权限的计算

文件默认最大权限为666umask = 022

则有 -rw-rw-rw- 减去 -----w--w- 得到 -rw-r--r--644

目录默认权限的计算

目录默认最大权限为777umask = 022

则有 drwxrwxrwx 减去 d----w--w- 得到 drwxr-xr-x755

其实是字符做了一个与非的运算

要想修改umask的默认值,需要修改环境配置文件/etc/profile

文件的特殊权限:SUID、SGID、SBIT

三者关系简单说,Linux下除了rwx外还有st两个特殊权限,当s权限出现在所有者的x权限上时,就是SUID;出现在所有组上时,就是SGID;出现在其他用户上时,就是SBIT

SUID:Set User id

1、只有具有x权限的二进制程序才能设定`SUID`权限;
2、命令执行者要对该程序拥有x权限;
3、命令执行者只在程序执行的过程中有效,即在执行该程序时才临时拥有root身份。

赋权方式:(root用户才能设置)

chmod 4755 [文件名]
chmod u+s [文件名]

取消权限可以用chmod 0755 [文件名]或者chmod u-s [文件名]

root@kali:~# ls -l
总用量 0
-rwxr-xr-x 1 root root 0 7月  29 21:24 test1
-rw-r--r-- 1 root root 0 7月  29 21:24 test2

现在有两个文件权限分别为755644,也即test1具有可执行权限,而test2没有。分别对其赋予SUID权限。

root@kali:~# chmod 4755 test1
root@kali:~# chmod 4644 test2
root@kali:~# ls -l
总用量 0
-rwsr-xr-x 1 root root 0 7月  29 21:24 test1                            
-rwSr--r-- 1 root root 0 7月  29 21:24 test2

可以看到在所有者权限中的x位变成了s,但是有大小写之分,其中小写的s表示test1拥有了能正常使用的SUID权限,而大写的S则表示test2SUID权限不能正确使用。因为test2本身就不具备可执行的权限。

SUID(SGID)赋权原则

1、关键目录、根目录等要严格控权,防止越权篡改文件。

2、严格控制系统命令的SUIDSGID权限,谨防被利用。

SGID:Set Group id

SGID权限同SUID一样,只是SUID作用于所有者,而SGID作用于所有组,SGID作用在二进制程序上时,执行权限的程序时此用户将继承此程序的所属组权限,作用于目录上时,此文件夹下所有用户新建文件都自动继承此目录的用户组。同样在设置SGID的文件后,其组权限位上的可执行权限x会变成s,如果变成了S,说明其组权限位上没有可执行权限,设置SGID无效。

赋权方式:(root用户才能设置)

chmod 2755 [文件名]
chmod g+s [文件名]

取消权限可以用chmod 0755 [文件名]或者chmod g-s [文件名]

SBIT:Sticky Bit

这个权限的只能作用于目录,每个用户都可以创建文件,删除自己的文件,但是不能删除别人的文件。目录设置了其sticky权限,其目录其他用户组的执行权限x会变成t(小写),如果变成了大写T ,那么表示其目录其他用户位上没有可执行权限,当然设置的Sticky就无效。

赋权方式:(root用户才能设置)

chmod 1755 [目录名]
chmod o+s [目录名]

取消权限可以用chmod 0755 [文件名]或者chmod o-s [文件名]

chattr权限(不可改变位权限)

chattr命令用于改变文件属性,只针对root用户有效。

格式:chattr [ + - = ] [选项] 文件或目录,这里的[ + - = ]是控制文件的属性。

+  : 增加权限。
-  : 删除权限。
=  : 赋予/等于某权限。

常用选项:

i  :  即insert,不得任意更动文件或目录。
   如果对文件设置i属性,那么不允许对文件进行删除,重命名,添加和修改数据,相当于锁定这个文件。
   如果对目录设置i属性,那么只能修改目录下的文件数据(文件数据保存在文件自己的数据块中),不允许建立和删除文件。
a  :  即append,让文件或目录仅供附加用途。
   如果对文件设置a属性,只能在文件中添加数据(因为vi被禁用了,所以用echo  >> 输出重定向追加的方式),不能删除也不能修改数据。
   如果对目录设置a属性,那么只允许在目录中新建和修改文件,不允许删除文件,可以适用于各种日志文件。

赋权命令:chattr +[-\=] [filename]

查看命令:chattr [filename]

最后修改:2020 年 08 月 10 日 08 : 41 PM
请作者喝杯奶茶吧~