Bagaimana menjalankan skrip sebagai pengguna lain tanpa kata sandi?

145

Saya memiliki script.sh yang harus dijalankan sebagai user2. Namun, skrip ini hanya dapat dijalankan di bawah user1 di aplikasi saya.

Saya ingin menjalankan perintah berikut:

su user2 -C script.sh

tetapi dapat berjalan tanpa kata sandi.

Saya juga ingin ini sangat membatasi, karena di user1 hanya dapat menjalankan script.sh di bawah user2 dan tidak ada yang lain.

Saya sudah mencoba melakukan ini dengan file sudoers dan baru saja bingung tanpa henti setelah berjam-jam mencoba.

Jika seseorang dapat memberikan contoh eksplisit tentang bagaimana hal ini dapat dicapai (bukan sesuatu yang umum seperti menggunakan sudoers), itu akan sangat dihargai.

pengguna788171
sumber
15
Saya tidak terlalu dengan penutupan. Ini adalah pertanyaan tentang bagaimana memprogram sistem dengan cara tertentu; dengan demikian, ini adalah tentang pemrograman shell dan berada dalam ruang lingkup SO yang untuk pertanyaan tentang pemrograman. Jelas bahwa sejumlah orang tidak melihat ini sebagai topik yang terlalu jauh sehingga harus dipilih; semua pertanyaan dan jawaban memiliki jumlah suara yang cukup banyak.
Jonathan Leffler

Jawaban:

121

Panggil visudodan tambahkan ini:

user1 ALL=(user2) NOPASSWD: /home/user2/bin/test.sh

Jalur perintah harus absolut ! Kemudian telepon sudo -u user2 /home/user2/bin/test.shdari user1shell. Selesai

pyroscope
sumber
3
Ada deskripsi yang bagus tentang format sudoers pada bantuan Ubuntu. Halaman
manual
jadi bagaimana skala ini untuk semua pengguna berjalan sebagai user2, bukan hanya user1?
jiggunjer
193

coba jalankan:

su -c "Your command right here" -s /bin/sh username

Ini akan menjalankan perintah sebagai nama pengguna mengingat Anda memiliki izin untuk sudo sebagai pengguna itu.

Jeronimo Robles
sumber
17
Ini berfungsi sebagai pengguna normal dengan hak sudo penuh seperti ini:sudo su -c "Your command right here" -s /bin/sh otheruser
rubo77
5
Hanya sebuah catatan untuk setiap pengguna mac, ternyata sintaks yang berbeda sedikit: su username -c "command".
NHDaly
1
Jika Anda mencoba memulai screensebagai pengguna lain maka ini mungkin bisa membantu - linuxquestions.org/questions/linux-software-2/…
Mint
2
Jika username(atau dalam pertanyaan, user2) memiliki kata sandi itu sendiri, ini tidak akan memungkinkan untuk melewatkan prompt untuk itu. jawaban yang lain adalah: tidak perlu kata sandi, baik user1 dan user2.
phil294
1
`su -c "Your command right here" -s /bin/sh username`

Perintah di atas benar, tetapi pada Red Hat jika selinux memberlakukannya tidak akan mengizinkan cron untuk mengeksekusi skrip sebagai pengguna lain. contoh; execl: couldn't exec /bin/sh execl: Permission denied

Saya harus menginstal setroubleshoot dan setools dan menjalankan yang berikut untuk mengizinkannya:

yum install setroubleshoot setools
sealert -a /var/log/audit/audit.log
grep crond /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.p
C Jaskoski
sumber