권한이 없는 일반 사용자가 /bin/login에 환경 변수를 전달합니다.

권한이 없는 일반 사용자가 /bin/login에 환경 변수를 전달합니다.

FreeBSD(또는 Linux)에 권한이 없는 일반 사용자(수퍼유저가 아님)가 있다고 가정합니다. 그리고 이 사용자가 소유한 텔넷 독립형(텔넷은 일반적으로 inetd에서 실행된다는 것을 알고 있습니다)이 있습니다. (원래 루트 소유의 텔넷이 실행되고 있지 않다고 가정합니다.) 이 텔넷 서버는 setuid가 설정된 루트 소유의 /bin/login에 전달하기 전에 ld_* 환경 변수를 확인하지 않도록 프로그래밍되어 있습니다.

질문은 다음과 같습니다. 1. 이 텔넷이 작동합니까? 2. 작동한다면 /bin/login에 환경 변수를 전달할 수도 있습니까?

답변1

FreeBSD(또는 Linux)에 권한이 없는 수퍼유저가 있다고 가정해 보겠습니다.

"권한이 없는 수퍼유저"는 용어상 모순입니다. "수퍼유저"라는 단어 자체는 모든 권한을 가진 사용자를 의미합니다.

이 텔넷 서버는 ld_* 환경 변수를 확인하지 않도록 프로그래밍되어 있습니다.

이것이 관련이 있는지 잘 모르겠습니다. 텔넷 서버에는 특별한 권한이 없으므로 LD_*변수를 제거하는 것은 그다지 유용하지 않습니다.

  1. 이 텔넷이 작동할까요? 2. 작동한다면 /bin/login에 환경 변수를 전달할 수도 있습니까?

부분적으로 작동하지만 CAP_NET_BIND_SERVICE 권한 누락으로 인해 표준 Telnet 포트에 바인딩하지 못할 가능성이 높습니다.

login예, 다른 프로세스와 마찬가지로 환경 변수를 에 전달할 수 있습니다 . 그러나 적어도 Linux에서는 로더(ld-linux.so)가 LD_*setuid 프로그램을 실행하기 전에 모든 변수를 삭제하므로 setuid-는 login해당 변수의 영향을 받지 않습니다.

관련 정보