Permitir que user1 seja “su - user2” sem senha

41

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

su - martin-test

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 mais martin a mais privilégios do que poder alternar 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 minimum?

    
por Martin Vegter 05.02.2014 / 22:26

4 respostas

51

Adicione as seguintes linhas abaixo da linha pam_rootok.so em 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

A primeira linha garante que o usuário de destino é martin-test . Se estiver, a próxima linha assumirá o controle e será bem-sucedida se o usuário chamador for martin .

Se o usuário alvo for outra coisa, a segunda linha será ignorada e as etapas de autenticação habituais serão executadas.

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

auth            sufficient      pam_succeed_if.so use_uid user ingroup allowedpeople
    
por 13.02.2014 / 21:25
12

Se você não quiser alterar grupos ou usar sudo , use um módulo pam chamado pam_exec para executar scripts externos em um palco pam.

Adicione uma linha no seu /etc/pam.d/su após a linha pam_rootok.so :

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 existe com sucesso se su :

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

Veja:

martin@host:~$ su - martin-test
martin-test@host:~$ exit
martin@host:~$ su - otheruser
Password: ****
otheruser@host:~$ 
    
por 05.02.2014 / 23:36
0

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

  • Isso lhe perguntará a senha do toto: su - toto -c whoami
  • Isto não irá: ssh toto @ localhost whoami

Apenas instale sua chave pública em authorized_keys of toto
Espero que isso possa ajudar ...

    
por 30.03.2015 / 18:00
-1

Minha solução simples é:

sudo login -f martin-test

Se você quiser evitar o sudo a todo custo, acho que deve ser possível colocar isso em um script:

  1. de propriedade do root e com privilégios de root (usando o sinalizador setuid )
  2. executável por todos, também sem sudo.

No entanto, não consigo descobrir os chown root e chmod +s ToTest.sh bits, para que isso realmente funcione:

#!/usr/bin/env bash
echo howdy, I am $(whoami)
sudo login -f martin-test

Ainda corro como usuário normal, como o eco me diz. E ainda requer senha sudo. Se estivesse rodando como root, poderia acabar com o sudo na última linha ...

    
por 28.10.2016 / 07:29