È possibile ignorare la shell degli utenti nel comando "su"?


9

Se lo faccio

su - -c 'mkdir bin' user1

poi capisco

su: /usr/bin/ksh: No such file or directory

perché la shell degli utenti è impostata su kshin /etc/passwde kshnon è installata.

Domanda

Come eseguo i comandi come utente in questo caso?


Perché la shell di un utente è impostata su qualcosa che non esiste?
MDMarra,

1
/etc/passwdviene da NIS.
Sandra,

1
Bene, questo lo spiega.
MDMarra,

Risposte:


18

Se non si inserisce il -dopo su, non caricherà l'ambiente dell'utente, ma i comandi verranno comunque eseguiti come quell'utente.


Sembra che ho frainteso il tuo vero problema. Come altri hanno già detto -sè l'opzione che probabilmente si desidera effettivamente.


Questo tenterà comunque di usare la shell che si trova in / etc / passwd, che sembra essere il problema più grande.
Freiheit

La shell inserisce la propria identità nella variabile d'ambiente $ SHELL, ma / etc / passwd è dove su sta cercando quale shell eseguire. `-` viene passato all'invocazione della shell che gli dice di agire come una shell "login" (bash esegue un file di profilo anziché un file bashrc, cambia directory di lavoro, ecc.)
freiheit

8

Puoi usare:

su -s /bin/sh -c 'mkdir bin' user1

L' -sopzione su su specifica la shell da usare, sovrascrivendo qualunque cosa sia in / etc / passwd.

Ho eliminato il -comando dal tuo comando perché, oltre a caricare il profilo, probabilmente cambierà la directory di lavoro nella directory home dell'utente per il comando, quindi dovresti creare 'bin' nella home directory dell'utente1, non nel tuo attuale directory.


5

Credo che l'opzione -s / - shell su su ti permetta di scegliere la shell da usare mantenendo le altre parti dell'ambiente degli utenti, / bin / sh è specificato da posix quindi dovrebbe essere disponibile ovunque.

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.