프로그램 실행에 루트가 필요한지 어떻게 알 수 있습니까?


10

나는 이것이 약간의 근본적이고 어리석은 질문이라는 것을 이해하지만 대답을 찾지 못했습니다.

모든 파일에 "Executable"비트 가 있음을 이해합니다 .

나는 사용자와 그룹 root이 소유하고 있어야하는 프로그램 에 비트 가 없으며 루트가 아닌 사용자가 실행하지 못하게 한다고 가정했습니다 . 그러나 및 디렉토리 에서 모든 파일에 다음과 같은 권한이 있음을 알 수 있습니다.rootrootExecutableOther/bin/sbin-rwxr-xr-x

그렇다면 사용자가 무언가를 실행하기 위해 루트 권한이 필요한지 실제로 결정하는 것은 무엇입니까?


1
기본적으로 또는 사용자로부터 어떤 프로그램을 실행할 수 있습니다 /bin또는 /sbin디렉터리를. 문제는 해당 프로그램 중 일부가 실행중인 사용자에 따라 다르게 실행되고 있다는 것입니다.
Radu Rădeanu

답변:


13

언젠가는 코드에 있습니다. 예를 들어의 중간에 hwclock.c다음이 있습니다.

if (getuid() == 0)
            permitted = TRUE;
else {
            /* program is designed to run setuid (in some situations) */
            if (set || systohc || adjust) {
                    warnx(_("Sorry, only the superuser can change "
                            "the Hardware Clock."));
[...]

루트 여부에 관계없이 프로그램의 동작이 변경됩니다.

대부분의 경우 암시 적입니다. 커널에 위임되었습니다. 예를 들어, 프로그램이 시스템 을 재부트 할 수 있는 시스템 호출호출 하면 루트 인 경우에만 작동합니다. 루트가 아닌 경우 응용 프로그램 (잘 작성된 경우)이 단순히 사용자에게보고하는 "권한 거부"오류가 발생합니다. 또는 파일을 삭제하려고합니다. 파일에 대한 올바른 권한이 있으면 성공합니다. 그렇지 않은 경우, 루트인지 아닌지에 따라 다릅니다. --- rm호출 할 때 unlink()커널이 권한을 확인합니다.

따라서 원칙적으로 프로그램에 루트 권한이 필요한지 여부는 실행 파일의 권한을 보는 것만으로는 말할 수 없습니다. 많은 프로그램은 일부 작업에만 필요하므로 그러한 작업을 수행하는 것은 실제로 어려울 것입니다. 의 경우 hwclock하나 (사람이 시계를 읽을 수 있지만 루트를 설정할 수 있습니다)이지만, 그 중 수백이있다 ( kill, rm, cat...)

그러면 setuid 프로그램 의 관련되고 흥미로운 세계가 있습니다 ...


기본적으로 커널은 "담당자"입니까? 프로그램이 시스템 호출을하면, 커널은 프로그램을 실행하는 사용자가 루트인지를 결정하고이를 강제합니까?

2
기본적으로 그렇습니다. 프로그램 추가 테스트 수행 할 수 있지만 권한 검사는 커널 수준입니다. Setuid-root 프로그램은 예외입니다. 그들은 항상 루트 권한으로 실행되므로 권한을 직접 확인해야합니다 (보안 결함의 좋은 글꼴입니다 ...)
Rmano
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.