Pertanyaan Jalankan skrip shell sebagai pengguna lain yang tidak memiliki kata sandi


Saya ingin menjalankan skrip dari shell ubuntu utama sebagai pengguna berbeda 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

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

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


206
2018-05-13 10:55


asal




Jawaban:


Anda bisa melakukannya dengan su atau sudo, tidak perlu 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.

su hanya dapat mengalihkan pengguna tanpa memberikan kata sandi jika Anda adalah root. Lihat jawaban Caleb 

Anda dapat memodifikasi /etc/pam.d/su file untuk diizinkan su tanpa kata sandi. Lihat ini menjawab.

Jika Anda mengubah file auth Anda menjadi berikut, setiap pengguna yang merupakan bagian dari grup somegroup bisa su untuk otheruser tanpa 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

287
2018-05-13 11:20



Bisakah Anda menambahkan cara melakukannya dengan adil su terlalu? - rubo77
Ini meminta saya untuk kata sandi :-( - IanVaughan
@IanVaughan, Dengan konfigurasi default (dari sudo), Anda akan dimintai kata sandi kecuali Anda menjalankannya sebagai root. Anda dapat mengkonfigurasi sudo untuk "memungkinkan pengguna A untuk menjalankan cmd C sebagai pengguna B tanpa memerlukan kata sandi". Lihat help.ubuntu.com/community/Sudoers - geirha
Saya diminta kata sandi saat menjalankan ini sebagai root. Ada saran? - Nate
@Nate, sudahkah Anda membuat beberapa perubahan pada file sudoers. Konfigurasi default memungkinkan root menjalankan apa pun sebagai siapa pun, tanpa memerlukan kata sandi. - geirha


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

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

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


87
2018-04-07 00:01



Saya perlu menambahkan sudo ke awal kalau tidak itu meminta saya untuk kata sandi saya. - IanVaughan
Ini pasti tidak berhasil sudo. dengan sudo kerjanya, misalnya: sudo su - www-data -c "touch /tmp/test"berhasil membuat file sebagai www-data - rubo77
Untuk menggunakan "su" Anda memerlukan kata sandi root, titik "sudo" adalah untuk menghindarinya. Jika Anda memiliki kata sandi root menggunakan "su" seperti di atas harus berfungsi dengan baik. - Samuel Åslund


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

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

Menggunakan:

ps -ef | grep <command-name>

Output harus menyertakan skrip Anda dan pengguna sebenarnya yang mengeksekusinya. Orang-orang yang menggunakan sistem mirip BSD, mis. MAC dapat menemukan informasi serupa dengan:

ps aux | grep <command-name>

6
2018-05-11 18:30





Saya memiliki masalah yang sama. Ketik saja perintahnya screen -dmS testscreen ini akan membuat layar terpisah pada akun pengguna non-sudo Anda dan kemudian Anda dapat masuk dan memeriksa apakah layar ini ada screen -ls.


2
2018-05-06 08:35