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.sh
dan kemudiansudo -u username script.sh
i
opsi 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 visudo
dan 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
username
dengan 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 commandline
baris 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 someuser
sebelum 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 sudo
panggilan 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