Jalankan bagian dari skrip bash sebagai pengguna yang berbeda
33
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
Ini bagus dan mudah, tetapi adakah cara untuk melakukan ini untuk sekelompok perintah alih-alih satu per satu?
Andrew
menulis skrip bash, membuatnya dapat dieksekusi chmod +x script.shdan kemudiansudo -u username script.sh
NiCU
@Andrew Saya bertanya-tanya sendiri dan berikut ini bekerja untuk saya: sudo -u ic sh -c 'cmd1 && cmd2'
Karussell
Juga sertakan iopsi jika Anda ingin mendapatkan lingkungan pengguna
neoDev
6
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:
Apakah ini akan berfungsi untuk perintah yang hanya tersedia untuk pengguna tertentu?
Manish Mathai
Anda dapat menentukan bahwa hanya pengguna tertentu yang dapat menjalankan perintah (dalam contoh di atas, ganti 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.
James Polley
@Manish. Iya nih. Apa yang dikatakan file sudoers adalah "Izinkan nama pengguna ini pada host ini untuk menjalankan command1 tanpa harus memberikan kata sandi.
DaveParillo
6
# 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
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.
Saya pikir ini adalah jawaban yang paling tepat, memiliki semua jawaban lain yang menyarankan sudo, yang sering tidak diinstal secara default pada beberapa instalasi linux minimal.
Tim
1
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
Jawaban:
Gunakan perintah sudo dalam skrip.
Dalam bentuk:
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?
sumber
chmod +x script.sh
dan kemudiansudo -u username script.sh
i
opsi jika Anda ingin mendapatkan lingkungan penggunaJawaban 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:Jika Anda perlu menjalankan hal yang sama di banyak host, Anda dapat membukanya dengan:
Tapi saya ** tidak * akan menggunakan:
atau nama pengguna hostname = SEMUA
The man page sudoer memiliki banyak rincian berdarah
sumber
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 disudo -u username commandline
baris skrip.# I = suka:
# ./run
sumber
Untuk sonarqube:
sudo -u sonar /usr/bin/sonar start
di mana
sonar
nama pengguna yang digunakan untuk menjalankan perintah/usr/bin/sonar start
sumber
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
sumber
Dengan cara ini, akhir skrip akan dieksekusi oleh pengguna yang berbeda (root). Harap perhatikan
$[LINENO+2]
danexit $?
panggilan. Ini diperlukan untuk membuat akhir skrip untuk mengeksekusi hanya sekali dan untuk menjaga kodesudo
panggilan keluar.sumber