pengembangan-web-mp.com

Jalankan skrip Shell sebagai pengguna yang berbeda

Apa cara yang baik untuk menjalankan skrip Shell sebagai pengguna yang berbeda. Saya menggunakan etsa Debian, dan saya tahu pengguna mana yang ingin saya tiru.

Jika saya melakukannya secara manual, saya akan melakukan:

su postgres
./backup_db.sh /tmp/test
exit

Karena saya ingin mengotomatiskan proses, saya perlu cara untuk menjalankan backup_db.sh sebagai postgres (mewarisi lingkungan, dll)

Terima kasih!

44
Wadih M.

Untuk menjalankan skrip Anda sebagai pengguna lain sebagai satu perintah, jalankan:

/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

Saya sarankan selalu menggunakan path lengkap dalam skrip seperti ini - Anda tidak selalu dapat menjamin bahwa Anda akan berada di direktori yang benar ketika Anda su (mungkin seseorang mengubah homedir pada Anda, siapa tahu). Saya juga selalu menggunakan path lengkap ke su (/ bin/su) karena saya paranoid. Mungkin saja seseorang dapat mengedit jalur Anda dan menyebabkan Anda menggunakan versi su yang dikompromikan.

69
baumgart

Jika target pengguna untuk menjalankan telah nologin shelll didefinisikan, maka Anda dapat menggunakan opsi -s untuk menentukan Shell:

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

Lihat pertanyaan berikut: jalankan skrip sebagai pengguna yang memiliki Shell nologin

23
Basil A

Untuk mengotomatiskan ini pada jadwal Anda bisa memasukkannya di crontab pengguna. Pekerjaan Cron tidak akan mendapatkan lingkungan penuh, tetapi mungkin lebih baik untuk meletakkan semua variabel env yang Anda butuhkan dalam skrip itu sendiri.

Untuk mengedit crontab pengguna:

Sudo crontab -u postgres -e
9
Kyle Brandt

Ini harus merupakan set informatif yang dibaca - pada skrip Shell

Jika Anda menjalankan su dengan tanda "- username "urutan argumen, itu akan membuat Shell login untuk pengguna untuk memberikan lingkungan yang sama dengan pengguna. Biasanya, digunakan untuk dengan cepat mengeksekusi skrip Anda dengan lingkungan rumah Anda dari login yang berbeda.

3
nik

Coba halaman su su:

su -c script_run_as_postgres.sh - postgres

Alernately, Anda bisa menggunakan Sudo untuk memungkinkan Anda menjalankan hanya comman itu sebagai postgres tanpa kata sandi. Butuh beberapa pengaturan di/etc/sudoers Anda.

2
pjz

Metode "su -c ..." diposting oleh orang lain adalah metode yang bagus. Untuk otomatisasi, Anda dapat menambahkan skrip ke crontab pengguna yang Anda perlukan untuk mengeksekusi.

2
Geoff Fritz

Jika pengguna sudah memiliki entri ke Sudo dan Anda tidak tahu kata sandi superuser maka Anda dapat mencoba yang berikut: Yang ini me-restart postgres yang diinisialisasi di /data/my-db/pgsql/9.6/data

Sudo su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /data/my-db/pgsql/9.6/data -l /var/log/pgsql.log restart"
1
smishra

Anda juga bisa menggunakan:

Sudo -u postgres script_run_as_postgres.sh

0
Xandersoft