chmod 6110을 사용하여 `less`를 실행할 때 "권한 거부"가 나타나는 이유는 무엇입니까?

chmod 6110을 사용하여 `less`를 실행할 때 "권한 거부"가 나타나는 이유는 무엇입니까?

당신이 사용자라고 가정 x하면 실행 id하면

uid=1001(x) gid=1001(x) groups=1001(x)

y다른 사용자 가 있습니다

uid=1002(y) gid=1002(y) groups=1002(y)

이제 아래와 같이 사용자의 홈 디렉터리에 root파일을 만듭니다 .readmex

# 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.

xsetgid 비트는 유효 gid를 여기( chmod y:x less) 에 있는 바이너리 소유자 그룹의 gid로 만듭니다 .

less마지막으로 ys에 해당하는 유효 uid와 xs에 해당하는 유효 gid를 사용하여 실행합니다. readme에 속하기 때문에 읽을 수 없습니다 root:y.

관련 정보