Bagaimana menjalankan aplikasi menggunakan sudo tanpa kata sandi?

40

... tetapi masih diperlukan untuk aplikasi yang memerlukan hak admin?

Untuk memungkinkan hal-hal berikut:

$ apache2ctl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

$ sudo !!
sudo apache2ctl restart             #no password asked
$                                   #works!

Untuk referensi saya telah melihat pengaturan ini pada contoh e3 amazon

Ada ide?

tutuca
sumber
Ini adalah tutorial yang luar biasa di forum yang perinciannya membuat file terpisah untuk menentukan program yang biasa Anda gunakan. Dan itu ide yang bagus untuk alasan keamanan.
Todd Partridge 'Gen2ly'

Jawaban:

51

Anda perlu mengedit file sudoers. Maklum bahwa kesuksesan memberi Anda sistem yang kurang aman dan kegagalan dapat merusak sudo. SELALU mengedit file sudoers dengan sudo visudo, karena visudo memeriksa kesalahan dan tidak akan menyimpan file jika ada yang ditemukan.

Ini adalah ide yang buruk untuk memberikan semua izin untuk berjalan sebagai root tanpa kata sandi, jadi biarkan saja yang dapat dieksekusi yang Anda butuhkan (apache2ctl); tambahkan berikut ini ke bagian paling bawah file:

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl

Anda dapat mengganti jalur ke executable dengan "ALL" jika Anda memilih, memberi Anda sudo lengkap tanpa kata sandi.

Ganti YOURNAME dengan nama pengguna Anda dan tekan Ctrl+ Xuntuk menyimpan dan keluar. Jika terjadi kesalahan, itu akan menawarkan untuk mengembalikan, mengedit, atau menyimpan.

Pastikan bahwa Anda menggunakan path lengkap ke file executable:
ie. /usr/bin/apache2ctlbukannya adil apache2ctl. Ini penting karena tanpa secara eksplisit menyatakan path sudo akan memungkinkan setiap program bernama apachectl pada path pengguna saat ini untuk dijalankan sebagai root.

Mark Paskal
sumber
3
Catatan yang %YOURNAMEakan memberikan izin kepada grup bernama seperti pengguna Anda, yang biasanya tidak menjadi masalah karena setiap pengguna normal memiliki grup dengan nama yang sama di sistem Ubuntu. Untuk memberikan izin kepada pengguna Anda, tentukan YOURNAMEtanpa%.
Daniel Werner
Apakah ada cara untuk menjadi lebih konstruktif? (beberapa fungsi hanya dapat dieksekusi)
3pic
1
Pos tua, tapi saya pasti akan menyelesaikan jawaban itu dengan membatasi masuknya sudoers' ke hostname tertentu (jika mungkin), dan baik untuk diberikan argumen o tidak ada argumen sama sekali (mengikuti apache2ctl), seperti: YOURNAME YOUR-HOSTNAME = NOPASSWD: /usr/bin/apache2ctl <specific arg | "">. --- Dalam semua kasus man 5 sudoersadalah referensi untuk pergi ke.
Cbhihe
25

Jawaban sebenarnya untuk pertanyaan ini bisa rumit karena sudo sangat kuat, dan dapat dikonfigurasi untuk melakukan hal-hal keren. Ini dijelaskan secara menyeluruh dalam dokumentasi .

Jawaban singkat dijalankan sudo visudodi terminal. Jika ini adalah pertama kalinya Anda menjalankan visudo, ia akan menanyakan editor mana yang Anda sukai. nano umumnya dianggap paling mudah digunakan, tetapi pilihlah editor yang paling nyaman bagi Anda. Anda perlu memutuskan siapa yang ingin Anda akses; bisa ALLuntuk semua orang ( ide yang sangat buruk) , pengguna, atau grup sistem. Grup diawali dengan tanda%. Misalnya, jika Anda ingin memberikan semua orang dalam steroid_usershak istimewa root grup tanpa perlu kata sandi untuk semua perintah, Anda akan menambahkan:

%steroid_users ALL=(ALL) NOPASSWD: ALL

ke akhir file, keluar, dan simpan file tersebut. Jika semuanya berjalan dengan baik, dan Anda adalah anggota kelompok steroid_users, Anda akan dapat mengeluarkan sudo *some-command*tanpa repot perlu memasukkan kata sandi Anda.

Perlu diingat bahwa siapa pun yang memiliki akses ke terminal Anda saat Anda login - atau jika Anda memiliki pengaturan ssh untuk auth berbasis kunci, atau (bahkan lebih buruk) telah mengaktifkan login sesi bebas kata sandi - akses lengkap dan tidak terbatas ke seluruh Anda sistem. Jika Anda memiliki banyak pengguna di sistem Anda, atau jika ini adalah file server, semua file pengguna dapat berisiko karena root dapat melakukan apa saja!

Juga, jika Anda membuat kesalahan, visudo akan menampilkan dan pesan kesalahan dan tidak menyimpan perubahan ke file. Ini akan membantu mencegah kerusakan sudo sepenuhnya. Anda harus benar-benar membaca dokumentasinya . Sudo dirancang untuk memberikan pengguna akses yang cukup untuk melakukan pekerjaan mereka tanpa perlu mengekspos seluruh sistem Anda. Mungkin menguntungkan untuk hanya memberikan akses bebas kata sandi untuk perintah tertentu.

Saya harap ini membantu.

Chris
sumber
Itu berhasil, saya mengambil ini dan kemudian saya menggunakan "sudo service sudo restart" dari askubuntu.com/questions/192050/… dan saya bisa menggunakan semua ini dalam sesi Ubuntu aktif saya. Luar biasa!
Patrick
5

Anda harus mengedit file '/ etc / sudoers' (ada perintah 'visudo' untuk itu.) Untuk menambahkan NOPASSWD sebelum daftar perintah yang diizinkan untuk pengguna atau grup Anda. Jika pengguna Anda dalam grup 'admin' - Anda perlu mengikuti:

%admin ALL=(ALL) NOPASSWD: ALL

Periksa https://help.ubuntu.com/community/Sudoers , btw.

korjjj
sumber
3

Anda BISA menambahkan bendera nopasswd ke daftar pengguna tetapi itu tidak menghilangkan semua kata sandi yang diajukan pertanyaan. Hanya yang pertama yang akan ditanyakan.

  1. Edit sudoers: sudo visudo(Anda HARUS menggunakan sudo. Ini adalah file admin.)
  2. Tambahkan pengguna Anda dengan bendera nopasswd setelah Admin Line (di akhir). Misalnya:
    cyrex ALL = NOPASSWD: ALLataucyrex ALL = (ALL) NOPASSWD: ALL
Luis Alvarado
sumber
2
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

atau

sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2

Saya kira ini akan melakukannya.

Tapi hati-hati dengan menghapus kata sandi untuk sudo.

Alex
sumber
2
Anda harus menentukan jalur absolut dalam contoh pertama, untuk alasan keamanan - pengguna yang tidak bermoral dapat mengubah $ PATH dan mencuri akses root dengan nama perintah yang tidak memenuhi syarat.
bgvaughan
0

Sekarang untuk jawaban yang sederhana! Tidak ada cara yang mungkin untuk mengacaukan apa pun atau memalsukan pemasangan Anda.

Cukup masukkan kata sandi Anda beberapa kali dan kemudian Anda tidak akan pernah harus memasukkannya lagi! Ini akan memungkinkan Anda untuk menambahkan akun admin lokal ke grup "root" yang kemudian tidak dikomentari dari templat yang akan memungkinkan seluruh hak istimewa pengguna super "root" grup. Anda dapat membaca kekhawatiran / solusi keamanan saya untuk prosedur ini di bagian akhir posting ini.

% username & adalah variabel global untuk nama pengguna Anda (ganti dengan nama pengguna yang diinginkan)

Langkah 1: Buka jendela terminal dan kemudian ketik " sudo usermod -a -G root %username%"

Langkah 2: Kemudian salin / tempel ini ...

sudo sed -i 's/# auth       sufficient pam_wheel.so trust/auth       sufficient pam_wheel.so trust/g' /etc/pam.d/su`

Langkah 2 ATAU ketik

sudo nano /etc/pam.d/su`

Pergi baris 19 dan menghapus "#" sebelumnya # auth sufficient pam_wheel.so trust(mungkin nomor baris yang berbeda untuk beberapa)

* Perintah pertama menambahkan% nama pengguna Anda% ke grup "root"

Perintah kedua / ketiga memungkinkan semua anggota "root" grup untuk menjadi superuser tanpa kata sandi, dibandingkan hanya mengizinkan pengguna "root" su hak istimewa untuk otentikasi.


Catatan akhir:

Jangan main-main dengan /etc/sudoers... Ada banyak pemeriksaan / saldo yang harus melalui otentikasi 'su'. Otentikasi pengguna super menggunakan prosedur pam.d yang sama seperti semua otentikasi login lainnya. "/etc/security/access.conf" memiliki tata letak untuk kontrol akses melalui komunikasi tcp / ip (192.168.0.1) dan melalui layanan telnet (tty1 & tty2 & tty3 ... dll) Ini memungkinkan penyaringan yang lebih tepat per aplikasi melalui protokol transportasi. Jika keamanan menjadi perhatian Anda, maka kekhawatiran Anda harus diarahkan pada ancaman kode jarak jauh versus seseorang yang benar-benar menyentuh komputer Anda ketika Anda meninggalkan ruangan !!!

Makanan untuk paranoia (jangan ketik ini hanya di ulasan saja):

sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf

^ Ini memblokir akses ke konsol untuk siapa saja yang bukan anggota sistem atau root. Terkadang program menginstal nama pengguna / grup yang dieksploitasi!

Nathaniel F. Malm
sumber
2
Bukan ahli keamanan tetapi kedengarannya agak kontra intuitif. Anda menonaktifkan kata sandi untuk seluruh grup untuk memungkinkan satu pengguna menjalankan aplikasi tertentu tanpa kata sandi untuk menghindari "kompleksitas" penyempurnaan sudo untuk aplikasi tertentu, bukan? Dan semua ini di server publik? Apakah skrip menonaktifkan naluri bertahan hidup dasar Anda? Keamanan adalah COMPLEX BY DESIGN. Ingat, ini seperti bawang. Ini memiliki lapisan dan itu membuat Anda menangis ... Kehilangan data pada server yang dikompromikan hanya bagian dari persamaan. Serangan peretas oleh hacker dari sistem Anda sama seriusnya tetapi sering diabaikan
hmayag
2
Ini kontra intuitif dan kontra-akal sehat: Membuka seluruh toples kue untuk pengguna yang hanya membutuhkan satu cookie sangat tidak bertanggung jawab. Anda akan menambahkan pengguna ke daftar sudoers dan menghapus kebutuhan untuk memasukkan kata sandi daripada mengedit file / file sudoers. "Jika pistol tidak aman untuk anak-anak, jangan beri mereka kanon." -me
John