Debian Gnu / Linux에서 기능을 실험하고 있습니다.
/ bin / ping을 현재 작업 디렉토리에 복사했습니다. 예상대로 작동하지 않아 원래 setuid 루트였습니다.
그런 다음을 수행하여 핑에 최소한의 기능 (루트가 아닌)을 제공하고 sudo /sbin/setcap cap_net_raw=ep ./ping
예상대로 핑이 작동합니다.
그런 다음 sudo /sbin/setcap -r ./ping
해당 기능을 취소하십시오. 이제 예상대로 작동하지 않습니다.
이제을 사용하여 ping 작업을 시도합니다 capsh
.
capsh
권한이 없으므로 루트로 실행해야하지만 루트와 다른 모든 권한을 삭제하십시오.
나는 또한 필요하다고 생각한다 secure-keep-caps
.이 문서화되어 있지 capsh
않지만 기능 매뉴얼에있다. 에서 비트 번호를 받았습니다 /usr/include/linux/securebits.h
. 출력에 --print
이러한 비트가 올바른 것으로 표시 되므로 올바른 것으로 보입니다 .
나는 몇 시간 동안 애 쓰고 있었고 지금까지 나는 이것을 가지고있다.
sudo /sbin/capsh --keep=1 --secbits=0x10 --caps="cap_net_raw+epi" == --secbits=0x10 --user=${USER} --print -- -c "./ping localhost"
그러나의 ping
오류 ping: icmp open socket: Operation not permitted
는 기능이없는 경우에 발생합니다. 또한 --print
쇼 Current: =p cap_net_raw+i
는 이것으로 충분하지 않습니다 e
.
sudo /sbin/capsh --caps="cap_net_raw+epi" --print -- -c "./ping localhost"
이 기능을 Current: = cap_net_raw+eip
올바르게 설정 하지만 우리를로 남겨 둡니다 root
.
편집 -1
나는 지금 시도했다 sudo /sbin/capsh --keep=1 --secbits=0x11 --caps=cap_net_raw+epi --print -- -c "touch zz; ./ping -c1 localhost;"
이것은 다음을 생성합니다.
touch: cannot touch `zz': Permission denied
ping: icmp open socket: Operation not permitted
첫 번째 오류는 예상되지만 두 번째 오류 secure-noroot: yes
는 아닙니다Current: = cap_net_raw+eip
편집 -2
을 ==
앞에 두면 --print
이제가 표시 Current: = cap_net_raw+i
되어 이전 오류를 설명하지만 루트에서 전환 할 때 기능을 잃어 버린 이유는 아닙니다 secure-keep-caps
. 하지만 해결해야합니다.
편집 -3
내가 볼 수 있듯이 exec가 호출 될 때 Effective (e) 및 Permitted (p)를 잃어 버렸습니다. 이것은 예상되지만 보안 유지 캡이 손실을 막아야한다고 생각했습니다. 뭔가 빠졌습니까?
편집 -4
더 많은 연구를하고 매뉴얼을 다시 읽었습니다. 다음 e
과 같은 경우에는 일반적으로 p
기능이 손실되는 것 같습니다. 사용자에서 전환 root
하거나 적용 secure-noroot
하여 루트를 일반 사용자로 만드는 경우 이는 다음으로 대체 될 수 있습니다 secure-keep-caps
. 당신이 전화 할 때 exec
, 이것이 변하지 않는 것을 말할 수있는 한.
내가 알 수있는 한, 그것은 매뉴얼에 따라 작동합니다. 내가 알 수있는 한 유용한 기능을 수행 할 수있는 방법이 없습니다 capsh
. 내가 알 수있는 한, 기능을 사용하려면 다음을 수행해야합니다. 파일 기능을 사용하거나 사용하지 않는 기능 인식 프로그램이 있어야합니다 exec
. 따라서 권한있는 래퍼가 없습니다.
그래서 지금 내 질문은 내가 뭘 놓쳤는 지, 무엇을 capsh
위한 것입니다.
편집 -5
주변 기능에 대한 답변을 추가했습니다. 어쩌면 capsh
또한 상속 기능을 사용할 수 있지만 이러한 실행 파일에 설정 될 필요가 유용 할 수 있습니다. 주변 기능이 없거나 상속 된 기능을 허용하지 않고 capsh가 유용한 기능을 수행하는 방법을 알 수 없습니다.
버전 :
capsh
패키지libcap2-bin
버전에서1:2.22-1.2
- 편집하기 전에 3에서 최신을
capsh
가져git://git.debian.org/collab-maint/libcap2.git
와서 사용하기 시작했습니다. uname -a
Linux richard-laptop 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
사용자 영역은 32 비트입니다.
capsh
주변이 없을 때 (원래대로) 사용이 무엇인지 입니다. 내가 뭘 놓 쳤어? 사용해야합니다.
capsh
도 공동-MAINT의 REPO에서하면 "최신"을 부여하지 않았을capsh
, 데비안 패키지는 여전히 주변 기능을 지원하지 않습니다. 업스트림 2.27이 수행합니다.