Pertanyaan jalankan skrip sebagai pengguna yang memiliki shell nologin


Yang perlu saya lakukan adalah menjalankan skrip tertentu sebagai pengguna tertentu yang memang memiliki nologin / shell palsu yang ditunjukkan di / etc / passwd.

Saya akan menjalankan skrip sebagai root dan ini harus dijalankan sebagai pengguna lain. Berlari:

~# su -c "/bin/touch /tmp/test" testuser

akan berfungsi tetapi saya memerlukan cangkang yang valid untuk penguji. Saya tahu saya dapat menonaktifkan kata sandi passwd -d testuser dan meninggalkan shell ke / bin / bash dengan cara ini akan mengamankan sedikit tetapi saya harus memiliki nologin / shell palsu.

Pada dasarnya apa yang saya butuhkan adalah apa yang dilakukan crontab ketika kita mengatur pekerjaan untuk berjalan sebagai pengguna tertentu, terlepas dari yang satu ini memiliki nologin / shell palsu.

ps.s Saya menemukan utas ini Menjalankan perintah sebagai pengguna nologin tapi saya tidak tahu cara "menggabungkan" perintah su -s /bin/sh $user ke skrip yang harus saya jalankan

Terima kasih


78
2018-01-18 13:56






Jawaban:


Anda dapat menggunakan -s beralih ke su untuk menjalankan shell tertentu

su -s /bin/bash -c '/path/to/your/script' testuser

(Bersiap sudo ke atas jika testuser adalah pengguna tanpa kata sandi.)


109
2018-01-18 18:49



Bagaimana jika su root:root -rwsr-x--- ? - Patryk
Bagaimana jika pengguna tidak memiliki kata sandi? - CMCDragonkai
@Wesley Menemukan bahwa Anda harus menjadi root untuk menjalankan perintah itu untuk pengguna tanpa sandi. - CMCDragonkai
@lain, Jika pengguna seharusnya tidak memiliki shell, proses yang terkait dengan perintah tidak boleh menjadi anak dari proses bash. Jadi, Anda juga harus menggunakan exec untuk mengganti shell dengan skrip. Dan jika Anda ingin menjadikan skrip sebagai anak dari init, Anda cukup menggunakan &, sebagai contoh su -s /bin/bash -c 'exec /path/to/your/script &' test - Facundo Victor
Karena saya telah menghabiskan 20 menit terakhir untuk mengetahui cara mencapai hasil yang sama runuserSaya ingin menunjukkan itu su -s SHELL parameter merender perintah runuser cukup banyak gunanya :) Terima kasih Jan! - jirka


Anda bisa melakukan ini dengan sudo -u jika Anda menginstalnya:

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

7
2018-01-18 14:03



Bagaimana Anda mengirimkan parameter ke sudo -u apache whoami? - CMCDragonkai
@ CMCDragonkai Setiap parameter setelah perintah akan diteruskan. Anda dapat menganggapnya seperti "sudo [-u apache] [whoami <param1> <param2>]". - Handyman5
Saya pikir menggunakan sudo -u mungkin bukan ide yang baik untuk menjalankan perintah sebagai pengguna nologin, karena mengekspos SUDO_USER di lingkungan yang adalah yang asli memanggil perintah. Mungkin aku terlalu memikirkannya. - Meow


Dengan memberikan skrip sebagai argumen untuk dieksekusi ke / bin / sh:

su -s "/bin/sh /your/script/location" username

4
2018-01-18 14:01





baru sadar :

su -s "/ bin / bash" -c "/ bin / touch / tmp / testuser" testuser

mungkin ada cara yang lebih baik?!


2
2018-02-16 07:18





sebenarnya, cara terbaik untuk melakukan ini adalah melalui pelari

lihat halaman manual untuk detailnya

alat ini digunakan untuk menghadapi situasi seperti yang dikatakan pengembang dalam bolgnya

Setiap kali sebuah layanan berjalan sebagai root dan ingin mengubah UID menggunakan shell, ia harus menggunakan runuser.

http://danwalsh.livejournal.com/55588.html

Saya telah memposting jawaban ini di banyak istana, maafkan saya jika Anda menemukan ini menjengkelkan


0
2017-12-07 19:19



Harap jangan mengirim jawaban hanya tautan untuk mencegah pembusukan tautan. Sebagai gantinya, tambahkan informasi yang paling relevan dari tautan ke jawaban Anda atau sebagai alternatif, poskan tautan sebagai komentar, bukan jawaban. Lihat ini serverfault.com/help/how-to-answer artikel pusat bantuan untuk informasi lebih lanjut. - Federico Galli
@FedericoGalli informasi yang paling relevan sudah ditambahkan, tidak perlu menyalin dan menempelkan penggunaan, halaman manual menyediakan informasi yang cukup - Z-Y00


Gunakan sudo -u untuk menentukan pengguna. Juga gunakan flag -i untuk mengatur variabel lingkungan dari pengguna target juga.

sudo -i -u user command

-1



ini memberi This account is currently not available. - knocte