루트가 아닌 사용자로 로그인하면 일부 명령에 액세스할 수 없습니다("su 루트" 이후에도).

루트가 아닌 사용자로 로그인하면 일부 명령에 액세스할 수 없습니다("su 루트" 이후에도).

그래서 저는 여기서 무슨 일이 일어나고 있는지 이해하지 못합니다.

저는 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와 비교해 보겠습니다.

  1. 하다su -
  2. 하다 which service. 이는 service명령을 실행하는 경우 바이너리가 로드되는 위치를 알려줍니다 service.
  3. 하다 echo $PATH. 그러면 루트의 PATH가 표시됩니다. service찾을 수 있는 디렉토리가 여기에 나열되어 있습니다.
  4. exit다시 루트가 아닌 사용자가 되려면 다음을 수행하십시오 .
  5. 하다 echo $PATH. 2단계에서 식별한 디렉터리가 여기에 없다는 것을 알 수 있습니다.

service이는 , 등과 같은 특정 관리 프로그램이 또는 fdisk같은 디렉터리에 보관되고 이러한 디렉터리는 일반 사용자의 PATH에서 제외되는 특정 환경/배포판의 일반적인 기본 설정입니다 ./usr/sbin/sbin

관련 정보