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文件)
文件权限分类
总共三种,但组合变换很多
权限 | 对应数字 | 对文件 | 对目录 |
---|---|---|---|
r | 4 | 可读文件的内容(catmoreheadtail) | 可以查询目录下的文件(lsll) |
w | 2 | 可编辑文件但不能删除(vimecho) | 可增删改移该目录下的文件和目录(cpmvtouchrm) |
x | 1 | 可执行 | 可执行但不能运行,可进入目录(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
;
对于文件能否删除,首先要对目录具有执行权限,同时对文件也要有可执行权限;
对于目录的赋权为0
,5(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
值。
文件默认权限的计算
文件默认最大权限为666
,umask = 022
:
则有 -rw-rw-rw-
减去 -----w--w-
得到 -rw-r--r--
即644
目录默认权限的计算
目录默认最大权限为777
,umask = 022
:
则有 drwxrwxrwx
减去 d----w--w-
得到 drwxr-xr-x
即 755
其实是字符做了一个与非的运算
要想修改umask
的默认值,需要修改环境配置文件/etc/profile
。
文件的特殊权限:SUID、SGID、SBIT
三者关系简单说,Linux下除了rwx
外还有s
和t
两个特殊权限,当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
现在有两个文件权限分别为755
和644
,也即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
则表示test2
的SUID
权限不能正确使用。因为test2
本身就不具备可执行的权限。
SUID
(SGID
)赋权原则
1、关键目录、根目录等要严格控权,防止越权篡改文件。
2、严格控制系统命令的SUID
和SGID
权限,谨防被利用。
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]
文章的确不错啊https://www.cscnn.com/