..png)
그래서 저는 여기서 무슨 일이 일어나고 있는지 이해하지 못합니다.
저는 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
. 그러면 루트의 PATH가 표시됩니다.service
찾을 수 있는 디렉토리가 여기에 나열되어 있습니다. exit
다시 루트가 아닌 사용자가 되려면 다음을 수행하십시오 .- 하다
echo $PATH
. 2단계에서 식별한 디렉터리가 여기에 없다는 것을 알 수 있습니다.
service
이는 , 등과 같은 특정 관리 프로그램이 또는 fdisk
같은 디렉터리에 보관되고 이러한 디렉터리는 일반 사용자의 PATH에서 제외되는 특정 환경/배포판의 일반적인 기본 설정입니다 ./usr/sbin
/sbin