그래서 저는 여기서 무슨 일이 일어나고 있는지 이해하지 못합니다.
저는 Debian 10.2 서버를 설정하고 다른 서버에서 했던 것처럼 구성했습니다. 로컬 컴퓨터이고 나만 유일한 사용자이기 때문에 모든 것이 잘 작동하므로 모든 작업에 루트를 사용합니다. 이제 SSH 루트 로그인을 비활성화하고 싶습니다.
그러나 루트가 아닌 사용자를 사용하여 SSH를 통해 로그인하면 "service" 또는 "reboot"와 같은 기본 명령을 찾을 수 없습니다. (Bash: 서비스: 명령을 찾을 수 없습니다.)
더 이상한 점은 "su root"를 사용할 때 이 항목에 액세스할 수도 없다는 것입니다. 나는 실제로 루트이지만 여전히 이러한 명령에 액세스/찾을 수 없습니다.
루트로 직접 로그인하면 모든 것이 잘 작동합니다.
답변1
사용자의 PATH
환경 변수에는 이러한 파일이 있는 경로가 포함되어 있지 않습니다. 를 사용하면 su -
루트의 환경 변수가 세션에 로드됩니다. 바라보다 man su
:
-, -l, --login
Start the shell as a login shell with an environment similar
to a real login:
o clears all the environment variables except TERM and
variables specified by --whitelist-environment
o initializes the environment variables HOME, SHELL,
USER, LOGNAME, and PATH
o changes to the target user's home directory
o sets argv[0] of the shell to '-' in order to make
the shell a login shell
이를 더 잘 이해하기 위해 이러한 바이너리 중 하나가 어디에 있는지 확인하고 루트의 PATH를 사용자의 PATH와 비교해 보겠습니다.
- 하다
su -
- 마.
which service
명령을 실행하면service
바이너리가service
. - 마.
echo $PATH
그러면 루트 경로가 표시됩니다.service
찾을 수 있는 디렉토리가 여기에 나열되어 있음 을 알 수 있습니다 . - 다시
exit
루트가 아닌 사용자가 되십시오. - 마.
echo $PATH
2단계에서 식별한 디렉터리가 여기에 없다는 것을 알 수 있습니다.
service
이는 특정 하이퍼바이저(예 : 등) 가 또는 같은 디렉터리 fdisk
에 유지되고 해당 디렉터리가 일반 사용자 경로에서 멀리 떨어져 있는 일부 환경/배포판에서는 일반적인 기본값입니다 ./usr/sbin
/sbin