Bagaimana menjalankan program sebagai root tanpa "sudo"?

10

Saya memiliki program biner tertentu pada OS X yang hanya dapat dijalankan sebagai root.

Saya bosan memprogram ulang sudosetiap kali saya memintanya dan mengetikkan kata sandi, dan ingin itu dijalankan secara otomatis sebagai root ketika saya memintanya secara teratur, tanpa meminta kata sandi.

Pemilik program adalah root dan grupnya adalah roda.

Saya mencoba chmod ug+suntuk mengatur userid dan groupid pada eksekusi ke root / wheel, tetapi ketika saya menjalankan program tanpa sudo masih mengeluh bahwa itu hanya dapat berjalan dengan sudo atau sebagai root.

UrEl
sumber
Bisakah itu dijalankan pada waktu tertentu atau ketika suatu peristiwa terjadi?
user151019
9
Lama waktu unix gurus akan menyarankan bahwa menjalankan operasi hanya root dengan tangan secara teratur berarti Anda melakukan kesalahan. Apakah ini sesuatu yang dapat diotomatisasi? Atau jalankan sebagai daemon? Lebih detail mungkin memberikan saran untuk solusi dari jenis yang berbeda.
dmckee --- ex-moderator kitten
Apakah program tersebut sebenarnya dimiliki oleh root? Setuid / gid akan menggunakan pengguna / grup file.
Daniel Beck
2
... di mana "lebih detail" juga mencakup hal-hal seperti apakah biner program ini pada volume yang dipasang NFS dan apakah Anda menggunakan nosuidopsi mount ... selain itu mengapa Anda harus secara teratur menjalankan program sebagai superuser.
JdeBP
@ Dmckee banyak pengguna mac yang menjalankan perangkat lunak server di workstation mereka dan seringkali pengaturan untuk memerlukan root untuk hal-hal yang benar-benar tidak memerlukannya ... tetapi mengkonfigurasi ulang LAMP stack untuk berjalan tanpa root adalah rasa sakit di pantat. Di sisi lain, memulai kembali apache 20 kali sehari dan mengetik sudo setiap kali juga menyebalkan. Ini adalah solusi sederhana.
Abhi Beckert

Jawaban:

2

Apakah Anda yakin program yang Anda coba jalankan sebenarnya adalah biner, dan bukan skrip shell. Kebanyakan cangkang mengabaikan skrip suid karena benar-benar sulit dilakukan dengan aman. Cara mudah untuk memeriksa adalah dengan menggunakan fileperintah pada program.

KeithB
sumber
17

Setengah solusi untuk masalah Anda:

dalam file sudoers, tambahkan berikut ini:

username ALL= NOPASSWD: /path/to/command

Kemudian dari baris perintah, Anda dapat mengetik:

sudo command

dan itu akan menjalankan perintah tanpa meminta kata sandi Anda. Perintah ini akan berjalan sebagai root.

Catatan, Anda harus mengganti nama pengguna dengan nama pengguna Anda yang sebenarnya.

Walter
sumber
Terkejut menemukan jawaban terbaik di bagian bawah. Terima kasih!
CDR
FYI, untuk menyelesaikan setengah lainnya (tidak harus mengetikkan perintah sudo) buat alias shell yang menyertakan sudo dalam perintah (seperti surm = sudo rm "$ @")
Walter
4

Jika Anda benar-benar tidak dapat menyebutnya sebagai daemon untuk alasan apa pun (pertanyaan ini akan relevan dalam hal itu) , metode ini dapat diretas bersama, tetapi cukup kotor, dan tidak aman sama sekali.

Konsepnya adalah meluncurkannya dengan AppleScript. Pertama-tama Anda harus tahu cara menjalankan proses dari baris perintah (yang jika Anda sudah menggunakan sudo, berarti Anda harus siap). Anda akan meluncurkan proses itu menggunakan do shell scriptperintah, dan alih-alih menggunakan sudo Anda akan menulis kredensial Anda ke dalam AppleScript:

do shell script "/path/to/your/executable/here" user name "me" password "mypassword" with administrator privileges

Saya tegaskan kembali bagian tentang ini menjadi tidak aman: INI BERARTI KREDIT ANDA ADMIN AKAN DISIMPAN DALAM TEKS POLOS. Jika memungkinkan, Anda harus menemukan beberapa cara untuk melatar belakangi ini sebagai LaunchDaemon.

NReilingh
sumber
Cara untuk "Runas" untuk mac Anda :) Terima kasih
Vlueboy
2

PADA OSX, misalkan program yang Anda miliki berada di / usr / local / bin / YourProgramName ... Untuk mengatasi masalah ini, perintah berikut, Untuk mengubah ID Pengguna / Grup untuk hierarki file yang di-root dalam file alih-alih hanya file itu sendiri .

sudo chown -R $(whoami) /usr/local/bin/

... lalu di Terminal gunakan nama program Anda, $ YourProgramName

abdimuna
sumber
Masalah saya adalah program yang diinstal diinstal tanpa izin yang tepat, jadi saya menjalankan ini pada direktori program tersebut dan sekarang mereka berjalan dengan baik tanpa sudo. Terima kasih!
atwixtor
0

Anda dapat melakukan

sudo tcsh

yang akan menempatkan Anda di shell root.

DTest
sumber
0

Sepertinya program itu sendiri memeriksa apakah sedang berjalan dengan ID = 0

jet
sumber
1
... yang tentu saja akan terjadi jika itu adalah superuser set-UID (mengesampingkan kekhawatiran yang disebutkan di atas). Apa yang mungkin ingin Anda katakan adalah bahwa program ini memeriksa UID 0 yang sebenarnya dan bukan hanya UID yang efektif 0.
JdeBP
-1

Kamu bisa sudo chown YOUR-USERNAME-HERE BINARY-NAME-HERE.

Tetap saja, saya sepenuhnya setuju dengan komentar dmckee.

dag729
sumber
Bagaimana ini bisa membantu? ⁠
Scott