Jalankan skrip shell sebagai pengguna lain yang tidak memiliki kata sandi

245

Saya ingin menjalankan skrip dari shell ubuntu utama sebagai pengguna lain yang tidak memiliki kata sandi.

Saya memiliki hak sudo penuh, jadi saya mencoba ini:

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

Maka saya harus memasukkan kata sandi, tetapi saya tidak yakin apakah skrip itu sekarang benar-benar berjalan di bawah pengguna itu.

Bagaimana saya bisa mengkonfirmasi bahwa skrip benar-benar berjalan di bawah pengguna itu sekarang?

rubo77
sumber

Jawaban:

354

Anda dapat melakukannya dengan suatau sudo, tidak perlu untuk keduanya.

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

Bagian yang relevan dari man sudo:

-H   The -H (HOME) option requests that the security policy set
     the HOME environment variable to the home directory of the
     target user (root by default) as specified by the password
     database.  Depending on the policy, this may be the default
     behavior.
-u user     The -u (user) option causes sudo to run the specified
      command as a user other than root.  To specify a uid
      instead of a user name, use #uid.  When running commands as
      a uid, many shells require that the '#' be escaped with a
      backslash ('\').  Security policies may restrict uids to
      those listed in the password database.  The sudoers policy
      allows uids that are not in the password database as long
      as the targetpw option is not set.  Other security policies
      may not support this.

suhanya dapat mengalihkan pengguna tanpa memberikan kata sandi jika Anda root. Lihat jawaban Caleb

Anda dapat memodifikasi /etc/pam.d/sufile yang diizinkan sutanpa kata sandi. Lihat jawaban ini .

Jika Anda memodifikasi file auth ke berikut ini, setiap pengguna yang merupakan bagian dari grup somegroupdapat sumelakukannya otherusertanpa kata sandi.

auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = otheruser
auth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

Kemudian uji dari terminal

rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser
geirha
sumber
4
Bisakah Anda menambahkan bagaimana melakukannya dengan suterlalu?
rubo77
2
Ini meminta saya untuk kata sandi :-(
IanVaughan
1
@IanVaughan, Dengan konfigurasi default (dari sudo), Anda akan dimintai kata sandi kecuali Anda menjalankannya sebagai root. Anda dapat mengkonfigurasi sudo untuk "mengizinkan pengguna A untuk menjalankan cmd C sebagai pengguna B tanpa memerlukan kata sandi". Lihat help.ubuntu.com/community/Sudoers
geirha
1
Saya diminta kata sandi saat menjalankan ini sebagai root. Ada saran?
Nate
1
@NamGVU perlu diingat bahwa ketertiban penting. Jika sudoers Anda memiliki aturan lebih jauh ke bawah yang menetapkan izin lain untuk pengguna Anda, atau grup yang menjadi anggota Anda, itu akan menggantikan aturan NOPASSWD Anda.
geirha
100

Jika Anda ingin menggunakan su bukan sudo, saya yakin Anda dapat menggunakan sesuatu seperti ini:

su - <username> -c "<commands>"
  • - akan mensimulasikan login dari pengguna yang ditentukan
  • -c mengatakan itu bahwa Anda ingin menjalankan perintah

ps. Sayangnya saya tidak dapat menginstal ruby ​​menggunakan rvm dengan metode ini, tapi itu mungkin tidak terkait.

Caleb
sumber
5
Saya perlu menambahkan sudoke awal jika tidak meminta kata sandi saya.
IanVaughan
2
Ini jelas tidak akan berhasil tanpanya sudo. dengan sudo berfungsi, misalnya: sudo su - www-data -c "touch /tmp/test"berhasil membuat file sebagai www-data
rubo77
Untuk menggunakan "su" Anda memerlukan kata sandi root, maksud dari "sudo" adalah untuk menghindarinya. Jika Anda memiliki kata sandi root menggunakan "su" seperti di atas akan berfungsi dengan baik.
Samuel Åslund
6

Jawaban di atas sangat berguna bagi saya tetapi untuk menjawab pertanyaan yang sebenarnya ...

Bagaimana saya bisa menegaskan bahwa skrip benar-benar berjalan di bawah pengguna itu sekarang? -

Menggunakan:

ps -ef | grep <command-name>

Keluaran harus mencakup skrip Anda dan pengguna aktual yang mengeksekusinya. Orang-orang di sistem yang menyukai BSD, mis. MAC dapat menemukan informasi yang serupa dengan:

ps aux | grep <command-name>
Samuel Åslund
sumber
Pengguna Linux dapat menggunakan ps aux.
Dean Howell
@DeanHowell; Benar, tetapi pengguna MAC tidak dapat menggunakan "ps -ef" dan "ps aux" adalah opsi BSD, hanya tersedia sebagai fitur kompatibilitas sementara "ps -ef" adalah opsi Unix / POSIX standar.
Samuel Åslund
2

Saya memiliki masalah yang sama. Cukup ketik perintah screen -dmS testscreenini akan membuat layar terpisah pada akun pengguna non-sudo Anda dan kemudian Anda dapat login dan memeriksa apakah layar ini ada di sana screen -ls.

liime
sumber