É possível ignorar o shell do usuário no comando "su"?

9

Se eu fizer

su - -c 'mkdir bin' user1

então eu recebo

su: /usr/bin/ksh: No such file or directory

porque o shell do usuário está definido como kshin /etc/passwde kshnão está instalado.

Questão

Como faço para executar comandos como usuário nesse caso?

Sandra
fonte
Por que o shell de um usuário está definido como algo que não existe?
MDMarra #
1
/etc/passwdvem do NIS.
Sandra
1
Bem, isso explica isso.
precisa saber é o seguinte

Respostas:

18

Se você não colocar o -depois su, ele não carregará o ambiente do usuário, mas os comandos ainda serão executados como esse usuário.


Parece que eu não entendi o seu problema real. Como já foi dito, -sé a opção que você provavelmente deseja.

MDMarra
fonte
Isso ainda tentará usar o shell que está no / etc / passwd, que parece ser o maior problema.
002 freiheit #
O shell coloca sua própria identidade na variável de ambiente $ SHELL, mas / etc / passwd é onde su está procurando qual shell executar. `-` é passada para a chamada de shell dizendo a ele para agir como um escudo "login" (bash executa um arquivo de perfil em vez de um arquivo bashrc, muda diretório de trabalho, etc)
Freiheit
8

Você pode usar:

su -s /bin/sh -c 'mkdir bin' user1

A -sopção su especifica o shell a ser usado, substituindo o que estiver em / etc / passwd.

Eu larguei o -comando, porque, além de carregar o perfil, ele provavelmente mudará o diretório de trabalho para o diretório inicial do usuário para o comando, então você criaria 'bin' no diretório inicial do usuário1, não no seu atual diretório.

freiheit
fonte
5

Eu acredito que a opção -s / - shell para su permite que você escolha o shell para usar enquanto mantém as outras partes do ambiente dos usuários, / bin / sh é especificado pelo posix, portanto deve estar disponível em qualquer lugar.

Roman A. Taycher
fonte