콘솔에서 /etc/shadow 파일을 인쇄합니다.

콘솔에서 /etc/shadow 파일을 인쇄합니다.

/etc/shadow 파일에 액세스하기 위한 실행 파일의 권한을 어떻게 변경합니까?

지금까지 다음과 같은 bash 스크립트가 있습니다.

#!/bin/bash

gcc print.c -o print
chmod +s print

./print

exit 0

그리고 다음 C 코드:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *open = fopen("/etc/shadow", "r");
    int tmp;

    do {
      tmp = fgetc (open);
      printf("%c", tmp);
    } while (tmp != EOF);

    fclose(open);
    return 0;
}

파일 을 쉽게 인쇄할 수 있지만 파일 /etc/passwd에 액세스하자마자 /etc/shadow코어 덤프가 생성됩니다.

답변1

바이너리에 루트로 실행할 수 있는 권한을 부여하려면 바이너리에 "고정 비트"를 설정해야 합니다.

일반적으로 컴파일 후에는 다음을 볼 수 있습니다.

# ls -l print
-rwxr-xr-x  1 mark  mark  111 24 Oct 17:32 print

set-uid(고정) 비트 설정은 8진수 모드를 사용하거나 기호적으로 수행할 수 있습니다(파일 소유권을 변경하려면 "루트" 권한이 필요합니다).

# chown root print
# chmod o-x print
# chmod u+s print
# ls -l print
-rwsr-xr--  1 root  mark  111 24 Oct 17:32 print

첫 번째 버전에서는 s이미 알아낸 것처럼 권한에 이것이 실행 가능하고 "set-uid"라고 나와 있습니다. 하지만 "set-uid"가 설정되도록 파일의 소유권도 변경해야 합니다.뿌리자신의 사용자가 아닌 이 시점에서 "group"의 값은 변경되지 않았지만 이 경우에는 중요하지 않습니다. (이건 안전상의 문제일 수도 있습니다.)

위의 마지막 줄에 표시된 권한은 8진수로 표시될 수도 있으므로 원하는 경우 chmod위의 두 줄을 하나로 바꿀 수 있습니다.

# chmod 4754 print

자세한 내용은 매뉴얼 페이지를 확인하세요 chmod.

이것이 원하는 것이 아니라면 질문에서 요구 사항을 명확히 하십시오.

중요한 팁: 이 /etc/shadow문서는 어떤 이유에서인지 비밀로 유지됩니다. 다른 사용자가 실행할 수 있는 것에 노출하면 시스템 보안이 손상될 수 있습니다. 월드 실행 권한을 제거하는 것은 보안에 대한 "고개"이지만 /etc/shadow이런 방식으로 노출 해야 한다고 생각하는 경우잘못된 문제를 해결하고 있을 수도 있습니다..

답변2

이는 루트 없이도 작동하지만 프로그램에 SUID를 설정해야 합니다. 이를 수행하는 방법에는 두 가지가 있으며 둘 다 정확히 동일합니다.

chmod u+s [program]
chmod 4755 [program]

한 번 살펴보고 싶을 수도 있습니다사용자 ID 설정

또한 이것을 C에서 처리하려면 다음을 수행하십시오.

당신은 그것을 확인해야합니다setuid 함수

Bash에서 이 작업을 수행하려면 다음을 수행하십시오.

당신은 그것을 확인해야합니다쉘 스크립트의 setuid

관련 정보