capabilities(7)
프로세스에 모든 루트 권한을 부여하지 않는 좋은 방법이며 대신 AFAIK를 사용할 수 있습니다 setuid(2)
. 이것 과 다른 많은 사람들 에 따르면 ,
"안타깝게도 여전히 많은 바이너리에
setuid
비트 세트가 있지만 대신 대체해야합니다capabilities
."
간단한 예로 우분투에서는
$ ls -l `which ping`
-rwsr-xr-x 1 root root 44168 May 8 2014 /bin/ping
아시다시피 파일에 suid / guid를 설정하면 유효 사용자 ID가 root로 변경됩니다. 따라서 suid 사용 프로그램에 결함이있는 경우 권한이없는 사용자가 탈주하여 루트 사용자와 동등하게 될 수 있습니다.
내 질문은 왜 많은 Linux 배포판이 여전히 setuid
방법을 사용 하는 반면 설정 capabilities
은 보안 문제가 적은 대신 사용할 수 있습니까?
이것은 어딘가에서 어딘가에서 어떤 방식 으로든 결정한 이유를 제공하지 않을 수 있지만 일부 감사 도구 및 인터페이스는 아직 기능에 대해 알지 못할 수 있습니다.
예를 들어 proc_connector netlink 인터페이스와이를 기반으로하는 프로그램 ( 예 :)forkstat
: 자격 증명을 변경하는 프로세스에 대한 이벤트가 있지만 기능을 변경하지 않는 경우가 있습니다.
FWIW, 왜 원인 은 예를 들면 얻을 수 net_raw+ep
ping(8)
에 setuid를 한 대신 데비안처럼 그가에 의존하기 때문에 배포판입니다 setcap(8)
로부터 유틸리티 libcap2-bin
이미 기존 패키지 전에 설치 ping
. 에서 iputils-ping.postinst
:
if command -v setcap > /dev/null; then
if setcap cap_net_raw+ep /bin/ping; then
chmod u-s /bin/ping
else
echo "Setcap failed on /bin/ping, falling back to setuid" >&2
chmod u+s /bin/ping
fi
else
echo "Setcap is not installed, falling back to setuid" >&2
chmod u+s /bin/ping
fi
또한 ping
자체적으로 setuid 권한을 삭제하고 시작시 Linux에서 기능을 사용하도록 전환하므로 이에 대한 우려가 다소 과장 될 수 있습니다. 에서 ping.c
:
int
main(int argc, char **argv)
{
struct addrinfo hints = { .ai_family = AF_UNSPEC, .ai_protocol = IPPROTO
_UDP, .ai_socktype = SOCK_DGRAM, .ai_flags = getaddrinfo_flags };
struct addrinfo *result, *ai;
int status;
int ch;
socket_st sock4 = { .fd = -1 };
socket_st sock6 = { .fd = -1 };
char *target;
limit_capabilities();
에서 ping_common.c
void limit_capabilities(void)
{
...
if (setuid(getuid()) < 0) {
perror("setuid");
exit(-1);
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다