내가 읽고 있는 내용은Wikipedia의 setuid.예시 중 하나다음과 같이:
4700
"root"가 소유한 실행 파일의 SUID
"tails"라는 사용자가 파일 실행을 시도했습니다. 파일 소유자는 "루트"이고 소유자의 권한은 실행 가능하므로 파일은 루트로 실행됩니다.
SUID가 없으면 그룹이나 다른 사용자가 파일에 대한 권한을 부여할 수 없으므로 사용자 "tails"는 파일을 실행할 수 없습니다. 기본 사용법은 바이너리를 통해 볼 수 있습니다
/usr/bin/passwd
.
난 이해가 안 돼요. 사용자가 파일 및 그룹의 소유자가 아니고 다른 권한을 사용할 수 없기 때문에 어떻게 파일을 "tails" 실행합니까?
나는 이 시나리오를 재현하려고 노력했고 실제로는 다음과 같습니다.
$ su -c 'install -m 4700 /dev/null suidtest'
$ ls -l suidtest
-rws------ 1 root root 0 21 dec 07:48 suidtest*
$ ./suidtest
bash: ./suidtest: Permission denied
권한이 있는 경우에만 이 기능을 사용할 수 있습니다 4755
. 또한 위키피디아 예시에서 언급한 기본 사용( )에는 /usr/bin/passwd
실제로 4755
권한이 있습니다.
이 예가 맞습니까? 제가 놓친 부분이 있습니까? 아니면 버그입니까?
답변1
당신 말이 맞습니다. Wikipedia 기사는 틀렸습니다. 아래 예를 참조하세요.
$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
$ sudo cp /usr/bin/passwd /tmp/
$ cd /tmp
$ ls -l passwd
-rwxr-xr-x 1 root root 30768 Dec 21 07:43 passwd
$ sudo chmod 4700 passwd
$ ls -l passwd
-rws------ 1 root root 30768 Dec 21 07:43 passwd
$ ./passwd
bash: ./passwd: Permission denied
$ sudo chmod 4701 passwd
$ ./passwd
Changing password for user vagrant.
Changing password for vagrant.
(current) UNIX password:
$