GNU/Linux >> Belajar Linux >  >> Linux

Apa yang mungkin tidak Anda ketahui tentang sudo

Semua orang tahu sudo , Baik? Alat ini diinstal secara default pada sebagian besar sistem Linux dan tersedia untuk sebagian besar BSD dan varian Unix komersial. Namun, setelah berbicara dengan ratusan sudo pengguna, jawaban paling umum yang saya terima adalah sudo adalah alat untuk memperumit hidup.

Ada pengguna root dan ada su perintah, jadi mengapa memiliki alat lain? Bagi banyak orang, sudo hanyalah awalan untuk perintah administratif. Hanya sedikit yang menyebutkan bahwa ketika Anda memiliki beberapa administrator untuk sistem yang sama, Anda dapat menggunakan sudo log untuk melihat siapa yang melakukan apa.

Jadi, apa itu sudo ? Menurut sudo situs web:

"Sudo memungkinkan administrator sistem untuk mendelegasikan otoritas dengan memberikan pengguna tertentu kemampuan untuk menjalankan beberapa perintah sebagai root atau pengguna lain sambil memberikan jejak audit dari perintah dan argumennya."

Secara default, sudo hadir dengan konfigurasi sederhana, aturan tunggal yang memungkinkan pengguna atau sekelompok pengguna untuk melakukan hampir semua hal (lebih lanjut tentang file konfigurasi nanti di artikel ini):

%wheel ALL=(ALL) ALL

Dalam contoh ini, parameter berarti sebagai berikut:

  • Parameter pertama mendefinisikan anggota grup.
  • Parameter kedua menentukan host tempat anggota grup dapat menjalankan perintah.
  • Parameter ketiga mendefinisikan nama pengguna di mana perintah dapat dijalankan.
  • Parameter terakhir menentukan aplikasi yang dapat dijalankan.

Jadi, dalam contoh ini, anggota roda grup dapat menjalankan semua aplikasi karena semua pengguna di semua host. Bahkan aturan yang sangat permisif ini berguna karena menghasilkan log siapa yang melakukan apa di komputer Anda.

Alias

Selengkapnya tentang sysadmin

  • Aktifkan blog Sysadmin
  • Perusahaan Otomatis:panduan untuk mengelola TI dengan otomatisasi
  • eBook:Kemungkinan Otomatisasi untuk SysAdmins
  • Kisah dari lapangan:Panduan administrator sistem untuk otomatisasi TI
  • eBook:Panduan Kubernetes untuk SRE dan sysadmin
  • Artikel sysadmin terbaru

Tentu saja, setelah bukan hanya Anda dan sahabat Anda yang mengelola kotak bersama, Anda akan mulai menyempurnakan izin. Anda dapat mengganti item dalam konfigurasi di atas dengan daftar:daftar pengguna, daftar perintah, dan seterusnya. Kemungkinan besar, Anda akan menyalin dan menempelkan beberapa daftar ini di dalam konfigurasi Anda.

Situasi ini adalah di mana alias bisa berguna. Mempertahankan daftar yang sama di banyak tempat rawan kesalahan. Anda mendefinisikan alias sekali dan kemudian Anda dapat menggunakannya berkali-kali. Oleh karena itu, ketika Anda kehilangan kepercayaan pada salah satu administrator Anda, Anda dapat menghapusnya dari alias dan selesai. Dengan beberapa daftar alih-alih alias, mudah untuk lupa menghapus pengguna dari salah satu daftar dengan hak istimewa yang lebih tinggi.

Aktifkan fitur untuk grup pengguna tertentu

sudo perintah datang dengan satu set besar default. Namun, ada situasi ketika Anda ingin mengesampingkan beberapa di antaranya. Ini adalah saat Anda menggunakan Default pernyataan dalam konfigurasi. Biasanya, default ini diterapkan pada setiap pengguna, tetapi Anda dapat mempersempit pengaturan ke subset pengguna berdasarkan host, nama pengguna, dan sebagainya. Berikut adalah contoh yang suka didengar oleh generasi sysadmin saya:penghinaan. Ini hanya beberapa pesan lucu ketika seseorang salah mengetik kata sandi:

czanik@linux-mewy:~> sudo ls
[sudo] password for root:
Hold it up to the light --- not a brain in sight!
[sudo] password for root:
My pet ferret can type better than you!
[sudo] password for root:
sudo: 3 incorrect password attempts
czanik@linux-mewy:~>

Karena tidak semua orang menyukai humor sysadmin, penghinaan ini dinonaktifkan secara default. Contoh berikut menunjukkan cara mengaktifkan setelan ini hanya untuk sysadmin berpengalaman Anda, yang merupakan anggota roda grup:

Defaults !insults
Defaults:%wheel insults

Saya tidak punya cukup jari untuk menghitung berapa banyak orang yang berterima kasih kepada saya karena membawa pesan-pesan ini kembali.

Verifikasi intisari

Tentu saja ada fitur yang lebih serius di sudo demikian juga. Salah satunya adalah verifikasi intisari. Anda dapat menyertakan intisari aplikasi dalam konfigurasi Anda: 

peter ALL = sha244:11925141bb22866afdf257ce7790bd6275feda80b3b241c108b79c88 /usr/bin/passwd

Dalam hal ini, sudo memeriksa dan membandingkan intisari aplikasi dengan yang disimpan dalam konfigurasi sebelum menjalankan aplikasi. Jika tidak cocok, sudo menolak untuk menjalankan aplikasi. Meskipun sulit untuk mempertahankan informasi ini dalam konfigurasi Anda—tidak ada alat otomatis untuk tujuan ini—digest ini dapat memberi Anda lapisan perlindungan tambahan.

Rekaman sesi

Perekaman sesi juga merupakan fitur sudo yang kurang dikenal . Setelah demo saya, banyak orang meninggalkan pembicaraan saya dengan rencana untuk mengimplementasikannya pada infrastruktur mereka. Mengapa? Karena dengan perekaman sesi, Anda tidak hanya melihat nama perintah, tetapi juga semua yang terjadi di terminal. Anda dapat melihat apa yang dilakukan admin Anda meskipun mereka memiliki akses shell dan log hanya menunjukkan bash itu dimulai.

Ada satu batasan, saat ini. Rekaman disimpan secara lokal, sehingga dengan izin yang cukup, pengguna dapat menghapus jejaknya. Nantikan fitur yang akan datang.

Plugin

Dimulai dengan versi 1.8, sudo diubah menjadi arsitektur modular berbasis plugin. Dengan sebagian besar fitur yang diimplementasikan sebagai plugin, Anda dapat dengan mudah mengganti atau memperluas fungsionalitas sudo dengan menulis sendiri. Ada plugin open source dan komersial yang sudah tersedia untuk sudo .

Dalam ceramah saya, saya mendemonstrasikan sudo_pair plugin, yang tersedia di GitHub. Plugin ini dikembangkan di Rust, artinya tidak mudah untuk dikompilasi, dan bahkan lebih sulit untuk mendistribusikan hasilnya. Di sisi lain, plugin menyediakan fungsionalitas yang menarik, membutuhkan admin kedua untuk menyetujui (atau menolak) menjalankan perintah melalui sudo . Bukan hanya itu, tetapi sesi dapat diikuti di layar dan dihentikan jika ada aktivitas yang mencurigakan.

Dalam demo yang saya lakukan selama pembicaraan baru-baru ini di konferensi All Things Open, saya memiliki yang terkenal:

czanik@linux-mewy:~> sudo  rm -fr /

perintah yang ditampilkan di layar. Semua orang menahan napas untuk melihat apakah laptop saya hancur, tetapi laptop itu selamat.

Log

Seperti yang telah saya sebutkan di awal, pencatatan dan peringatan adalah bagian penting dari sudo . Jika Anda tidak memeriksa sudo . Anda log secara teratur, tidak ada gunanya menggunakan sudo . Alat ini memperingatkan melalui email tentang peristiwa yang ditentukan dalam konfigurasi dan mencatat semua peristiwa ke syslog . Log debug dapat diaktifkan dan digunakan untuk men-debug aturan atau melaporkan bug.

Peringatan

Peringatan email agak kuno sekarang, tetapi jika Anda menggunakan syslog-ng untuk mengumpulkan pesan log Anda, sudo . Anda pesan log secara otomatis diuraikan. Anda dapat dengan mudah membuat lansiran khusus dan mengirimkannya ke berbagai tujuan, termasuk Slack, Telegram, Splunk, atau Elasticsearch. Anda dapat mempelajari lebih lanjut tentang fitur ini dari blog saya di syslong-ng.com.

Konfigurasi

Kami berbicara banyak tentang sudo fitur dan bahkan melihat beberapa baris konfigurasi. Sekarang, mari kita lihat lebih dekat bagaimana sudo dikonfigurasi. Konfigurasi itu sendiri tersedia di /etc/sudoers , yang merupakan file teks sederhana. Namun, tidak disarankan untuk mengedit file ini secara langsung. Sebagai gantinya, gunakan visudo , karena alat ini juga melakukan pemeriksaan sintaks. Jika Anda tidak suka vi , Anda dapat mengubah editor mana yang akan digunakan dengan mengarahkan EDITOR variabel lingkungan sesuai pilihan Anda.

Sebelum Anda mulai mengedit sudo konfigurasi, pastikan Anda mengetahui kata sandi root. (Ya, bahkan di Ubuntu, di mana root tidak memiliki kata sandi secara default.) Sementara visudo memeriksa sintaks, mudah untuk membuat konfigurasi sintaksis yang benar yang mengunci Anda keluar dari sistem Anda.

Saat Anda memiliki kata sandi root untuk keadaan darurat, Anda dapat mulai mengedit konfigurasi Anda. Tentang sudoers file, ada satu hal penting untuk diingat:File ini dibaca dari atas ke bawah, dan pengaturan terakhir menang. Apa arti fakta ini bagi Anda adalah bahwa Anda harus memulai dengan pengaturan umum dan menempatkan pengecualian di akhir, jika tidak, pengecualian akan ditimpa oleh pengaturan umum.

Anda dapat menemukan sudoers simple sederhana file di bawah ini, berdasarkan yang ada di CentOS, dan tambahkan beberapa baris yang telah kita bahas sebelumnya:

Defaults !visiblepw
Defaults always_set_home
Defaults match_group_by_gid
Defaults always_query_group_plugin
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
Defaults:%wheel insults
Defaults !insults
Defaults log_output

File ini dimulai dengan mengubah sejumlah default. Kemudian muncul aturan default yang biasa:root pengguna dan anggota roda grup memiliki izin penuh atas mesin. Selanjutnya, kami mengaktifkan penghinaan untuk roda grup, tetapi nonaktifkan untuk semua orang. Baris terakhir memungkinkan perekaman sesi.

Konfigurasi di atas secara sintaksis benar, tetapi dapatkah Anda menemukan kesalahan logisnya? Ya, ada satu:Penghinaan dinonaktifkan untuk semua orang sejak pengaturan umum terakhir menggantikan pengaturan sebelumnya yang lebih spesifik. Setelah Anda mengganti dua baris, penyiapan berfungsi seperti yang diharapkan:Anggota roda grup menerima pesan lucu, tetapi pengguna lainnya tidak menerimanya.

Manajemen konfigurasi

Setelah Anda harus mempertahankan sudoers file di beberapa mesin, kemungkinan besar Anda ingin mengelola konfigurasi Anda secara terpusat. Ada dua kemungkinan sumber terbuka utama di sini. Keduanya memiliki kelebihan dan kekurangan.

Anda dapat menggunakan salah satu aplikasi manajemen konfigurasi yang juga Anda gunakan untuk mengonfigurasi infrastruktur lainnya. Red Hat Ansible, Puppet, dan Chef semuanya memiliki modul untuk mengonfigurasi sudo . Masalah dengan pendekatan ini adalah memperbarui konfigurasi jauh dari waktu nyata. Selain itu, pengguna masih dapat mengedit sudoers file secara lokal dan ubah pengaturan.

sudo alat juga dapat menyimpan konfigurasinya di LDAP. Dalam hal ini, perubahan konfigurasi dilakukan secara real-time dan pengguna tidak dapat mengacaukan sudoers mengajukan. Di sisi lain, metode ini juga memiliki keterbatasan. Misalnya, Anda tidak dapat menggunakan alias atau menggunakan sudo saat server LDAP tidak tersedia.

Fitur baru

Ada versi baru sudo tepat di tikungan. Versi 1.9 akan menyertakan banyak fitur baru yang menarik. Berikut adalah fitur terencana yang paling penting:

  • Layanan perekaman untuk mengumpulkan rekaman sesi secara terpusat, yang menawarkan banyak keuntungan dibandingkan penyimpanan lokal:
    • Lebih nyaman mencari di satu tempat.
    • Perekaman tetap tersedia meskipun mesin pengirim mati.
    • Rekaman tidak dapat dihapus oleh seseorang yang ingin menghapus jejaknya.
  • Audit plugin tidak menambahkan fitur baru ke sudoers , melainkan menyediakan API untuk plugin agar dapat dengan mudah mengakses segala jenis sudo log. Plugin ini memungkinkan pembuatan log khusus dari sudo acara menggunakan plugin.
  • Persetujuan plugin memungkinkan persetujuan sesi tanpa menggunakan plugin pihak ketiga.
  • Dan favorit pribadi saya:Dukungan Python untuk plugin, yang memungkinkan Anda memperluas sudo dengan mudah menggunakan kode Python alih-alih mengkodekan secara native di C.

Kesimpulan

Saya harap artikel ini membuktikan kepada Anda bahwa sudo lebih dari sekadar awalan sederhana. Ada banyak kemungkinan untuk menyempurnakan izin pada sistem Anda. Anda tidak bisa hanya menyempurnakan izin, tetapi juga meningkatkan keamanan dengan memeriksa intisari. Rekaman sesi memungkinkan Anda untuk memeriksa apa yang terjadi pada sistem Anda. Anda juga dapat memperluas fungsionalitas sudo menggunakan plugin, baik menggunakan sesuatu yang sudah tersedia atau menulis sendiri. Terakhir, dengan daftar fitur yang akan datang, Anda dapat melihatnya meskipun sudo berumur puluhan tahun, ini adalah proyek hidup yang terus berkembang.

Jika Anda ingin mempelajari lebih lanjut tentang sudo , berikut beberapa sumbernya:

  • sudo situs web

  • sudo blog

  • Ikuti kami di Twitter


Linux
  1. 30 hal yang tidak Anda ketahui tentang kernel Linux

  2. Apa yang perlu diketahui sysadmin tentang menggunakan Bash

  3. Apa Itu VPN? Semua yang Perlu Anda Ketahui Tentang VPN

  1. Firewall Linux:Apa yang perlu Anda ketahui tentang iptables dan firewalld

  2. Apa Itu Hosting VPS? Yang Perlu Anda Ketahui Tentang Server Pribadi Virtual

  3. Yang Perlu Diketahui Tentang Debi a Volume Server Linux

  1. Semua yang ingin Anda ketahui tentang Zorin OS 12

  2. Perintah Nginx Yang Harus Anda Ketahui

  3. 30 Fakta Menakjubkan Tentang Linux yang Harus Anda Ketahui