Solusi 1:
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 merekomendasikan untuk selalu menggunakan jalur lengkap dalam skrip seperti ini - Anda tidak dapat selalu menjamin bahwa Anda akan berada di direktori yang benar saat su (mungkin seseorang mengubah homedir pada Anda, siapa tahu). Saya juga selalu menggunakan path lengkap ke su (/bin/su) karena saya paranoid. Ada kemungkinan seseorang dapat mengedit jalur Anda dan menyebabkan Anda menggunakan versi su yang telah disusupi.
Solusi 2:
Jika pengguna target yang dijalankan memiliki nologin shelll yang ditentukan, 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 tidak memiliki shell nologin
Solusi 3:
Untuk mengotomatiskan ini sesuai jadwal, Anda dapat meletakkannya 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
Solusi 4:
Ini harus menjadi bacaan yang informatif -- setuid pada skrip shell
Jika Anda menjalankan su dengan "- username
" urutan argumen, itu akan membuat shell login bagi pengguna untuk memberikan lingkungan yang sama dengan pengguna. Biasanya, digunakan untuk mengeksekusi skrip Anda dengan cepat dengan lingkungan rumah Anda dari login yang berbeda.
Solusi 5:
Coba halaman su manual:
su -c script_run_as_postgres.sh - postgres
Sebagai alternatif, Anda dapat menggunakan sudo untuk memungkinkan Anda menjalankan perintah itu saja sebagai postgres tanpa kata sandi. Namun, dibutuhkan beberapa pengaturan di /etc/sudoers Anda.