/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