당신이 사용자라고 가정 x
하면 실행 id
하면
uid=1001(x) gid=1001(x) groups=1001(x)
y
다른 사용자 가 있습니다
uid=1002(y) gid=1002(y) groups=1002(y)
이제 아래와 같이 사용자의 홈 디렉터리에 root
파일을 만듭니다 .readme
x
# cd /home/x
# touch readme
# echo "hello" > readme
# chown root:y readme
# chmod 640 readme
복사해 보자less
# cd /home/x
# cp /usr/bin/less .
# chown y:x less
# chmod 6110 less
사용자가 다음을 실행하여 읽을 x
수 있기를 원합니다.readme
./less readme
하지만 setuid 및 setgid로 인해 "권한 거부" 오류가 발생합니다.왜?
이것은 내 논리이지만 뭔가 문제가 있을 수 있습니다.
chmod 6110
주어진오직소유자( y
) 및 그룹 구성원( ) x
의 실행 권한입니다 . 사용자는 x
그룹에 속해 있으므로 x
실행이 가능합니다 less
. 그런 다음 setuid는 유효 UID를 과 동일하게 만들고 y
, setgid는 다시 유효 GID를 소유자 그룹과 동일하게 만듭니다 y
. 그리고 readme
그룹이므로 y
읽기 less
권한이 있어야 합니다.
답변1
오류는 여기에 있습니다.
setgid는 다시 유효 GID를 소유자 그룹과 동일하게 만듭니다
y
.
x
setgid 비트는 유효 gid를 여기( chmod y:x less
) 에 있는 바이너리 소유자 그룹의 gid로 만듭니다 .
less
마지막으로 y
s에 해당하는 유효 uid와 x
s에 해당하는 유효 gid를 사용하여 실행합니다. readme
에 속하기 때문에 읽을 수 없습니다 root:y
.