Sudo vs Doas, Mana yang Lebih Baik?

Sabtu, 10 Oktober 2020

Seperti yang kita ketahui, sudo adalah program standar di sistem operasi unix-like untuk mengeksekusi perintah/program sebagai pengguna lain (dalam hal ini “superuser” sebagai defaultnya). Pada awalnya sudo merupakan singkatan dari “superuser do” karena sudo pada versi awal-awalnya hanya didesain untuk menjalankan program sebagai superuser. 

Namun pada versi-versi berikutnya ditambahkan dukungan untuk menjalankan program sebagai user lain. Oleh karena itu pada versi yang sekarang ini, sudo dikembangkan menjadi “substitute user do”. Default konfigurasi berada pada file /etc/sudoers, dan hanya boleh dikonfigurasi dari perintah visudo.


Untuk menggunakan text editor selain vi misalnya nano, perlu menambahkan EDITOR=nano sebelum visudo. Meskipun biasa menggunakan sudo, akan tetapi tidak ada salahnya mencoba salah satu alternatifnya yaitu doas yang lebih ringan serta aman. Mengingat sudo pernah terdapat celah eksploitasi.

Sama seperti sudo, doas adalah program yang dikembangkan oleh Ted Unangst untuk sistem operasi OpenBSD yang digunakan untuk mengeksekusi perintah/program sebagai pengguna lain. Saat sebagai “superuser”, kita dengan mudah dapat mengkonfigurasinya untuk memberikan peraturan dan hak-hak yang lebih spesifik untuk mengeksekusi program. Default konfigurasi berada pada file /etc/doas.conf.

Dilihat dari ukuran paket

Untuk melihat besar ukuran paket, dapat menggunakan beberapa kombinasi perintah.

Debian & Ubuntu
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -n 10 | grep "nama_paket" 
Arch Linux
LC_ALL=C pacman -Qi | awk '/^Name/{name=$3} /^Installed Size/{print $4$5, name}' | sort -h | grep "nama_paket"

nama_paket dalam perintah diatas diisi sudo dan doas (jika sudah ter-install) secara bergantian. 

Lihat! Sudo lebih bloat daripada doas. Selisihnya adalah 3.87MiB.

Dilihat dari file konfigurasi

Sudo
/etc/sudoers

## sudoers file.
##
## This file MUST be edited with the 'visudo' command as root.
## Failure to use 'visudo' may result in syntax or file permission errors
## that prevent sudo from running.
##
## See the sudoers man page for the details on how to write a sudoers file.
##


##
## Host alias specification
##
## Groups of machines. These may include host names (optionally with wildcards),
## IP addresses, network numbers or netgroups.
# Host_Alias WEBSERVERS = www1, www2, www3


##
## User alias specification
##
## Groups of users. These may consist of user names, uids, Unix groups,
## or netgroups.
# User_Alias ADMINS = millert, dowdy, mikef


##
## Cmnd alias specification
##
## Groups of commands. Often used to group related commands together.
# Cmnd_Alias PROCESSES = /usr/bin/nice, /bin/kill, /usr/bin/renice, \
# /usr/bin/pkill, /usr/bin/top
# Cmnd_Alias REBOOT = /sbin/halt, /sbin/reboot, /sbin/poweroff


##
## Defaults specification
##
## You may wish to keep some of the following environment variables
## when running commands via sudo.
##
## Locale settings
# Defaults env_keep += "LANG LANGUAGE LINGUAS LC_* _XKB_CHARSET"
##
## Run X applications through sudo; HOME is used to find the
## .Xauthority file. Note that other programs use HOME to find
## configuration files and this may lead to privilege escalation!
# Defaults env_keep += "HOME"
##
## X11 resource path settings
# Defaults env_keep += "XAPPLRESDIR XFILESEARCHPATH XUSERFILESEARCHPATH"
##
## Desktop path settings
# Defaults env_keep += "QTDIR KDEDIR"
##
## Allow sudo-run commands to inherit the callers' ConsoleKit session
# Defaults env_keep += "XDG_SESSION_COOKIE"
##
## Uncomment to enable special input methods. Care should be taken as
## this may allow users to subvert the command being run via sudo.
# Defaults env_keep += "XMODIFIERS GTK_IM_MODULE QT_IM_MODULE QT_IM_SWITCHER"
##
## Uncomment to use a hard-coded PATH instead of the user's to find commands
# Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
##
## Uncomment to send mail if the user does not enter the correct password.
# Defaults mail_badpass
##
## Uncomment to enable logging of a command's output, except for
## sudoreplay and reboot. Use sudoreplay to play back logged sessions.
# Defaults log_output
# Defaults!/usr/bin/sudoreplay !log_output
# Defaults!/usr/local/bin/sudoreplay !log_output
# Defaults!REBOOT !log_output


##
## Runas alias specification
##


##
## User privilege specification
##
root ALL=(ALL) ALL


## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL


## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL


## Uncomment to allow members of group sudo to execute any command
# %sudo ALL=(ALL) ALL


## Uncomment to allow any user to run sudo if they know the password
## of the user they are running the command as (root by default).
# Defaults targetpw # Ask for the password of the target user
# ALL ALL=(ALL) ALL # WARNING: only use this together with 'Defaults targetpw'


## Read drop-in files from /etc/sudoers.d
@includedir /etc/sudoers.d

Doas
/etc/doas.conf

permit persist keepenv :wheel
permit nopass keepenv root

Dalam konfigurasi diatas, sudo lebih memuat banyak fitur yang sebagian besar tidak dibutuhkan untuk pengguna sistem operasi linux. Ketika kamu pernah melakukan instalasi Arch Linux pasti pernah mengkonfigurasi sudo. Iya.. contohnya memasukkan user kedalam grup “wheel”, lalu menginjinkan anggota grup tersebut agar dapat mengeksekusi program apapun pada baris:
## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL
Berbeda dengan sudo, doas lebih menarik karena konfigurasinya yang sederhana serta mudah dipahami.

Beralih dari sudo ke doas

Sebelum bermigrasi ke doas, saya peringatkan terlebih dahulu.
Penulis tidak bertanggung jawab jika terjadi masalah pada sistem operasi linux yang kalian gunakan. Namun saya sendiri sudah menggunakannya di Arch Linux dan baik-baik saja.

Untuk instalasi doas di sistem operasi linux menggunakan opendoas. Yaitu versi doas yang di-porting (unofficial).

Debian & Ubuntu
git clone https://github.com/Duncaen/OpenDoas.git && cd OpenDoas/
./configure
make
sudo make install
Arch Linux
sudo pacman -S opendoas
Ketika pertama kalinya install doas, perlu membuat file konfigurasinya terlebih dahulu karena secara default tidak otomatis terbuat. Buat dan edit file konfigurasi menggunakan text editor misalnya nano.
sudo nano /etc/doas.conf
Jika user termasuk dalam grup “wheel” maka gunakanlah wheel atau grup “users”. Gunakan perintah id.
Saya telah mengkonfigurasi agar kerjanya mirip seperti sudo. Untuk grup ditambahkan simbol ( : ) sebelum grup.
permit persist keepenv :wheel
permit nopass keepenv root
Penjelasan peraturan konfigurasi diatas sebagai berikut.
permit|deny [options] identity [as target] [cmd command [args …]]
  • permit / deny
  • Aksi untuk memberikan ijin atau menolak user dan group mengeksekusi semua perintah maupun perintah yang lebih spesifik.
    Misalnya menolak grup wheel untuk mengeksekusi program nano sebagai superuser.
    deny :wheel as root cmd nano
options
  • persist
  • Setelah pengguna berhasil diautentikasi, doas tidak akan menanyakan password lagi untuk beberapa saat.
  • keepenv
  • Ini bertujuan ketika mengeksekusi perintah/program sebagai pengguna lain (maupun superuser) akan membawa environment variable dari pengguna yang digunakan dan tidak membuat envar baru.
  • nopass
  • Doas tidak akan menanyakan password ketika mengeksekusi perintah/program sebagai pengguna lain.

Sebenarnya untuk baris kedua dari konfigurasi doas diatas tidak diperlukan karena ketika sebagai superuser sudah mendapatkan hak-hak sepenuhnya untuk admistrasi sistem. Hanya saja, saya menyamakan agar seperti sudo yang dapat menjalankan perintah sudo sebagai superuser.

Selengkapnya mengenai peraturan konfigurasi doas di sumber original atau disini.

Ketika berhasil menggunakan doas, akan lebih baik dan efektif untuk uninstall sudo.

Debian & Ubuntu
doas dpkg -P --force-depends sudo
Arch Linux
doas pacman -Rdd sudo 
Sebagai pengguna Arch Linux, menjalankan pacman wrapper yaitu yay masih bergantung pada sudo. Untuk merubahnya menjadi doas lakukan seperti berikut.
yay --sudo doas --sudoflags -- --save
https://github.com/Jguer/yay/issues/1194

Bagaimana cukup mudah kan?

Cukup itu yang dapat saya berikan.
Menurut penulis, keduanya sama baiknya.

Semoga bermanfaat bagi teman-teman semua.
Terima Kasih.

Artikel Terkait Arch Linux ,Debian ,GNU/Linux ,Ubuntu