su - execute um comando com um usuário e ID de grupo substitutos
SINTAXE
su [opções] [-] [usuário [argumento...]]
DESCRIÇÃO
su permite que comandos sejam executados com um usuário e ID de grupo substitutos.
Quando chamado sem um usuário especificado, su assume como padrão a execução de um shell interativo como root. Quando o usuário é especificado, argumentos adicionais podem ser fornecidos, nesse caso, eles são passados para o shell.
Para compatibilidade com versões anteriores, su assume como padrão não alterar o diretório atual e definir apenas as variáveis de ambiente HOME e SHELL (mais USER e LOGNAME se o usuário de destino não for root). É recomendado sempre usar a opção --login (em vez de seu atalho -) para evitar efeitos colaterais causados pela mistura de ambientes.
Esta versão do su usa o PAM para autenticação, gerenciamento de conta e sessão. Alguns opções de configuração encontradas em outras implementações do su, como suporte para um grupo wheel, devem ser configuradas via PAM.
su é projetado principalmente para usuários não privilegiados, a solução recomendada para usuários privilegiados
(por exemplo, scripts executados por root) é usar o comando não-set-user-ID runuser(1) que não
requer autenticação e fornece configuração PAM separada. Se a sessão PAM não for
necessária, então a solução recomendada é usar o comando setpriv(1).
Observe que su, em todos os casos, usa o PAM (pam_getenvlist(3)) para realizar a modificação final do ambiente. As opções de linha de comando, como --login e --preserve-environment, afetam o ambiente antes que ele seja modificado pelo PAM.
Desde a versão 2.38, su redefine os limites de recursos do processo RLIMIT_NICE, RLIMIT_RTPRIO, RLIMIT_FSIZE,
RLIMIT_AS e RLIMIT_NOFILE.
OPÇÕES
-c, --command comando
Passe o comando para o shell com a opção -c.
-f, --fast
Passe -f para o shell, o que pode ou não ser útil, dependendo do shell.
-g, --group grupo
Especifique o grupo primário. Esta opção está disponível apenas para o usuário root.
-G, --supp-group grupo
Especifique um grupo suplementar. Esta opção está disponível apenas para o usuário root. O primeiro grupo suplementar especificado também é usado como grupo primário se a opção --group não for especificada.
-, -l, --login
Inicie o shell como um shell de login com um ambiente semelhante a um login real.
Observe que em sistemas baseados em systemd, uma nova sessão pode ser definida como um ponto de entrada real para o sistema. No entanto, su não cria uma sessão real (por PAM) sob este ponto de vista. Você precisa usar ferramentas como systemd-run ou machinectl para iniciar uma sessão completa e real.
su faz:
limpa todas as variáveis de ambiente, exceto TERM e as variáveis especificadas por
--whitelist-environment
inicializa as variáveis de ambiente HOME, SHELL, USER, LOGNAME e PATH
altera para o diretório inicial do usuário de destino
define argv[0] do shell como '-' para tornar o shell um shell de login
-m, -p, --preserve-environment
Preserve todo o ambiente, ou seja, não defina HOME, SHELL, USER ou LOGNAME. Esta opção é ignorada se a opção --login for especificada.
-P, --pty
Crie um pseudo-terminal para a sessão. O terminal independente fornece melhor segurança pois o usuário não compartilha um terminal com a sessão original. Isso pode ser usado para evitar injeção de terminal ioctl TIOCSTI e outros ataques de segurança contra descritores de arquivo de terminal. Toda a sessão também pode ser movida para o plano de fundo (por exemplo, su --pty - usuário -c aplicação &). Se o pseudo-terminal estiver habilitado, então su funciona como um proxy entre as sessões (sincroniza stdin e stdout).
Este recurso é projetado principalmente para sessões interativas. Se a entrada padrão não for um terminal, mas por exemplo um pipe (por exemplo, echo "date" | su --pty), então a flag ECHO para o pseudo-terminal é desabilitada para evitar saída confusa.
-s, --shell shell
Execute o shell especificado em vez do padrão. Se o usuário de destino tiver um shell restrito (ou seja, não listado em /etc/shells), a opção --shell e as variáveis de ambiente SHELL são ignoradas, a menos que o usuário que chama seja root.
O shell a ser executado é selecionado de acordo com as seguintes regras, em ordem:
o shell especificado com --shell
o shell especificado na variável de ambiente SHELL, se a opção --preserve-environment
for usada
o shell listado na entrada passwd do usuário de destino
/bin/sh
--session-command=comando
O mesmo que -c, mas não crie uma nova sessão. (Não recomendado.)
-T, --no-pty
Não crie um pseudo-terminal, o oposto de --pty e -P. Observe que a execução sem um pseudo-terminal abre o risco de segurança de elevação de privilégios por meio da injeção de comando ioctl TIOCSTI/TIOCLINUX.
-w, --whitelist-environment lista
Não redefina as variáveis de ambiente especificadas na lista separada por vírgulas ao limpar o ambiente para --login. A lista de permissões é ignorada para as variáveis de ambiente HOME, SHELL, USER, LOGNAME e PATH.
-h, --help
Exibe o texto de ajuda e sai.
-V, --version
Exibe a versão e sai.
SINAIS
Ao receber SIGINT, SIGQUIT ou SIGTERM, o su termina seu processo filho e, em seguida, termina a si mesmo com o sinal recebido. O processo filho é terminado com SIGTERM; após uma tentativa malsucedida e um atraso de 2 segundos, o processo filho é encerrado com SIGKILL.
ARQUIVOS DE CONFIGURAÇÃO
O su lê os arquivos de configuração /etc/default/su e /etc/login.defs. Os seguintes itens de configuração são relevantes para o su:
FAIL_DELAY (número)
Atraso em segundos em caso de falha na autenticação. O número deve ser um inteiro não negativo.
ENV_PATH (string)
Define a variável de ambiente PATH para um usuário normal. O valor padrão é /usr/local/bin:/bin:/usr/bin.
ENV_ROOTPATH (string), ENV_SUPATH (string)
Define a variável de ambiente PATH para o usuário root. ENV_SUPATH tem precedência. O valor padrão é /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin.
ALWAYS_SET_PATH (booleano)
Se definido como "sim" e as opções --login e --preserve-environment não forem especificadas, o su inicializa o PATH.
A variável de ambiente PATH pode ser diferente em sistemas onde /bin e /sbin são mesclados em /usr; esta variável também é afetada pela opção de linha de comando --login e pela configuração do sistema PAM (por exemplo, pam_env(8)).
STATUS DE SAÍDA
O comando `su` normalmente retorna o status de saída do comando que executou. Se o comando for interrompido por um sinal, `su` retorna o número do sinal mais 128.
Status de saída gerado pelo próprio su:
1 Erro genérico antes de executar o comando solicitado.
126 O comando solicitado não pôde ser executado.
127 O comando solicitado não foi encontrado.
ARQUIVOS
/etc/pam.d/su
Arquivo de configuração PAM padrão.
/etc/pam.d/su-l
Arquivo de configuração PAM se a opção `--login` for especificada.
/etc/default/su
Arquivo de configuração específico do comando `logindef`.
/etc/login.defs
Arquivo de configuração `logindef` global.
NOTAS
Por motivos de segurança, su sempre registra tentativas de login com falha no arquivo btmp, mas não grava no arquivo lastlog. Essa solução pode ser usada para controlar o comportamento de su por meio da configuração PAM. Se você deseja usar o módulo pam_lastlog(8) para imprimir uma mensagem de aviso sobre tentativas de login com falha, pam_lastlog(8) deve ser configurado para atualizar o arquivo lastlog também. Por exemplo, por:
session required pam_lastlog.so nowtmp
HISTÓRICO
Este comando su foi derivado do su do coreutils, que foi baseado em uma implementação de David MacKenzie. A versão util-linux foi refatorada por Karel Zak.
VER TAMBÉM
setpriv(1), login.defs(5), shells(5), pam(8), runuser(1)
RELATANDO BUGS
Para relatar bugs, use o rastreador de problemas [https://github.com/util-linux/util-linux/issues].
DISPONIBILIDADE
O comando su faz parte do pacote util-linux, que pode ser baixado do Linux Kernel Archive [https://www.kernel.org/pub/linux/utils/util-linux/].