GNU/Linux >> Linux Esercitazione >  >> Linux

Eseguire uno script di shell come utente diverso

Soluzione 1:

Per eseguire il tuo script come un altro utente come un unico comando, esegui:

/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres

Breaking it down:
 /bin/su : switch user
 -c "/path/to..." : command to run
 - : option to su, make it a login session (source profile for the user)
 postgres : user to become

Raccomando di utilizzare sempre percorsi completi in script come questo:non puoi sempre garantire che sarai nella directory giusta quando su (forse qualcuno ha cambiato la homedir su di te, chissà). Uso sempre anche il percorso completo per su (/bin/su) perché sono paranoico. È possibile che qualcuno possa modificare il tuo percorso e farti utilizzare una versione compromessa di su.

Soluzione 2:

Se l'utente di destinazione da eseguire ha nologin shelll definito, allora puoi usare l'opzione -s per specificare la shell:

/bin/su -s /bin/bash -c '/path/to/your/script' testuser

Vedi la seguente domanda:esegui lo script come utente che non ha shell di accesso

Soluzione 3:

Per automatizzarlo in base a una pianificazione, puoi inserirlo nel crontab dell'utente. Tuttavia, i lavori Cron non otterranno l'ambiente completo, ma potrebbe essere meglio inserire comunque tutte le variabili env necessarie nello script stesso.

Per modificare il crontab dell'utente:

sudo crontab -u postgres -e

Soluzione 4:

Questa dovrebbe essere una lettura informativa -- setuid sugli script di shell

Se esegui su con "- username "sequenza di argomenti, creerà una shell di login per consentire all'utente di fornire lo stesso ambiente dell'utente. Solitamente, utilizzato per eseguire rapidamente lo script con il proprio ambiente home da un login diverso.

Soluzione 5:

Prova la su manpage:

su -c script_run_as_postgres.sh - postgres

In alternativa, puoi usare sudo per permetterti di eseguire solo quel comando come postgres senza password. Ci vuole un po' di configurazione nel tuo /etc/sudoers, però.


Linux
  1. Modo per fare in modo che uno script di shell venga sempre eseguito come root?

  2. Eseguire script con argomenti come utente?

  3. Da dove viene eseguito uno script di shell?

  4. Come eseguire script Python dalla shell

  5. UNIX/Linux:cos'è una shell? Cosa sono le diverse conchiglie?

Come eseguire il comando / script della shell di Linux in background

Come eseguire lo script della shell come servizio SystemD in Linux

Come creare ed eseguire uno script di shell in Ubuntu 22.04

Come eseguire un comando come utente specifico in uno script init?

Esegui parte di uno script bash come utente diverso

shell diversa per utente root e non root