Unix `su`와 `login`의 숨겨진 역사

by DD
4일 전
조회수 0

`su` 명령어가 `login`을 대체하며 사용자 전환 방식으로 자리 잡은 역사적 배경을 조명함.

초기 Unix에서는 새로운 로그인 셸 환경을 위해 `login`을, 현재 환경 유지를 위해 `su`를 사용했음.

System III 이후 `su`가 로그인 셸 옵션을 지원하며 변화했고, 현대 Unix에서는 `su`가 표준으로 사용됨.

보안 강화를 위해 OpenBSD 등 일부 시스템은 `login`의 setuid 루트 권한을 제거했음.

초기 Unix의 `su`와 `login` 분리 사용

초기 Unix V7(및 이전 버전)에서는 `su`가 현재 환경과 디렉터리를 유지한 채 다른 사용자로 전환하는 데 사용되었고, 새로운 로그인 셸 환경을 원할 경우 `login` 명령어를 사용했음. 당시 `login`은 setuid 루트 권한으로 실행되어 기존 셸 세션에서 새로운 사용자 환경을 생성하는 역할을 담당했음. 이는 명령어별 역할 분담이 명확했던 당시 Unix의 특징을 보여줌.

System III 이후 `su`의 기능 확장

System III 버전부터 `su` 명령어에 로그인 셸을 시작하는 옵션이 추가되면서 변화가 시작됨. 이 변화로 인해 `su` 하나로 기존 환경 유지와 새로운 로그인 환경 생성을 모두 제어할 수 있게 되었음. 반면, `login` 명령어는 일반 셸에서 실행되는 기능을 잃게 되었고, 이는 명령어의 기능적 통합 추세를 반영함.

현대 Unix 계열의 `su` 및 `login` 동작

Linux, FreeBSD, NetBSD, OpenBSD 등 현대 Unix 계열에서는 대부분 `su`가 로그인 셸 옵션을 지원함. 특히 Linux와 OpenBSD에서는 보안상의 이유로 `login`이 setuid 루트 권한을 갖지 않아 `su`가 유일한 대안으로 남았음. FreeBSD와 NetBSD는 여전히 `login`이 setuid 루트 권한을 유지하며 사용 가능하지만, 해당 사용법은 명시적으로 문서화되지 않은 경우가 많음.

보안 강화와 `login`의 setuid 루트 제거

OpenBSD는 보안 강화 정책에 따라 `login` 명령어에서 setuid 루트 권한을 제거했음. 과거 setuid 실행 파일은 보안 취약점의 주요 공격 벡터였기 때문임. Linux 배포판의 경우, `util-linux` 패키지의 `login`은 셸 세션에서 작동하지 않지만, `shadow-utils`의 `login`이나 특정 배포판 설정에 따라 여전히 setuid 권한을 가질 가능성이 있음.

Illumos의 `login` 명령어 지원

Solaris의 오픈 소스 후속 버전인 Illumos는 여전히 명령줄 셸에서 `login`을 사용하여 다른 사용자로 전환하는 것을 지원하며, `login(1)` 매뉴얼 페이지에 이 기능이 명시적으로 문서화되어 있음. 이는 일부 현대 Unix 시스템과 달리 레거시 기능의 유지명확한 문서화를 중시하는 경향을 보여줌.

When su replaced login for becoming another Unix login