bash 소스 코드를 전혀 보지 않고 나만의 쉘을 작성하려고 하는데, 할 수 없는 일이 한 가지 있습니다. 사용자 정의 쉘(내 쉘 포함)에서 "su"를 실행할 때마다 내 비밀번호를 얻고 루트 권한을 나타내는 해시가 있는 bash 프롬프트로 이동합니다. 루트 권한이 있을 때 쉘이 해시 프롬프트를 제공하는지 확인하기 위해 코드를 넣었지만 이는 루트로 실행할 때만 해당됩니다. 쉘에서 루트가 되기 위해 su를 시도할 때마다 bash를 실행하도록 강제하기 때문입니다. 내가 직접 su를 제공할 수 있는 방법이 있습니까? 루트 비밀번호를 요청하고 권한을 부여하여 bash로 이동하지 않고 사용 중이던 셸로 다시 보내는 사용자 정의 su 실행 파일도 제공할 수 있습니까? 감사합니다.
답변1
매뉴얼 페이지는 su
이 점에 대해 매우 명확합니다.
/etc/passwd
명령은 대상 사용자에 대해 지정된 쉘에 의해 실행됩니다.
그리고
-s, --shell 쉘호출될 셸입니다.
-m, -p, --preserve 환경현재 환경을 보호하세요 […]
bash
호출 후 쉘에 들어가는 이유는 su -
이것이 루트의 기본 쉘이기 때문입니다. 이 기본 셸을 재정의하는 세 가지 방법을 볼 수 있습니다.
su -s /path/to/your/shell
그냥 전화하는 대신 전화해su
export SHELL=/path/to/yourshell
설정되어 있는지 확인한 후 전화하세요.su -m
- 루트의 기본 쉘 변경
/etc/passwd
(권장하지 않음)
답변2
내가 직접 su를 제공할 수 있는 방법이 있습니까? 루트 비밀번호를 요청하고 권한을 부여하여 bash로 이동하지 않고 사용 중이던 셸로 다시 보내는 사용자 정의 su 실행 파일도 제공할 수 있습니까? 감사합니다.
아니요. Unix의 권한 상승 메커니즘에는 새로운 프로세스의 실행이 포함됩니다. 실행 su
파일에는 실행 파일이 실행될 때 프로세스의 유효 사용자 ID가 실행 파일의 소유자 ID가 되도록 하는 "set-user-ID 비트" 또는 "setuid"라는 특수 권한 비트가 있습니다.
인증이 성공 하면 su
새 쉘이 실행됩니다.
동일한 셸에서 수퍼유저 권한을 갖는 일반적인 방법은 이 sudo
유틸리티를 사용하여 권한 모드에서 개별 명령을 실행하는 것입니다.
특정 컴퓨터를 정기적으로 관리하는 경우 루트 사용자로 사용할 사용자 정의 환경을 설정할 수 있습니다. 루트가 되면 즐겨 사용하는 셸을 실행하고 해당 구성 파일을 루트의 홈 디렉터리에 설정하기만 하면 됩니다.
$ su
password:
root # exec /path/to/favorite/shell
당신이 상사라면 이 쉘을 루트의 로그인 쉘로 설정할 수 있습니다.