권한 4750 프로세스가 있습니다. 두 명의 사용자가 내 Linux 시스템에 있습니다. 루트 사용자와 appz 사용자. 이 프로세스는 "appz"사용자로 실행되는 프로세스 관리자의 권한을 상속받습니다.C에서 setuid 프로그램을 실행하는 올바른 방법
나는 두 가지 기본 루틴을 가지고 :
int main() {
undo_root();
do some stuff;
do_root();
bind(port 80); //needs root perm
undo_root();
while(1) {
accept commads()
if (commands needs root user access)
{
do_root();
execute();
undo_root();
}
}
당신은 내가 루트로 몇 가지 명령을 실행할 볼 수 있듯이 :
void do_root (void)
{
int status;
status = seteuid (euid);
if (status < 0) {
exit (status);
}
}
/* undo root permissions */
void undo_root (void)
{
int status;
status = seteuid (ruid);
if (status < 0) {
exit (status);
}
status = setuid(ruid);
if (status < 0) {
exit (status);
}
}
내 흐름은 다음과 같다. 임시로 사용 권한을 삭제하려고하는데 작업에 루트 액세스가 필요한 경우 do_root 및 undo_root 호출 사이에서 명령을 래핑합니다.
그러나 내 프로그램이 작동하지 않는 것으로 보입니다.
정식 방법은 무엇입니까?
seteuid가 실패 할 때 종료하는 것이 아니라 perror() 프로그램이 실패한 이유를 알려줍니다. –
일단 루트 사용 권한을 삭제하면 되돌릴 수 없습니다 !! – Petesh
기술적으로, 프로세스가 아닌 4750 권한을 가진 프로그램을 보유하고있는 파일입니다. 권한이'root : group : 4750'이라고 직접 말하지는 않습니다 - 안전한 추론입니까? –