Qual è la differenza tra il login come utente e il cambio di utenti usando su through root?


17

Quando si dispone di un server di qualche tipo, è possibile accedervi tramite, ad esempio, ssh user1@ipe si può anche fare ssh root@ipper andare al proprio utente root con su privilegi e poi andare a su user1. Nel mio modo di pensare in entrambi i modi, mi dovrebbe condurre allo stesso ambiente utente (in questo caso, "user1"), ma nella mia esperienza reale non lo fa, perché in ssh user1@ipci sono cose installate che su user1non ci sono.

Perché?

Risposte:


15

SSH avvia una shell di accesso. su, per impostazione predefinita no.

In particolare, ciò significa che il ~/.profile(o file simile) per quell'utente non è di provenienza. Quindi le modifiche apportate ~/.profilenon avranno effetto. Potrebbe anche accadere che:

  • anche se si avvia una shell di accesso, sono state apportate diverse modifiche a root ~/.profile, che potrebbero inquinare l'ambiente dell'utente.
    • /etc/profilee /etc/profile.d/*può applicare le impostazioni in modo diverso per utenti diversi (non per impostazione predefinita, tuttavia)
  • potrebbero esserci impostazioni diverse per utenti diversi nella configurazione SSH.
  • La configurazione di PAM è diversa. Ad esempio, /etc/pam.d/sshha:

    session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale
    

    mentre /etc/pam.d/suha:

    session       required   pam_env.so readenv=1 envfile=/etc/default/locale
    

    Ciò significa che SSH si carica ~/.pam_environment, ma sunon lo è. Questo è grande, poiché ~/.pam_environmentè il posto indipendente dalla shell per le variabili di ambiente e viene applicato se si accede dalla GUI, dal TTY o SSH.

Per avviare una shell di accesso, eseguire uno dei seguenti:

su - <username>
sudo -iu <username>

Esempio:

# su muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
# su - muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /home/muru/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# sudo -iu muru sh -c 'echo $HOME $PATH'
/home/muru /home/muru/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# sudo -u muru sh -c 'echo $HOME $PATH'
/root /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ssh muru@localhost 'echo $HOME $PATH'
/home/muru /home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Anche con SSH, se si esegue un comando invece di avviare una shell, non verrà eseguita una shell di accesso (notare l'assenza di ~/binnel test SSH, che è presente in su -e sudo -i). Per ottenere il vero risultato, eseguirò la mia shell come shell di accesso:

# ssh muru@localhost '$SHELL -ilc "echo \$HOME \$PATH"'
/home/muru /home/muru/bin:/home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Questo è anche il motivo sudo sue sudo -ssono modi pessimi per ottenere una shell di root. Entrambi questi modi sono inquinati dall'ambiente.


Relazionato:


2
Sembra che dovrei essere sveglio prima di rispondere alle domande :) la tua risposta è meravigliosa e la mia non ha individuato la risposta corretta. Ben fatto +1
Videonauth,

-1

Nel complesso è principalmente una differenza strategica.

Se hai effettuato l'accesso come superutente, puoi modificare qualsiasi cosa in qualsiasi momento ... vale a dire - non c'è protezione contro errori catastrofici, dovresti passare temporaneamente a qualche altro utente per sicurezza.

Considerando che: se hai effettuato l'accesso con privilegi limitati, eviti il ​​rischio di errori catastrofici, perché devi intenzionalmente passare a su root per accedere temporaneamente a quel potere, ma ora hai la posizione di fallback predefinita per un utente sicuro .

La differenza è quindi davvero strategica, non tecnica.


La domanda non era esattamente la differenza tra l'utente root e gli altri utenti. Era la differenza tra accedere a un utente del server direttamente tramite ssh e accedervi tramite su già all'interno dell'utente root. Ad ogni modo, sono d'accordo con quello che hai detto anche ahah grazie
Miguel Corti,

Ah ok, scusa ... In realtà mi stavo chiedendo perché tutti stessero entrando nei dettagli tecnici, immagino di aver letto male la tua intenzione.
Mr.President,
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.