GNU/Linux >> Belajar Linux >  >> Linux

5 fitur sudo baru yang perlu diketahui sysadmin pada tahun 2022

Saat Anda ingin memberikan akses administratif ke beberapa pengguna Anda sambil mengontrol dan memeriksa apa yang mereka lakukan di sistem Anda, Anda menggunakan sudo . Namun, bahkan dengan sudo , ada beberapa masalah yang tidak terlihat—pikirkan saja untuk memberikan akses shell. sudo Recent terbaru merilis fitur tambahan yang memungkinkan Anda melihat masalah ini dan bahkan mengontrolnya. Misalnya, Anda dapat mengaktifkan pesan log yang lebih detail dan lebih mudah diproses serta mencatat setiap perintah yang dijalankan dalam sesi shell.

Beberapa fitur ini benar-benar baru. Beberapa dari mereka membangun fitur yang diperkenalkan di versi 1.9.0 atau bahkan lebih awal. Misalnya, sudo bisa merekam semua yang terjadi di terminal, bahkan di versi 1.8. Namun, sistem menyimpan rekaman ini secara lokal, dan mudah dihapus, terutama rekaman yang paling berguna:sesi Shell. Versi 1.9.0 menambahkan koleksi rekaman sesi pusat, sehingga rekaman tidak dapat dihapus oleh pengguna lokal, dan versi terbaru menambahkan relai, membuat koleksi menjadi lebih kuat.

Jika Anda hanya mengetahui dasar-dasar sudo atau hanya menggunakan versi 1.8 sebelumnya, saya sarankan membaca artikel saya sebelumnya.

1. Logging berformat JSON

Fitur baru pertama yang ingin saya perkenalkan adalah logging berformat JSON. Saya seorang fanatik logging (saya mulai mengerjakan syslog-ng proyek dua belas tahun yang lalu), dan fitur ini adalah yang pertama diperkenalkan sejak artikel Opensource.com saya. Saat diaktifkan, sudo mencatat lebih banyak informasi dan melakukannya dengan cara yang lebih mudah untuk diurai.

syslog tradisional pesan oleh sudo pendek dan hanya berisi jumlah minimum informasi yang diperlukan. Ini karena kendala oleh syslog lama implementasi:Pesan yang berukuran lebih dari 1k dibuang atau dipotong:

Jan 28 13:56:27 localhost.localdomain sudo[10419]: czanik : TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash

syslog yang lebih baru implementasi dapat menangani ukuran pesan yang jauh lebih besar. syslog-ng menerima pesan log berukuran hingga 64k secara default (tetapi tentu saja, dapat lebih kecil atau lebih besar, tergantung pada konfigurasi sebenarnya).

Acara yang sama berisi lebih banyak informasi jika login dalam format JSON. Lebih banyak tidak berarti lebih sulit untuk ditangani:Pesan berformat JSON lebih mudah diuraikan oleh banyak aplikasi perangkat lunak manajemen log. Ini contohnya:

Jan 28 13:58:20 localhost.localdomain sudo[10518]: @cee:{"sudo":{"accept":{"uuid":"616bc9efcf-b239-469d-60ee-deb5af8ce6","server_time":{"seconds":1643374700,"nanoseconds":222446715,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submit_time":{"seconds":1643374700,"nanoseconds":209935349,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submituser":"czanik","command":"/bin/bash","runuser":"root","runcwd":"/home/czanik","ttyname":"/dev/pts/0","submithost":"localhost.localdomain","submitcwd":"/home/czanik","runuid":0,"columns":118,"lines":60,"runargv":["/bin/bash"],"runenv":["LANG=en_US.UTF-8","HOSTNAME=localhost.localdomain","SHELL=/bin/bash","TERM=xterm-256color","PATH=/home/czanik/.local/bin:/home/czanik/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin","MAIL=/var/mail/root","LOGNAME=root","USER=root","HOME=/root","SUDO_COMMAND=/bin/bash","SUDO_USER=czanik","SUDO_UID=1000","SUDO_GID=1000"]}}}

Anda dapat mengaktifkan pesan log berformat JSON di sudoers berkas:

Defaults log_format=json

Anda dapat mempelajari lebih lanjut tentang cara bekerja dengan pesan log berformat JSON dari sudo dari blog syslog-ng saya.

2. Mengumpulkan log secara terpusat menggunakan sudo_logsrvd

Fitur lain yang terkait dengan pencatatan di 1.9.4 adalah mengumpulkan semua sudo pesan log (termasuk kegagalan) menggunakan sudo_logsrvd . Sebelumnya, sistem hanya mencatat sesi yang berhasil ketika sudo_logsrvd benar-benar membuat rekaman. Logging masih dilakukan melalui syslog secara default pada akhirnya.

Mengapa ini penting? Pertama-tama, Anda dapat mengumpulkan apa pun yang terkait dengan sudo di satu tempat:Baik rekaman sesi dan semua pesan log yang sesuai. Kedua, itu juga dapat menjamin logging yang tepat dari semua sudo -acara terkait, sebagai sudo dapat menolak untuk menjalankan perintah jika sudo_logsrvd tidak dapat diakses.

Anda dapat mengaktifkan logging ke sudo_logsrvd dengan pengaturan berikut di sudoers file (tentu saja, ganti alamat IP):

Defaults log_servers=172.16.167.150

Jika Anda menginginkan pesan log berformat JSON, Anda memerlukan setelan berikut di [eventlog] bagian sudo_logsrvd konfigurasi:

log_format = json

Jika tidak, sudo_logsrvd menggunakan sudo traditional tradisional format log dengan modifikasi sederhana:Ini juga mencakup informasi tentang host asal log:

Nov 18 12:40:16 centos8splunk.localdomain sudo[21028]:   czanik : 3 incorrect password attempts ; HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash
Nov 18 12:40:23 centos8splunk.localdomain sudo[21028]:   czanik : HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; TSID=00000A ; COMMAND=/bin/bash
Nov 18 12:40:30 centos8splunk.localdomain sudo[21028]:   czanik : command rejected by I/O plugin ; HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash

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

3. Relai

Ketika mereka pertama kali memperkenalkan sudo_logsrvd (versi 1.9.0) untuk pengumpulan rekaman sesi pusat, klien hanya dapat mengirim rekaman secara langsung. Versi 1.9.7 memperkenalkan konsep relai. Dengan relai, alih-alih mengirim rekaman secara langsung, Anda dapat mengirim rekaman ke berbagai tingkat host perantara, yang menyusun jaringan Anda.

Mengapa ini penting? Pertama-tama, relai memungkinkan untuk mengumpulkan rekaman sesi bahkan jika host pusat tidak tersedia karena masalah jaringan atau pemeliharaan. Secara default, sudo menolak untuk dijalankan ketika tidak dapat mengirim rekaman, jadi relai dapat memastikan bahwa Anda dapat menggunakan sudo sepanjang waktu.

Kedua, ini juga memungkinkan Anda untuk memiliki kontrol yang lebih ketat di jaringan Anda:Daripada membuka firewall untuk semua host ke sudo_logsrvd pusat , Anda hanya perlu mengizinkan relai Anda lewat.

Terakhir, ini memungkinkan Anda untuk mengumpulkan rekaman sesi dari jaringan tanpa akses internet langsung, seperti jaringan pribadi AWS, tempat Anda dapat menginstal sudo_logsrvd dalam mode relai pada host gateway.

Saat Anda menggunakan relai, konfigurasikan sudo klien dan sudo_logsrvd pusat tetap sama. Pada host relai, tambahkan baris berikut ke [relay] bagian sudo_logsrvd.conf :

relay_host = 172.16.167.161

Jika koneksi jaringan ke server pusat diketahui bermasalah, Anda dapat mengonfigurasi relai untuk menyimpan rekaman sebelum meneruskannya:

store_first = true

4. Mencatat subperintah

Pernahkah Anda ingin tahu apa yang terjadi dalam sesi shell yang dimulai melalui sudo ? Ya, rekaman sesi ada di sana, tetapi menonton rekaman berjam-jam hanya untuk melihat beberapa perintah dieksekusi membosankan dan membuang-buang waktu. Untungnya, versi 1.9.8 memperkenalkan sub-perintah logging. Sekarang cukup memeriksa pesan log Anda secara teratur dan menonton rekaman hanya jika terjadi sesuatu yang mencurigakan.

Anda bahkan tidak memerlukan aturan untuk mengizinkan akses shell untuk memiliki akses shell, cukup akses ke editor. Sebagian besar editor dapat menjalankan perintah eksternal. Editor favorit saya adalah JOE, dan inilah yang dapat Anda lihat ketika saya memulainya melalui sudo :

Aug 30 13:03:00 czplaptop sudo[10150]:   czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/joe

Tidak ada yang menarik, hanya editor—bahkan jika saya menelurkan shell dan menghapus beberapa file dan partisi dari shell itu. Sekarang mari kita lihat apa yang terjadi ketika Anda mengaktifkan sub-perintah logging:

Aug 30 13:13:14 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/joe
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/sh -c /bin/bash
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/readlink /proc/10889/exe
[...]
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/sed -r s@/*:|([^\\]):@\1\n@g;H;x;s@/\n@\n@
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/tty
Aug 30 13:13:42 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/id
Aug 30 13:13:56 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/ls -A -N --color=none -T 0 /usr/share/syslog-ng/include/scl/

Saya menghilangkan lusinan baris untuk menghemat ruang, tetapi Anda masih dapat melihat bahwa saya memulai shell, dan perintah dijalankan oleh bash_profile juga tersedia di log.

Anda dapat mengaktifkan logging subcommands di sudoers file menggunakan pengaturan berikut:

Defaults log_subcmds

Dalam sudo tradisional log, Anda dapat melihat dari sudo id proses bahwa log ini berasal dari sudo yang sama sidang. Jika Anda mengaktifkan logging berformat JSON, seperti yang ditunjukkan sebelumnya, sudo mencatat lebih banyak informasi dalam log, sehingga lebih mudah untuk menganalisisnya.

5. Mencegat sub-perintah

Sub-perintah logging menghapus sebagian besar area masalah yang tersembunyi dari sudo , tetapi ada situasi ketika Anda tidak ingin hanya menonton apa yang terjadi tetapi juga mengontrol aliran peristiwa. Misalnya, Anda perlu memberikan akses shell ke pengguna tetapi tetap ingin mencegah mereka menjalankan perintah tertentu. Intersepsi sangat ideal dalam kasus seperti itu. Tentu saja ada beberapa batasan, seperti Anda tidak dapat membatasi perintah bawaan shell.

Katakanlah who perintah itu berbahaya. Anda dapat mengaktifkan intersepsi dalam dua langkah:Yang pertama mengaktifkannya, yang kedua mengonfigurasinya. Dalam hal ini, pengguna saya tidak diizinkan untuk menjalankan who :

Defaults intercept
czanik ALL = (ALL) ALL, !/usr/bin/who

Inilah yang terjadi ketika saya memulai sesi shell root melalui sudo dan coba jalankan who :

$ sudo -s
# who
Sorry, user czanik is not allowed to execute '/usr/bin/who' as root on czplaptop.
bash: /usr/bin/who: Permission denied

Anda dapat dengan mudah menonaktifkan shell yang sedang berjalan sama sekali:

Defaults intercept
Cmnd_Alias SHELLS=/usr/bin/bash, /usr/bin/sh, /usr/bin/csh
czanik ALL = (ALL) ALL, !SHELLS

Namun, itu juga berarti bahwa Anda tidak dapat memulai sesi shell melalui sudo . Bukan hanya itu, tetapi Anda juga tidak dapat menjalankan perintah eksternal dari editor. Inilah yang terjadi ketika saya mencoba memulai ls perintah dari dalam vi :

$ sudo vi /etc/issue
Sorry, user czanik is not allowed to execute '/bin/bash -c /bin/ls' as root on czplaptop.
Cannot execute shell /bin/bash
Press ENTER or type command to continue

Apa selanjutnya?

Saya harap membaca artikel saya membuat Anda ingin mencoba fitur baru ini sendiri. Anda dapat menginstal sudo terbaru pada banyak distribusi Linux dan varian UNIX dari manajer paket Anda, atau gunakan penginstal biner yang tersedia di situs web Sudo.

Artikel ini hanya memberi Anda gambaran tentang kemungkinan baru. Jika Anda ingin mempelajari lebih lanjut tentang fitur ini, kunjungi situs web, yang menampung halaman manual, dan juga blog Sudo.


Linux
  1. Apa yang perlu diketahui sysadmin tentang menggunakan Bash

  2. Sysadmin asli tidak sudo

  3. 6 opsi untuk tcpdump yang perlu Anda ketahui

  1. Fitur Baru di Fedora 26

  2. Bagaimana Mengetahui apakah Pengguna memiliki Hak Sudo

  3. sudo -i tetapi pertahankan direktori kerja saat ini

  1. Fitur Baru di Ubuntu 17.04

  2. Linux Mint 19 – Tanggal Rilis, Fitur Baru &Lainnya

  3. Praktik Pengujian Penetrasi Terbaik yang Perlu Anda Ketahui