Apakah ada cara untuk membuat bagian skrip berjalan sebagai pengguna (non-root) yang berbeda? Jika ini membantu, bagian yang akan dijalankan sebagai pengguna yang berbeda terjadi di akhir skrip
Edit:
OS -> Ubuntu 9.04
Apakah ada cara untuk membuat bagian skrip berjalan sebagai pengguna (non-root) yang berbeda? Jika ini membantu, bagian yang akan dijalankan sebagai pengguna yang berbeda terjadi di akhir skrip
Edit:
OS -> Ubuntu 9.04
Jawaban:
Gunakan perintah sudo dalam skrip.
Dalam bentuk:
sudo -u username command
perintah sudo menjalankan perintah sebagai nama pengguna pengguna .
Jika skrip dijalankan sebagai root, saya tidak berpikir itu akan meminta kata sandi. Jika tidak, artikel ini membahas cara menggunakan sudo dengan kata sandi dalam satu baris perintah? , dan artikel ini membahas cara menggunakan sudo tanpa kata sandi?
chmod +x script.shdan kemudiansudo -u username script.sh
iopsi jika Anda ingin mendapatkan lingkungan pengguna
Jawaban ini bagus, tetapi saran serverfault sedikit berbahaya - akan memungkinkan siapa saja untuk menjalankan apa pun sebagai root! Jadi saya memposting di sini karena saya tidak dapat memformat komentar.
Saya akan merekomendasikan menggunakan visudo untuk memberikan izin yang Anda butuhkan setepat mungkin. Ketik visudodan tambahkan baris seperti:
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
Jika Anda perlu menjalankan hal yang sama di banyak host, Anda dapat membukanya dengan:
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
Tapi saya ** tidak * akan menggunakan:
username ALL=(ALL) NOPASSWD: ALL
atau nama pengguna hostname = SEMUA
The man page sudoer memiliki banyak rincian berdarah
usernamedengan nama pengguna yang seharusnya dapat menjalankan perintah). Jika executable yang ingin Anda jalankan hanya dapat dieksekusi oleh satu pengguna tertentu, itu juga tidak masalah - cukup berikan nama pengguna di sudo -u username commandlinebaris skrip.
# I = suka:
#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
# ./run
1: root
2: nobody
3: root
tidak begitu yakin tentang hal itu, tetapi jika Anda menginginkan HANYA akhir skrip itu akan berjalan sebagai pengguna yang berbeda, Anda dapat menambahkan su someusersebelum akhir skrip.
Apakah saya melewatkan sesuatu?
Semoga itu bisa membantu,
Salam
Dengan cara ini, akhir skrip akan dieksekusi oleh pengguna yang berbeda (root). Harap perhatikan $[LINENO+2]dan exit $?panggilan. Ini diperlukan untuk membuat akhir skrip untuk mengeksekusi hanya sekali dan untuk menjaga kode sudopanggilan keluar.
#!/bin/bash
echo $USER
# pipe the rest of this script via a sudo call
tail -n +$[LINENO+2] $0 | exec sudo bash
exit $?
echo $USER
exit 1