Usando su com comandos

4

Ubuntu Server 12.04

Em um servidor remoto em que eu ssh, eu configurei um usuário especial com:

sudo adduser --system --disabled-login --disabled-password --group suser

para executar algumas funções de manutenção. Às vezes, eu faço uma sessão de login para suser com:

sudo su -l suser -s /bin/bash

para fazer algumas tarefas ... no entanto eu particularmente quero poder executar alguns comandos git via:

sudo su suser -c <COMMAND>

do meu usuário real e nenhum login para o suser.

Infelizmente, não consegui determinar COMO eu falo sobre isso. Eu tentei as únicas maneiras que faz sentido para mim:

sudo su suser -c git clone https://example.com/repos/project.git
sudo su suser -c "git clone https://example.com/repos/project.git"
   or even
sudo su suser -c mkdir /home/suser/test
sudo su suser -c "mkdir /home/suser/test"

mas nada acontece e volto a avisar. Alguém pode ajudar ou explicar por que isso não é possível?

    
por JDex 19.06.2013 / 13:36

1 resposta

5

O problema é que suser foi criado com /bin/false como seu shell padrão. Portanto, quando você tenta executar comandos como suser a sudo , o sistema tenta executá-los usando /bin/false/ , que não é um shell real e falha. Você pode definir um shell para suser ou pode especificá-lo na linha de comando quando executar sudo . Como alternativa, você pode usar a opção sudo de -u .

  1. Use -u :

    sudo -u suser mkdir /home/suser/foo
    

    Isso funciona porque, por padrão, sudo usa /bin/bash (ou o que você definiu como padrão $SHELL ). Portanto, ele executará um comando como suser , mas usando bash , para que o comando seja executado corretamente.

  2. Defina o shell padrão de suser :

    sudo chsh suser 
    

    Digite /bin/bash (ou o que você preferir) no prompt que será exibido. Agora você deve poder iniciar comandos como suser :

    sudo su suser -c "mkdir /home/suser/test"
    
  3. Defina o shell explicitamente:

    sudo su suser -s /bin/bash -c "mkdir /home/suser/test"
    
por 19.06.2013 / 14:10

Tags