Anda dapat 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 beralih pengguna tanpa memberikan password jika Anda root. Lihat jawaban Caleb
Anda dapat memodifikasi /etc/pam.d/su file untuk memungkinkan su tanpa password. Lihat ini jawaban.
Jika Anda mengubah file auth Anda untuk berikut ini, setiap pengguna yang merupakan bagian dari kelompok somegroup bisa su untuk otheruser tanpa password.
auth sufficient pam_rootok.soauth [success=ignore default=1] pam_succeed_if.so user = otheruserauth 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
Jawaban di atas sangat berguna bagi saya butto menjawab pertanyaan yang sebenarnya...
Bagaimana Saya bisa menegaskan bahwa skrip benar-benar berjalan di bawah pengguna itu sekarang?-
Gunakan:
ps -ef | grep <command-name>
Outputnya harus menyertakan skrip Anda dan pengguna sebenarnya yang menjalankannya.Orang - orang pada sistem seperti BSD, misalnya MAC dapat menemukan informasi serupa dengan:
Aku punya masalah yang sama.Cukup ketik perintah screen -dmS testscreen ini akan membuat layar terpisah pada akun pengguna non-sudo Anda dan kemudian Anda dapat mencatatnya dan memeriksa apakah layar ini ada di sana screen -ls.
Anda dapat menggunakan sudo untuk melakukan hal ini. Pertama, Anda perlu memodifikasi /etc/sudoers file untuk menambahkan aturan yang memungkinkan hudson pengguna untuk menjadi pengguna lain untuk script yang bersangkutan. Mari kita asumsikan Anda memiliki user1 akun yang perlu dijalankan /usr/local/bin/my_script.sh.
Lari visudo untuk memodifikasi sudoers file.Kemudian, gunakan yang berikut ini sudo perintah untuk menjalankan script dari hudson.
Sangat penting bahwa Anda menggunakan visudo untuk memodifikasi sudoers file untuk memeriksa file untuk kesalahan sebelum meletakkannya di tempat. Juga, saya sarankan membaca cepat man sudoers untuk memahami dengan jelas apa yang dilakukan di atas sebelum menambahkannya ke konfigurasi Anda.
Saya menggunakan"ssh & quot; menunjuk ke mesin lokal yang sama.Ini memungkinkan saya untuk menjalankan skrip shell atau perintah tanpa kata sandi.
ssh target-user@localhost script-to-execute
Pertama, saya memastikan pengguna host menyimpan kunci publiknya ke pengguna target (di mesin yang sama).Kemudian saya menjalankan perintah ssh yang saya tunjukkan di atas.
Hasilnya, adalah perintah/skrip yang dijalankan sebagai pengguna target, bahkan tanpa memasukkan kata sandi.