Linux:OS_security SetUID与权能

参考:http://blog.sina.com.cn/s/blog_e75622150102xh8p.html

 

 

 

1.解释passwdsudoping等命令为什么需要setuid位,去掉s位试运行,添加权能试运行。

(1)通过which命令查看passwd、sudo、ping命令的位置,然后查看这三个命令的权限,发现这三个命令的属主和数组都是root,即需要root权限来运行此命令,普通用户没有权限运行此命令。所以对这些命令setuid位,允许用户以文件所有者的权限执行一个程序的权限位,使用户在运行这些命令时临时获得这些命令属主的权限,就可以临时提权,普通用户也可以使用这些命令完成相应的功能。

 

(2)以ping命令为例:

设置了s位,可以正常ping百度

去掉s位,看到ping命令显示Operation not permitted

将s位添加回来,又可以正常进行ping

 

 

(3)以ping命令为例:

去掉s位之后,为ping命令添加权能cap_net_raw,发现ping操作可以正常运行

 

2.指出每个权能对于的系统调用,简要解释功能

参考:https://www.cnblogs.com/zhiliao112/p/4051376.html

每个进程有三个和能力有关的位图:inheritable(I)、permitted(P)和effective(E),对应进程描述符 task_struct(include/linux/sched.h)里面的cap_effective, cap_inheritable, cap_permitted。每种能力由一位表示,1表示具有某种能力,0表示没有。
1)cap_effective 当一个进程要进行某个特权操作时,操作系统会检查 cap_effective的对应位是否有效,而不再是检查进程的有效UID是否为0。

例如,如果一个进程要设置系统的时钟,Linux的内核就会检查 cap_effective的CAP_SYS_TIME位(第25位)是否有效,
2)cap_permitted 表示进程能够使用的能力。在cap_permitted中可以包含cap_effective中没有的能力,这些能力是被进程自己临时放弃的,也可以说cap_effective是cap_permitted的一个子集。进程放弃没有必要的能力对于提高安全性大有助益。

例如,ping只需要CAP_NET_RAW,如果它放弃除这个能力之外的其它能力,即使存在安全缺陷,也不会对系统造成太大的损害。
3)cap_inheritable表示能够被当前进程执行的程序继承的能力。

 

能力

编号

解释

CAP_CHOWN

0

允许改变文件的所有权

CAP_DAC_OVERRIDE

1

忽略对文件的所有DAC访问限制

CAP_DAC_READ_SEARCH

2

忽略所有对读、搜索操作的限制

CAP_FOWNER

3

如果文件属于进程的UID,就取消对文件的限制

CAP_FSETID

4

允许设置setuid位

CAP_KILL

5

允许对不属于自己的进程发送信号

CAP_SETGID

6

允许改变组ID

CAP_SETUID

7

允许改变用户ID

CAP_SETPCAP

8

允许向其它进程转移能力以及删除其它进程的任意能力

CAP_LINUX_IMMUTABLE

9

允许修改文件的不可修改(IMMUTABLE)和只添加(APPEND-ONLY)属性

CAP_NET_BIND_SERVICE

10

允许绑定到小于1024的端口

CAP_NET_BROADCAST

11

允许网络广播和多播访问

CAP_NET_ADMIN

12

允许执行网络管理任务:接口、防火墙和路由等

CAP_NET_RAW

13

允许使用原始(raw)套接字

CAP_IPC_LOCK

14

允许锁定共享内存片段

CAP_IPC_OWNER

15

忽略IPC所有权检查

CAP_SYS_MODULE

16

插入和删除内核模块

CAP_SYS_RAWIO

17

允许对ioperm/iopl的访问

CAP_SYS_CHROOT

18

允许使用chroot()系统调用

CAP_SYS_PTRACE

19

允许跟踪任何进程

CAP_SYS_PACCT

20

允许配置进程记帐(process accounting)

CAP_SYS_ADMIN

21

允许执行系统管理任务:加载/卸载文件系统、设置磁盘配额、开/关交换设备和文件等

CAP_SYS_BOOT

22

允许重新启动系统

CAP_SYS_NICE

23

允许提升优先级,设置其它进程的优先级

CAP_SYS_RESOURCE

24

忽略资源限制

CAP_SYS_TIME

25

允许改变系统时钟

CAP_SYS_TTY_CONFIG

26

允许配置TTY设备

CAP_MKNOD

27

允许使用mknod()系统调用

CAP_LEASE

28

Allow taking of leases on files

 

3.查找你linux发行版系统中所有设置了setuid位的程序,指出其应该有的权能。

本实验所用的linux环境为如下:

 

find命令根据权限查找 -perm

-perm [/|-]mode  mode 可以是代表权限的八进制数字(777、666 …)也可以是权限符号(u=x,a=r+x)。

1)mode:精确权限匹配;寻找具体权限的文件

2)-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足。9位权限之间存在“与”关系;

寻找到的文件至少拥有 mode 所述的权限,而不是具体的权限(大于或等于此权限的文件都会被查找出来)

3)/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;9位权限之间存在“或”关系; 

只要有一组用户匹配到一个权限即可

 

处理动作:

-print:输出至标准输出;默认的动作;

-ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;

-delete:删除查找到的文件;

-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;

-ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;

-exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;

 

例子:

#find  /tmp  -perm  755           //查找在/tmp目录下权限是755的文件   (要用sudo执行)

find -perm 777  查找到当前目录权限为确切为 777 权限的文件

find -perm -766 这条命令将在所有文件中查找文件所有者的“读/写/执行”权限,文件用户组的“读/写”权限和其他用户的“读/写”权限。文件并不要求是确切的 766 权限。它将会显示任何属于(高于)此权限的文件 。

find -perm -220  查找所有者用户组都拥有写权限的文件

find -perm /220  查找所有者用户组中拥有写权限的文件。这意味着匹配所有者和用户组任一可写的文件,而其他人的权限随意

find -perm /222 查找某些人(要么是所有者、用户组,要么是其他人)拥有写权限的文件。

 

可以等效使用 = 或 + 两种符号标识

find -perm -g=w 寻找用户组中拥有 写 权限的文件   find -perm -g+w

find -perm -u=w 查找文件所有者中拥有写权限的文件

find -perm -a=w 查找所有用户中拥有写权限的文件

find -perm -g+w,u+w 查找所有者和用户组中同时拥有写权限的文件 上述命令等效与 find -perm -220。

find -perm /u+w,g+w 查找所有者或用户组中拥有写权限的文件 find -perm /u=w,g=w 上述命令等效于 find -perm /220。

 

        421 421 421

777     rwx rwx rwx

766     rwx rw- rw-

655     rw- r-x r-x

 

https://www.cnblogs.com/scrit/p/5854197.html

https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79179965

 

综上,本题需要找出所有设置了setuid的程序,可以用下面的任意一个命令完成此功能。

sudo find / -perm /4000 -print   或  sudo find / -perm /4000 -ls

sudo find / -perm -4000 -print

sudo find / -perm /u=s -print

sudo find / -perm -u=s -print

sudo find / -perm /u+s -print

sudo find / -perm -u+s -print

 

 

 

列举部分命令程序的权能如下:

/bin/su

CAP_DAC_OVERRIDE

忽略对文件的所有DAC访问限制

CAP_SETGID

允许改变组ID

CAP_SETUID

允许改变用户ID

/bin/ping

CAP_NET_RAW

允许使用原始(raw)套接字

/bin/fusermount

CAP_SYS_ADMIN

允许执行系统管理任务:加载/卸载文件系统、设置磁盘配额、开/关交换设备和文件等

/bin/umount

CAP_SYS_ADMIN

允许执行系统管理任务:加载/卸载文件系统、设置磁盘配额、开/关交换设备和文件等

/bin/mount

CAP_SYS_ADMIN

允许执行系统管理任务:加载/卸载文件系统、设置磁盘配额、开/关交换设备和文件等

/usr/bin/passwd

CAP_CHOWN

允许改变文件的所有权

CAP_DAC_OVERRIDE

忽略对文件的所有DAC访问限制

CAP_FOWNER

如果文件属于进程的UID,就取消对文件的限制

mount命令:可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了

fuser 可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息

 

4.实现一个程序使其满足以下功能:

(1)能够永久删除其子进程的某个权能

(2)能暂时性的删除其子进程的某个权能

(3)能让上面被暂时性删除的权能重新获得

 

(1)进行完一些基础的设置(安装libcap-dev 设置ping权能)之后,编译运行

 

 

(2)查看当前权能,进行ping,可以ping通

 

(3)暂时删除权能后,发现不能ping了

 

(4)恢复权能后,发现又能ping通了

 

(5)永久删除某权能后,又能ping通了

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安安csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值