16 poin oleh GN⁺ 2024-05-01 | 1 komentar | Bagikan ke WhatsApp

run0: alat pengganti sudo dari systemd

  • Alat baru yang disertakan dalam v256 (sebenarnya hanya systemd-run yang di-symlink)
  • Bekerja mirip sudo, tetapi bukan SUID
  • Meminta service manager untuk memanggil perintah atau shell dengan UID pengguna target
    • Memanggil perintah target dalam konteks eksekusi terisolasi yang baru di-fork dari PID 1, tanpa mewarisi konteks dari klien
  • run0 tidak mengimplementasikan bahasa konfigurasi sendiri, dan menggunakan polkit untuk otorisasi.
  • Saat eskalasi hak akses, latar terminal diubah menjadi nuansa merah untuk memberi tahu bahwa sistem sedang berjalan dengan hak istimewa. Pada judul jendela juga ditampilkan titik merah yang menandakan status eskalasi hak akses.
  • Mendukung switch --property= milik systemd-run, sehingga pengaturan service yang diinginkan dapat ditentukan untuk perintah/sesi istimewa yang dipanggil.

Masalah sudo

  • sudo adalah biner SUID yang relatif besar, yakni kode istimewa yang dapat dipanggil pengguna non-privileged dari konteks mereka sendiri.
  • Memiliki attack surface yang besar karena bahasa konfigurasi yang kompleks, plugin yang bisa dimuat (LDAP, dll.), pencocokan nama host, dan sebagainya.
  • Fakta bahwa ia adalah biner SUID adalah masalah terbesarnya. Ia dipanggil oleh kode non-privileged dan mewarisi konteks eksekusi yang dikendalikan oleh kode non-privileged tersebut (variabel lingkungan, atribut penjadwalan proses, alokasi cgroup, konteks keamanan, file descriptor yang diteruskan, dll.). Biner SUID harus membersihkan hal-hal ini dengan sangat hati-hati, tetapi sering kali gagal melakukannya dengan baik.

Lainnya

  • Dengan run0, bukan hanya shell, tetapi perintah lain juga bisa dijalankan dengan hak root. Saat program berakhir, warna terminal kembali seperti semula.
  • Perubahan warna latar otomatis bisa terasa mengganggu, tetapi dapat diubah atau dinonaktifkan dengan switch --background=.
  • Tampaknya juga memungkinkan untuk sepenuhnya mengganti sudo dengan run0, tetapi tiap distribusi mungkin punya preferensi berbeda.
  • Pendekatan plugin sudo seperti dukungan LDAP memiliki banyak masalah. polkit dapat diperluas dengan cara yang dikelola secara aman di systemd.
  • Apakah skrip bash dijalankan lewat run0 dapat diperiksa melalui variabel lingkungan SUDO_xxx yang kompatibel dengan sudo.

Opini GN⁺

  • Menarik bahwa run0 diajukan sebagai alternatif untuk sudo yang sering digunakan. Tampaknya ia mewarisi kelebihan sudo sambil menghindari risiko SUID.
  • Memberi tahu status eskalasi hak istimewa secara visual dengan jelas tampaknya dapat membantu mengurangi kerusakan akibat kesalahan. Mengubah warna latar terminal mungkin terasa mengganggu, tetapi karena bisa diatur lewat opsi, sepertinya bukan masalah besar.
  • Pengaturan otorisasi melalui polkit mungkin kurang fleksibel dibanding sudo, tetapi justru bisa menjadi lebih sederhana dan mengurangi attack surface. Dokumentasi contoh konfigurasi polkit tampaknya akan sangat penting.
  • Untuk migrasi skrip lama dan hal lain yang bergantung pada sudo, sudo tampaknya masih perlu disediakan bersama untuk sementara waktu. Namun, untuk lingkungan baru, sebaiknya sejak awal menggunakan run0.
  • Dalam jangka panjang, hadirnya run0 diharapkan menjadi momentum untuk berani menghapus SUID dan beralih ke arsitektur yang memusatkan pengelolaan hak sistem pada service sistem. Ini tampak sebagai arah yang diinginkan dari sisi keamanan dan ketangguhan sistem.

1 komentar

 
GN⁺ 2024-05-01
Komentar Hacker News
  • Tidak seperti sudo, run0 tidak mewarisi konteks apa pun dari klien dan memanggil perintah target dalam konteks exec terisolasi yang baru di-fork dari PID 1. Ini tidak cocok dengan kasus penggunaan umum perintah shell, sehingga dalam praktiknya akan menjadi sumber masalah dan sulit diadopsi secara luas.
  • Jika run0 digunakan secara luas, kemungkinan akan ditambahkan flag agar berperilaku seperti sudo, dan orang-orang akan selalu memakai flag itu. Saat hal ini menimbulkan masalah, proyek systemd mungkin akan mencoba menghapus sudo.
  • run0 mengambil pendekatan yang berbeda dari sudo dengan memiliki batas IPC yang ketat antar level hak akses. Bagi orang-orang yang ingin menggunakan systemd, ini bisa menjadi cara yang baik.
  • sudo sebagian besar dikelola oleh satu orang.
  • Dalam banyak hal, perilaku run0 lebih mirip ssh daripada sudo. Alat serupa dapat diimplementasikan dengan membuat koneksi SSH ke localhost.
  • Ide serupa pernah diuji pada klon BSD eksperimental di Berkeley pada pertengahan 1980-an, tetapi ditolak karena kompleksitas meneruskan semuanya melalui pipe. Sebagai gantinya, pemeriksaan lingkungan yang diwariskan diperketat.
  • Ada pertanyaan seputar logging, variabel lingkungan yang diteruskan, penanganan sinyal, dan alternatif pengganti sudoedit pada run0.
  • Selain run0, ada juga implementasi sudo yang ditulis dalam Rust, aman terhadap memori, dan memiliki lebih sedikit bug.
  • Belakangan ini sering kali hanya ada satu pengguna pada satu mesin fisik, sehingga sistem hak akses Unix perlu disederhanakan.
  • Mengubah warna latar terminal menjadi merah saat eskalasi hak akses bukanlah bagian yang penting.