많은 Linux 배포판이 기능 대신 setuid를 사용하는 이유는 무엇입니까?

임베디드 개발자

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

리소스를 가장 많이 사용하는 Linux 배포판은 무엇입니까?

분류에서Dev

최신 GNU / Linux 배포판에서 이전 바이너리를 실행하는 방법은 무엇입니까?

분류에서Dev

많은 사람들이 Rails에서 "%>"대신 "-%>"를 사용하는 이유는 무엇입니까?

분류에서Dev

배포판이 최신 Linux 커널을 사용하지 못하게하는 이유는 무엇입니까?

분류에서Dev

Linux 기반 운영 체제를 배포판이라고하는 이유는 무엇입니까?

분류에서Dev

"= default"대신 기본 생성자 "{}"를 사용하는 성능 차이가있는 이유는 무엇입니까?

분류에서Dev

Linux 배포판을 이식 가능한 이유는 무엇입니까?

분류에서Dev

Linux 배포판의 성능이 다른 이유는 무엇입니까?

분류에서Dev

BCRYPT-Linux 배포판에서 기본적으로 사용하지 않는 이유는 무엇입니까?

분류에서Dev

group by + partition by 대신 partition by를 사용할 때 더 많은 레코드를 얻는 이유는 무엇입니까?

분류에서Dev

배포판 GNU를 만드는 것은 무엇이며 GNU가 아닌 Linux 배포판이 있습니까?

분류에서Dev

대기를 차단하는 대신 비 차단 waitpid를 사용하는 이유는 무엇입니까?

분류에서Dev

대신 &&를 사용하는 이유는 무엇입니까? 같은 줄에 명령을 배치하려면?

분류에서Dev

더 많은 패키지를 지원하는 배포판은 무엇입니까? Arch 또는 Debain 기반?

분류에서Dev

내 TPL 프로그램이 비동기 / 대기보다 더 많은 ThreadPool 리소스를 사용하는 이유는 무엇입니까?

분류에서Dev

다른 Linux 배포판과 함께 Ubuntu를 이중 부팅하는 방법은 무엇입니까?

분류에서Dev

내 파이썬 코드가 "기능"과 많은 숫자를 인쇄하는 이유는 무엇입니까?

분류에서Dev

여러 Linux 배포판이 POSIX와 호환되지 않지만 기본적으로 mawk를 제공하는 이유는 무엇입니까?

분류에서Dev

사용자없이 (루트 만) 일반 Linux 배포판에 로그인하는 방법은 무엇입니까?

분류에서Dev

VMWare의 자동 맞춤 게스트 기능을 지원하는 Linux 배포판은 무엇입니까?

분류에서Dev

VMWare의 자동 맞춤 게스트 기능을 지원하는 Linux 배포판은 무엇입니까?

분류에서Dev

클릭하는 대신 Enter 키를 사용할 때 모든 작업 단추 기능이 작동하지 않는 이유는 무엇입니까?

분류에서Dev

게시물 대신 Div를 사용하여 페이지를 매기는 방법은 무엇입니까?

분류에서Dev

게시물 대신 Div를 사용하여 페이지를 매기는 방법은 무엇입니까?

분류에서Dev

scikit-learn DecisionTreeRegressor에서 "X"대신 실제 기능 이름을 사용하는 방법은 무엇입니까?

분류에서Dev

대부분의 Linux 배포판이 POSIX와 호환되지 않는 이유는 무엇입니까?

분류에서Dev

대부분의 Linux 배포판에서 Perl이 기본적으로 설치되는 이유는 무엇입니까?

분류에서Dev

대부분의 Linux 배포판에서 Perl이 기본적으로 설치되는 이유는 무엇입니까?

분류에서Dev

다른 Linux 배포판에서 패키지를 패치해야하는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    리소스를 가장 많이 사용하는 Linux 배포판은 무엇입니까?

  2. 2

    최신 GNU / Linux 배포판에서 이전 바이너리를 실행하는 방법은 무엇입니까?

  3. 3

    많은 사람들이 Rails에서 "%>"대신 "-%>"를 사용하는 이유는 무엇입니까?

  4. 4

    배포판이 최신 Linux 커널을 사용하지 못하게하는 이유는 무엇입니까?

  5. 5

    Linux 기반 운영 체제를 배포판이라고하는 이유는 무엇입니까?

  6. 6

    "= default"대신 기본 생성자 "{}"를 사용하는 성능 차이가있는 이유는 무엇입니까?

  7. 7

    Linux 배포판을 이식 가능한 이유는 무엇입니까?

  8. 8

    Linux 배포판의 성능이 다른 이유는 무엇입니까?

  9. 9

    BCRYPT-Linux 배포판에서 기본적으로 사용하지 않는 이유는 무엇입니까?

  10. 10

    group by + partition by 대신 partition by를 사용할 때 더 많은 레코드를 얻는 이유는 무엇입니까?

  11. 11

    배포판 GNU를 만드는 것은 무엇이며 GNU가 아닌 Linux 배포판이 있습니까?

  12. 12

    대기를 차단하는 대신 비 차단 waitpid를 사용하는 이유는 무엇입니까?

  13. 13

    대신 &&를 사용하는 이유는 무엇입니까? 같은 줄에 명령을 배치하려면?

  14. 14

    더 많은 패키지를 지원하는 배포판은 무엇입니까? Arch 또는 Debain 기반?

  15. 15

    내 TPL 프로그램이 비동기 / 대기보다 더 많은 ThreadPool 리소스를 사용하는 이유는 무엇입니까?

  16. 16

    다른 Linux 배포판과 함께 Ubuntu를 이중 부팅하는 방법은 무엇입니까?

  17. 17

    내 파이썬 코드가 "기능"과 많은 숫자를 인쇄하는 이유는 무엇입니까?

  18. 18

    여러 Linux 배포판이 POSIX와 호환되지 않지만 기본적으로 mawk를 제공하는 이유는 무엇입니까?

  19. 19

    사용자없이 (루트 만) 일반 Linux 배포판에 로그인하는 방법은 무엇입니까?

  20. 20

    VMWare의 자동 맞춤 게스트 기능을 지원하는 Linux 배포판은 무엇입니까?

  21. 21

    VMWare의 자동 맞춤 게스트 기능을 지원하는 Linux 배포판은 무엇입니까?

  22. 22

    클릭하는 대신 Enter 키를 사용할 때 모든 작업 단추 기능이 작동하지 않는 이유는 무엇입니까?

  23. 23

    게시물 대신 Div를 사용하여 페이지를 매기는 방법은 무엇입니까?

  24. 24

    게시물 대신 Div를 사용하여 페이지를 매기는 방법은 무엇입니까?

  25. 25

    scikit-learn DecisionTreeRegressor에서 "X"대신 실제 기능 이름을 사용하는 방법은 무엇입니까?

  26. 26

    대부분의 Linux 배포판이 POSIX와 호환되지 않는 이유는 무엇입니까?

  27. 27

    대부분의 Linux 배포판에서 Perl이 기본적으로 설치되는 이유는 무엇입니까?

  28. 28

    대부분의 Linux 배포판에서 Perl이 기본적으로 설치되는 이유는 무엇입니까?

  29. 29

    다른 Linux 배포판에서 패키지를 패치해야하는 이유는 무엇입니까?

뜨겁다태그

보관