bagaimana cara saya melakukan tindakan root dari akun non-root?

15

Saya ingin dapat memulai kembali layanan dari skrip-php. berjalan di bawah akun pengguna www.

Apa cara yang disukai untuk melakukan tindakan ini?

Saya rekomendasikan saya dapat membuat file dengan perintah que'd, dibaca oleh CRON, tetapi solusinya gatal.

Apa yang saya pikirkan adalah layanan kecil, berjalan di bawah root, memungkinkan "metode" yang telah ditentukan sehingga tindakan root sewenang-wenang tidak dapat dijalankan.

Adakah alat di luar sana untuk ini?

pengguna65297
sumber
@MadHatter, Mona Lisa mengirimkan salam, ;-)
user65297

Jawaban:

27

Anda dapat menemukan kembali roda, tetapi jujur, saya menggunakan sudo tanpa kata sandi untuk ini. Sebagai contoh, sistem pemantauan saya harus dapat menjalankan perintah untuk memeriksa RAID perangkat keras. Ini membutuhkan hak akses root, tetapi saya tidak ingin menjalankan seluruh sistem pemantauan sebagai root, jadi alih-alih saya memiliki sudoersbaris yang mengatakan

nagios  ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid

dan kemudian jalankan perintah sudo /usr/lib/nagios/plugins/check_md_raidsebagai pengguna pemantauan, ketika saya perlu memeriksa RAID.

Anda bisa memiliki garis sudoers yang berbunyi

www-user    ALL=(root) NOPASSWD: /etc/rc.d/init.d/myservice

kemudian jalankan php sudo /etc/rc.d/init.d/myservice restart.

MadHatter
sumber
2
Ini adalah cara untuk menggunakan IMO. Saya menggunakan proses ini untuk tugas serupa. Sudah berproduksi selama lebih dari 3 tahun sekarang. Tidak ada yang pernah gagal dan risiko keamanan hampir tidak ada selama Anda melindungi kode PHP yang memicu dengan benar dengan logika aplikasi Anda.
Andrew Ensley
1
Terima kasih, sudoers baru bagi saya dan tepat sasaran. @ Andrew, terima kasih atas info tambahannya.
user65297
1
user65927, maafkan saya jika ini bukan berita baru bagi Anda, tetapi etiket lokal adalah bahwa ketika Anda memiliki jawaban yang memuaskan untuk pertanyaan, Anda menerimanya dengan mengklik garis centang di sebelahnya.
MadHatter
1
Anda juga mungkin perlu mengomentari baris "Defaults requiredetty" di file sudoers Anda. Langkah ini membuat saya beberapa kali. (Misalnya, ubah "Defaults requiredetty" ke "#Defaults requiredetty")
steve.lippert
6

Lihatlah sudo : ini memungkinkan untuk menentukan tindakan yang dapat dilakukan sebagai pengguna lain (root dalam kasus Anda).

Misalnya Anda dapat menambahkan ke Anda /etc/sudoers(jangan mengedit file langsung menggunakan visudo)

www-user-account ALL= NOPASSWD: /usr/bin/mypredefinedaction

Lihat man sudodetail dan sintaksis file

Matteo
sumber
2
berhati-hatilah ketika Anda mengedit /etc/sudoersfile. Jika tidak tepat secara sintaksis, mengubahnya kembali adalah mimpi buruk b / c Anda harus sudokembali ke dalamnya, tetapi Anda tidak dapat b / c Anda baru saja menghapus sudo. Anda akhirnya harus menggunakan CD / DVD cadangan dan me-mount partisi secara manual.
puk
1
@ puk Sebenarnya untuk mengedit shudders Anda memerlukan akses root dan jika file rusak Anda dapat login sebagai root dan kemudian mengembalikannya (dari salinan cadangan) atau memperbaikinya secara manual. visudo juga melakukan pemeriksaan kewarasan pada file sebelum menulisnya.
Matteo
apa shudders? Memang benar visudo melakukan pemeriksaan kewarasan, tetapi mereka tidak membantu setelah kerusakan dilakukan: P
puk