desenv-web-rp.com

Permitir que o usuário1 "su - usuário2" sem senha

Eu preciso permitir que o usuário martin mude para o usuário martin-test sem senha

su - martin-test

Eu acho que isso pode ser configurado em /etc/pam.d/su. Já existem algumas linhas nesse arquivo que podem ser descomentadas. No entanto, não gosto da ideia de adicionar o usuário martin ao grupo wheel. Não quero conceder martin mais privilégios do que poder mudar para martin-test. Eu também não quero usar Sudo.

Qual seria a melhor maneira de fazer isso, mantendo os privilégios do usuário martin mínimos?

55
Martin Vegter

Adicione as seguintes linhas abaixo do pam_rootok.so linha no seu /etc/pam.d/su:

auth  [success=ignore default=1] pam_succeed_if.so user = martin-test
auth  sufficient                 pam_succeed_if.so use_uid user = martin

Essas linhas executam verificações usando o pam_succeed_if.so módulo. Consulte também sintaxe do arquivo de configuração do Linux-PAM para saber mais sobre as linhas auth.

  • A primeira linha verifica se o usuário de destino é martin-test. Se não acontecer nada (success=ignore) e podemos continuar na próxima linha para verificar o usuário atual . Caso contrário, a próxima linha será ignorada (default=1) e podemos continuar nas linhas subseqüentes com as etapas usuais de autenticação.
  • A segunda linha verifica se o usuário atual é martin ou não, se for o sistema considera o processo de autenticação como bem-sucedido e retorna (sufficient), se não for, nada acontece e nós continue nas linhas subseqüentes com as etapas de autenticação usuais.

Você também pode restringir su a um grupo, aqui o grupo allowedpeople pode su sem uma senha:

auth sufficient pam_succeed_if.so use_uid user ingroup allowedpeople
66
GnP

Se você não deseja alterar grupos ou usar Sudo, use um módulo pam chamado pam_exec para executar scripts externos em um estágio pam.

Adicione uma linha no seu /etc/pam.d/su depois de pam_rootok.so linha:

auth       sufficient pam_exec.so quiet /path/to/script

/path/to/script tem as permissões 755 (rwxr-xr-x) e o seguinte conteúdo:

#!/bin/bash
if [ "$PAM_TYPE" == "auth" ] && \
[ "$PAM_USER" == "martin-test" ] && \
[ "$PAM_RUSER" == "martin" ]; then
  exit 0
else
  exit 1
fi

Portanto, este script termina com sucesso se su:

  • é chamado no contexto de autenticação,
  • o usuário que chama é martin e
  • o usuário para autenticar é martin-test.

Vejo:

[email protected]:~$ su - martin-test
[email protected]:~$ exit
[email protected]:~$ su - otheruser
Password: ****
[email protected]:~$ 
13
chaos

Essa pode ser a melhor maneira possível.

su não pretende fazer isso - Sudo is.

Abrir/etc/sudoers.d/custom E escreva o seguinte:

user-a ALL=(user-b:user-b) NOPASSWD:ALL

Isso significa: sempre que o usuário-a executar Sudo -u user-b, Deixe-o ir sem pedir a senha.

Outra maneira

youruserid ALL = (username) NOPASSWD: ALL

com visudo e, em seguida, Sudo -u username bash é como su - username

2
champion-runner

Se você não tiver acesso à conta raiz, mas tiver a senha do usuário que deseja usar para executar um comando, faça o seguinte.

  • Isso solicitará a senha do toto: su - toto -c whoami
  • Isso não será: ssh toto @ localhost whoami

Apenas instale sua chave pública em allowed_keys do toto

0
Patrick