Não é possível acessar alguns comandos quando conectado com usuário não root (mesmo após "su root")

Não é possível acessar alguns comandos quando conectado com usuário não root (mesmo após "su root")

Então, eu não entendo o que está acontecendo aqui.

Eu configurei um servidor Debian 10.2 e configurei como fiz antes com outros servidores. Tudo funciona bem, e por ser uma máquina local e eu ser o único usuário, usei root para tudo. Agora eu queria desabilitar o login root do ssh.

Mas se eu usar um usuário não root para fazer login via SSH, ele não conseguirá encontrar comandos básicos como "service" ou "reboot". (Bash: Serviço: Comando não encontrado.)

Ainda mais estranho, não consigo nem acessar essas coisas quando uso "su root". Na verdade, sou o usuário root, mas ainda não consigo acessar/encontrar esses comandos.

Quando logado diretamente com o usuário root, tudo funciona como deveria.

Responder1

A variável de ambiente do seu usuário PATHnão contém o caminho onde esses arquivos estão localizados. Quando você usa su -, as variáveis ​​de ambiente do root são carregadas em sua sessão. Ver 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

Para entender melhor isso, vamos ver onde está um desses binários e comparar o PATH do root com o seu:

  1. fazersu -
  2. fazer which service. Isso lhe dirá servicede onde o binário seria carregado se você executasse o comando service.
  3. fazer echo $PATH. Isso mostrará o PATH do root. Você notará que o diretório onde servicepode ser encontrado está listado aqui.
  4. faça exitpara se tornar seu usuário não root novamente.
  5. fazer echo $PATH. Você verá que o diretório identificado na etapa 2 não está aqui.

Esta é uma configuração padrão normal em certos ambientes/distros onde certos programas administrativos como service, fdisk, etc. são mantidos em um diretório como /usr/sbinou /sbin, com tais diretórios mantidos fora dos PATHs normais dos usuários.

informação relacionada