[linux] /sbin/capsh

ケーパビリティを確認したり

root@ubuntu: # capsh --print
Current: =ep
Bounding set =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,35
Securebits: 00/0x0/1'b0
 secure-noroot: no (unlocked)
 secure-no-suid-fixup: no (unlocked)
 secure-keep-caps: no (unlocked)
uid=0(root)
gid=0(root)
groups=0(root)


ケーパビリティ落としてシェル実行したりできる

root@ubuntu:# capsh --drop=cap_chown -- -c "chown hiboma:hiboma /"
chown: changing ownership of `/': Operation not permitted


setuid,setgidっぽいこともできる

root@ubuntu: # capsh --gid=1001 --uid=1001 -- -c id
uid=1001(hiboma) gid=1001(hiboma) groups=1001(hiboma),0(root)


--forkfor=N で forkしたプロセスをsleepさせておける

root@ubuntu: # capsh --gid=1001 --uid=1001 --forkfor=100 
root@ubuntu: # ps aux | grep 1001
hiboma    1082  0.0  0.0   6104    96 pts/0    S    22:24   0:00 capsh --gid=1001 --uid=1001 --forkfor=100


落とすケーパビリティを間違えてクリティカルなコマンド実行のテストしたりすると死ねるから やるときゃサンドボックスな環境でね