使用 capsh 删除所有功能

问题描述 投票:0回答:2

我正在尝试使用 capsh 授予自己一个对某个用户没有任何功能的 shell。这样我就可以测试与非 root 相关但仅具有某些功能的安全内容。

基本上我想让一个 shell 运行与此类似的东西。这将模拟测试程序运行的状态。

capsh --print
Current: =
Bounding set =
Securebits: 00/0x0/1'b0
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: no (unlocked)
 secure-keep-caps: no (unlocked)
uid=10101(u0_a101)
gid=10101(u0_a101)
groups=9997(everybody),50101(all_a101)

然后我希望能够再次运行 capsh 来授予用户一些功能和/或更改 uid/gid(如果可能的话)。

如果有人有好的参考,我还没有找到任何关于 capsh 的好的教程。

http://man7.org/linux/man-pages//man1/capsh.1.html

linux linux-capabilities capsh
2个回答
6
投票
  1. 列出当前功能

    capsh --print
    Current: =
    Bounding set=cap_chown,cap_dac_override,[...]
    Securebits: 00/0x0/1'b0
     secure-noroot: no (unlocked)
     secure-no-suid-fixup: no (unlocked)
     secure-keep-caps: no (unlocked)
    uid=1000(user)
    gid=1000(user)
    groups=4(adm),10101(u0_a101)
    
  2. 1.
    Bounding 部分删除所有功能:

    capsh --drop=cap_chown,cap_dac_override,[...]
    
  1. +切换用户和组:

    capsh --gid=10101 --drop=cap_chown,cap_dac_override,[...] --uid=10101
    
  1. +加入群组

    capsh --gid=10101 --drop=cap_chown,cap_dac_override,[...] \
    --uid=10101 --groups=9997,50101
    
  1. + 执行应用程序

    capsh --gid=10101 --drop=cap_chown,cap_dac_override,[...] \
    --uid=10101 --groups=9997,50101 -- -c 'ping 127.0.0.1'
    

0
投票

我想从我对这个问题的评论中还不清楚,但尽管人们普遍认为,

capsh --drop=all
确实不会阻止用户使用功能。你想要的是:

$ sudo capsh --user=$(whoami) --mode=NOPRIV --
$ capsh --current
Current: =
Current IAB: !cap_chown,!cap_dac_override,!cap_dac_read_search,!cap_fowner,!cap_fsetid,!cap_kill,!cap_setgid,!cap_setuid,!cap_setpcap,!cap_linux_immutable,!cap_net_bind_service,!cap_net_broadcast,!cap_net_admin,!cap_net_raw,!cap_ipc_lock,!cap_ipc_owner,!cap_sys_module,!cap_sys_rawio,!cap_sys_chroot,!cap_sys_ptrace,!cap_sys_pacct,!cap_sys_admin,!cap_sys_boot,!cap_sys_nice,!cap_sys_resource,!cap_sys_time,!cap_sys_tty_config,!cap_mknod,!cap_lease,!cap_audit_write,!cap_audit_control,!cap_setfcap,!cap_mac_override,!cap_mac_admin,!cap_syslog,!cap_wake_alarm,!cap_block_suspend,!cap_audit_read,!cap_perfmon,!cap_bpf,!cap_checkpoint_restore

这是一个可以通过

--drop=all
操作保留个人能力的序列(这个和其他陷阱记录在
libcap
capsh
,...分发站点
):

$ sudo capsh --inh=cap_setuid --
$ capsh --drop=all --
$ capsh --current
Current: cap_setuid=eip
Current IAB: !cap_chown,...,!%cap_setuid,...,!cap_checkpoint_restore
$ exit
$ exit
$ exit

即,Inheritable能力标志不受Bounding集的抑制,

--drop=
命令标志仅影响Bounding向量,并且仅抑制允许的文件标志值。

© www.soinside.com 2019 - 2024. All rights reserved.