Consenti all'utente1 di "su - utente2" senza password


51

Devo consentire all'utente martindi passare all'utente martin-testsenza password

su - martin-test

Penso che questo possa essere configurato in /etc/pam.d/su. Ci sono già alcune righe in quel file che possono essere decommentate. Tuttavia, non mi piace l'idea di aggiungere l'utente martinal gruppo wheel. Non voglio dare martinpiù privilegi di quello di poter passare a martin-test. Inoltre non voglio usare sudo.

Quale sarebbe il modo migliore per farlo, mantenendo al minimo i privilegi dell'utente martin?


2
Questo è più facile da fare con sudoes sudo -u martin-test -i. C'è un motivo per cui ti stai chiedendo in particolare su?
Giordania,

Non voglio installarlo sudosolo per questo (normalmente non lo uso sudoe non mi piace particolarmente). E penso che usare pamsia un modo più pulito e più trasparente per farlo.
Martin Vegter,

3
@MartinVegter Come puoi vedere dalla risposta dello script, farlo attraverso una sorta di meccanismo pam è molto brutto. In realtà questo è esattamente ciò per cui sudoera destinato. Oltre a non usarlo normalmente, quali sono le obiezioni?
Patrick,

1
Se fosse possibile una soluzione pulita con pam, preferirei che sudo. Se sudoè l'unica possibilità, va bene anche quello. Le mie obiezioni sudosono principalmente ideologiche: non mi piace l'idea che l'utente faccia l'amministrazione sudo foo. Quando ho bisogno di fare amministrazione, accedo come root. Altrimenti accedo come utente, questi due ruoli distinti non devono essere mescolati. Inoltre, ho già paminstallato l'infrastruttura. Non voglio installare un altro setuidprogramma che possa eventualmente introdurre bug di sicurezza.
Martin Vegter,

5
@MartinVegter Non è necessario eseguire sudo foocomandi specifici. Sudo ha sudo -sche lancerà una shell. sudo è un'utilità molto comune, il che significa che la sua sicurezza è stata accuratamente vagliata, molto più di quanto lo saranno in qualche inganno. Direi anche che ottenere una shell di root per le attività è molto più insicuro rispetto all'avvio di comandi specifici. Quando avvii una shell, esegui tutto come root. Se una di queste cose (come una semplice ls) ha una vulnerabilità di sicurezza, allora hai appena aperto una falla di sicurezza.
Patrick,

Risposte:


61

Aggiungi le seguenti righe proprio sotto la pam_rootok.soriga nel tuo /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

Queste linee eseguono controlli usando il pam_succeed_if.somodulo. Vedi anche la sintassi del file di configurazione di Linux-PAM per saperne di più sulle authlinee.

  • La prima riga controlla se l' utente di destinazione è martin-test. In tal caso, non accade nulla ( success=ignore) e continuiamo sulla riga successiva per verificare l' utente corrente . In caso contrario, la riga successiva verrà ignorata ( default=1) e continueremo sulle righe successive con i soliti passaggi di autenticazione.
  • La seconda riga controlla se l'utente corrente è martin. In tal caso, il sistema considera il processo di autenticazione come riuscito e restituisce ( sufficient). In caso contrario, non accade nulla e continuiamo sulle righe successive con i soliti passaggi di autenticazione.

Puoi anche limitarti sua un gruppo, qui il gruppo allowedpeoplepuò susenza una password:

auth sufficient pam_succeed_if.so use_uid user ingroup allowedpeople

1
Se si desidera autorizzare se appartengono a un determinato gruppo: auth sufficiente pam_succeed_if.so user ingroup GROUP
shrimpwagon

@gnp Super Grazie !! Lavorando su iCinga con nrpe, devi eseguire alcuni comandi come utente diverso !! Aiutato molto !!!!!! Grazie!!!!!
saravanakumar,

@GnP Per favore aiutatemi su askubuntu.com/questions/821793/…
Nullpointer

Sarebbe bello aggiungere informazioni su come applicare anche le modifiche.
Kyslik,

@Kyslik cosa intendi? Le istruzioni su come modificare i file necessari sono nella risposta ...
GnP

12

Se non si desidera cambiare gruppo o utilizzare sudo, utilizzare un modulo pam chiamato pam_execper eseguire script esterni in una fase pam.

Aggiungi una riga nel tuo /etc/pam.d/sudopo la pam_rootok.soriga:

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

/path/to/script dispone delle autorizzazioni 755 (rwxr-xr-x) e il seguente contenuto:

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

Quindi questo script esiste con successo se su:

  • viene chiamato nel contesto dell'autenticazione,
  • l'utente chiamante è martine
  • l'utente per l'autenticazione è martin-test.

Vedere:

martin@host:~$ su - martin-test
martin-test@host:~$ exit
martin@host:~$ su - otheruser
Password: ****
otheruser@host:~$ 

1
pam_access può essere utilizzato per fornire funzionalità simili, senza fare affidamento su uno script. (questo è ciò che è stato fatto per fare
pam_access

1
@jsbillings Faresti che (con alcuni dettagli) un'altra risposta?
Hauke ​​Laging,

1
come dovrei modificare il mio /etc/pam.d/super sfruttare la pam_accessmia situazione?
Martin Vegter,

3
@jsbillings In realtà pam_accessnon è possibile farlo. Quando supassa attraverso lo stack pam, lo fa come l'utente a cui stai cambiando, non l'utente da cui stai cambiando. Quindi, se si aggiunge una norma come + : martin : ALL, permetterà a chiunque cambiando a martin . Anche se cambi martinin martin-test, consentirà comunque a chiunque di farlo. Devi analizzare sia l'utente da cui vieni, sia l'utente a cui stai passando. Davvero, questo è esattamente ciò che sudoè per ...
Patrick,

0

Se non si ha accesso all'account di root, ma si dispone della password dell'utente che si desidera utilizzare per eseguire un comando, è possibile effettuare le seguenti operazioni.

  • Questo ti chiederà la password del toto: su - toto -c whoami
  • Questo non: ssh toto @ localhost whoami

Installa semplicemente la tua chiave pubblica in authorized_keys di toto


Risposta premurosa .. Tuttavia, il comando che qualcuno vuole provare a eseguire è già sulla macchina. Quindi non ha senso ssh'ing sullo stesso server.
Raja Anbazhagan,

-1

La mia soluzione semplice è:

sudo login -f martin-test

Se vuoi evitare sudo a tutti i costi, penso che dovrebbe essere possibile metterlo in uno script:

  1. di proprietà di root e con privilegi di root (usando il flag setuid )
  2. eseguibile da tutti, anche senza alcun sudo.

Tuttavia, non riesco a capire i bit chown roote chmod +s ToTest.sh, per farlo funzionare davvero:

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

Corro ancora come il mio normale utente, come mi dice l'eco. E richiede ancora la password sudo. Se fosse in esecuzione come root, si potrebbe eliminare sudoil nell'ultima riga ...


Il flag setuid su uno script shell (o qualsiasi altro script) non funzionerà in Linux e per buoni motivi. Si noti che lo script sopra con un flag di suid funzionante sarebbe immediatamente una trappola: si impegna bash tramite "env" (abbastanza autolesionistico, perché se presumi di non sapere dove si bashtrova, perché presumi di sapere dove si envtrova o se esiste?). Ma alla fine, non sai cosa bashsarà esattamente. Potrebbe provenire dalla directory dell'utente che ha invocato ed è stato compilato un minuto prima dal suo codice sorgente. Vedi dove sto andando? Oppure l'utente potrebbe sovrascrivere whoami...
David Tonhofer il

Il mio cervello è attualmente troppo lontano da questi problemi per comprendere appieno, ma ancora grazie per le spiegazioni dettagliate.
Frank Nocke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.