Perintah sudo Linux: hak akses, pengguna, dan sudoers

sudo adalah alat yang memungkinkan pengguna yang diizinkan oleh kebijakan keamanan untuk mengeksekusi perintah dengan hak istimewa pengguna lain. Jika pengguna target tidak ditentukan, biasanya dijalankan sebagai root, tetapi hak istimewa dan metode autentikasi yang sebenarnya ditentukan sesuai dengan kebijakan sudo sistem.

Ini berguna untuk melakukan tugas yang memerlukan hak istimewa administratif, seperti menginstal paket atau mengelola layanan, tetapi jika sebuah perintah dimasukkan dengan salah, hal itu dapat memengaruhi seluruh sistem. Sebelum mengeksekusi, sangat penting untuk memeriksa file dan opsi target serta memberikan hak istimewa yang diperlukan seminimal mungkin hanya untuk perintah yang dibutuhkan.

Apa itu perintah sudo?

sudo memungkinkan pengguna yang berwenang untuk menjalankan perintah sebagai superuser atau pengguna lain. Ini bukan sekadar alat untuk memberi semua pengguna hak istimewa administratif, tetapi sebuah struktur yang mengontrol berdasarkan kebijakan siapa yang dapat menjalankan perintah mana dengan hak pengguna apa di host mana.

Plugin kebijakan default adalah sudoers, dan biasanya menggunakan pengaturan dari /etc/sudoers dan /etc/sudoers.d/. Sistem membandingkan permintaan eksekusi dengan kebijakan dan, jika perlu, mengautentikasi pengguna sebelum mengeksekusi hanya perintah yang diizinkan.

Anda dapat memeriksa metode eksekusi secara rinci di halaman manual sudo resmi, dan sintaksis kebijakan di halaman manual sudoers resmi.

Sintaks Dasar dan Eksekusi Pertama

Sintaks umum berikut adalah pola; ganti placeholder dengan opsi dan perintah yang sesuai.

sudo [options] command [arguments...]

Contoh memperbarui daftar paket pada sistem Debian atau Ubuntu adalah sebagai berikut.

sudo apt update

Jika autentikasi diperlukan, biasanya akan meminta kata sandi dari pengguna yang sedang masuk. Beberapa implementasi dan pengaturan menyembunyikan input kata sandi, sementara sudo-rs default di Ubuntu 26.04 menampilkan umpan balik berupa tanda bintang. Perilaku tampilan tergantung pada penyedia dan kebijakan pwfeedback; hal ini sendiri tidak membedakan operasi normal dari kesalahan. Tergantung pada kebijakan sistem, mungkin diperlukan kata sandi pengguna target atau metode autentikasi lain.

Jika izin diberikan dan autentikasi berhasil, hanya proses apt update yang dijalankan dengan izin target. Seluruh shell saat ini tidak secara otomatis berubah menjadi shell administrator.

Opsi sudo yang Sering Digunakan

Opsi Fungsi Contoh penggunaan dan tindakan pencegahan
-u user Jalankan perintah sebagai pengguna yang ditentukan sudo -u postgres psql
-g group Jalankan perintah sebagai grup yang ditentukan Hanya grup yang diizinkan oleh kebijakan yang dapat digunakan
-l Periksa perintah yang diizinkan untuk pengguna saat ini Berguna untuk memeriksa izin sebelum eksekusi
-v Periksa atau perbarui informasi autentikasi Perbarui stempel waktu tanpa mengeksekusi perintah
-k Batalkan validitas cap waktu autentikasi saat ini Meminta autentikasi ulang jika kebijakan mengharuskannya; NOPASSWD tetap berlaku
-K Hapus sepenuhnya cap waktu otentikasi pengguna Penghapusan cap waktu lebih menyeluruh daripada -k
-i Eksekusi shell login pengguna target Digunakan untuk berbagai tugas administratif tetapi dengan cakupan yang lebih luas
-s Jalankan shell Periksa tujuan karena mungkin dipengaruhi oleh lingkungan pemanggil
-n Eksekusi non-interaktif Gagal tanpa bertanya jika kata sandi diperlukan
-H Permintaan untuk mengatur HOME ke direktori rumah pengguna target Beroperasi sesuai kebijakan dan tidak selalu diperlukan
-E Permintaan untuk mempertahankan variabel lingkungan pengguna Harus diizinkan oleh kebijakan dan digunakan dengan hati-hati demi keamanan
-e, sudoedit Ubah file yang memerlukan izin melalui alur penyuntingan yang aman sudoedit /etc/example.conf

Menjalankan sebagai pengguna yang berbeda

Tentukan pengguna target dengan -u

Jika pengguna target tidak ditentukan, biasanya digunakan root. Dengan menentukan -u, Anda dapat menjalankan sebagai pengguna lain yang diizinkan oleh kebijakan.

sudo -u postgres psql

Ini berguna saat Anda perlu mengeksekusi perintah dalam konteks izin file atau lingkungan akun layanan. Namun, beberapa akun layanan memiliki shell login yang terbatas, jadi pertama-tama periksa tujuan dan kebijakan akun tersebut.

Memeriksa pengguna eksekusi

Untuk dengan cepat memeriksa izin pengguna yang sebenarnya diberikan oleh kebijakan saat ini, Anda dapat menggunakan id.

sudo id
sudo -u postgres id

Output sebenarnya bergantung pada konfigurasi pengguna dan grup sistem. Untuk verifikasi sederhana, memeriksa perintah individual lebih fokus daripada membuka shell administrator.

Memeriksa izin yang diizinkan dan cache autentikasi

Periksa perintah yang dapat dijalankan dengan sudo -l

sudo -l menunjukkan pengaturan default dan perintah yang dapat dijalankan untuk pengguna saat ini. Anda bisa memeriksa terlebih dahulu sebelum mengubah pengaturan secara acak saat menemui kesalahan izin.

sudo -l

Administrator dapat memeriksa kebijakan pengguna lain dengan -U jika mereka memiliki hak istimewa, tetapi pengguna biasa biasanya hanya memeriksa izin mereka sendiri.

Perbarui autentikasi dengan sudo -v

sudo -v memeriksa atau memperbarui informasi autentikasi yang tersimpan tanpa mengeksekusi perintah. Ini dapat digunakan untuk menyiapkan status autentikasi sebelum memulai beberapa perintah administratif.

sudo -v

Waktu dan cakupan default dari cache autentikasi tergantung pada kebijakan sudoers. Tidak dimintai kata sandi untuk periode tertentu tidak berarti semua perintah diperbolehkan, dan setiap perintah tetap menjalani pemeriksaan kebijakan.

Bersihkan status autentikasi dengan sudo -k

Gunakan sudo -k setelah tugas administratif untuk membatalkan cap waktu saat ini. Jika kebijakan mewajibkan autentikasi, permintaan berikutnya memerlukan autentikasi ulang; aturan NOPASSWD tetap dapat berlaku.

sudo -k

-K sepenuhnya menghapus timestamp autentikasi pengguna. Periksa versi sudo yang terpasang dan kebijakan untuk perbedaan rinci.

Poin yang perlu diperhatikan dengan penggabungan perintah dan pipe

sudo hanya berlaku untuk perintah yang langsung mengikuti

Hanya apt update pertama dalam perintah berikut yang dijalankan dengan sudo. apt upgrade berikutnya dijalankan dengan izin pengguna saat ini.

sudo apt update && apt upgrade

Jika kedua perintah memerlukan hak administrator, cara yang paling jelas adalah menambahkan sudo di depan setiap perintah.

sudo apt update && sudo apt upgrade

Untuk memahami secara akurat kondisi eksekusi operator koneksi, Anda juga dapat merujuk ke panduan operator perintah Bash (bahasa Inggris).

Kedua sisi dari pipa adalah proses yang terpisah

Setiap perintah yang terhubung dengan pipa dijalankan secara terpisah. Dalam contoh di bawah, hanya perintah pertama yang dijalankan dengan hak target, dan grep dijalankan sebagai pengguna saat ini.

sudo some-command | grep 'pattern'

Perintah filter hanya-baca sering kali hanya memerlukan izin pengguna normal. Alih-alih memberikan izin tinggi ke seluruh pipeline, batasi hanya pada langkah-langkah yang benar-benar memerlukan izin tinggi.

Menjalankan seluruh shell memiliki cakupan yang luas

Anda dapat menjalankan beberapa perintah dalam shell dengan izin target seperti sudo sh -c 'command1 && command2', tetapi aturan pengutipannya menjadi kompleks dan cakupan izinnya luas. Untuk tugas sederhana, disarankan untuk menentukan sudo untuk setiap perintah karena bermanfaat untuk review dan pencatatan.

Mengapa Permission denied terjadi dalam pengalihan

Pengalihan output ditangani oleh shell saat ini

Contoh berikut hanya menjelaskan perilaku shell. Jangan jalankan terhadap file konfigurasi nyata: pengalihan dapat menimpa file jika shell memiliki izin. Perintah hanya menjalankan echo dengan hak istimewa administratif. Pengalihan > diproses oleh shell saat ini sebelum sudo dijalankan, jadi mungkin tidak dapat membuka file yang dilindungi.

sudo echo 'value' > /etc/example.conf

Hanya tingkatkan izin untuk penulisan yang diperlukan menggunakan tee

Untuk percobaan, gunakan file contoh yang terpisah dan jalur yang telah diverifikasi; perintah berikut menimpa isinya. Ketika perlu menulis baris pendek, Anda dapat mengirimkan input standar ke sudo tee.

printf '%s\n' 'value' | sudo tee /etc/example.conf > /dev/null

Untuk menambahkan ke file yang sudah ada, gunakan tee -a. Pastikan untuk memeriksa jalur target dan apakah akan menimpa sebelum menjalankannya.

printf '%s\n' 'value' | sudo tee -a /etc/example.conf > /dev/null

Edit file konfigurasi dengan sudoedit

Jika Anda perlu memodifikasi beberapa baris pengaturan, sudoedit lebih cocok. Ini memungkinkan Anda mengedit salinan sementara sebagai pengguna saat ini sesuai kebijakan, kemudian mencerminkan perubahan ke file asli.

sudoedit /etc/example.conf

Ini mengurangi cakupan hak istimewa dibandingkan menjalankan seluruh editor dengan hak istimewa administratif, tetapi pembatasan sebenarnya pada tautan simbolik dan direktori yang dapat ditulis tergantung pada versi sudo dan kebijakan.

Shell administratif: sudo -i dan sudo -s

Metode Perilaku khas Situasi yang sesuai
sudo command Jalankan satu perintah dengan hak istimewa pengguna target Direkomendasikan untuk sebagian besar tugas administrasi satu kali
sudo -i Jalankan shell yang meniru lingkungan login pengguna target Dapat digunakan untuk beberapa tugas administrasi; cakupannya lebih luas
sudo -s Jalankan shell yang ditentukan oleh shell atau lingkungan pengguna yang memanggil Pahami perbedaan lingkungan dan gunakan shell jika diperlukan

Di shell administrator, sudo tidak ditampilkan untuk setiap perintah berikutnya, sehingga sulit menilai dampak kesalahan. Untuk satu atau dua tugas, gunakan format sudo command daripada shell administrator, dan jika membuka shell, terus periksa prompt serta pengguna dan direktori kerja saat ini.

Ubah sudoers dengan visudo

Mengapa sebaiknya tidak mengeditnya langsung?

Jika ada kesalahan sintaks di /etc/sudoers, sudo sendiri mungkin tidak akan berfungsi. visudo mengunci file untuk mencegah pengeditan simultan dan memeriksa validitas dasar serta sintaks sebelum menyimpan.

sudo visudo

Anda dapat memeriksa prosedur pengeditan aman di halaman manual visudo resmi.

Menggunakan file sudoers.d terpisah

Untuk memisahkan aturan berdasarkan peran, Anda dapat membuat file terpisah di bawah /etc/sudoers.d/. Pertama, pastikan bahwa sudoers default di sistem Anda mencakup direktori ini, dan juga periksa aturan penamaan file.

sudo visudo -f /etc/sudoers.d/service-maintenance

Beberapa konfigurasi sudoers mungkin mengabaikan item dengan titik di nama file atau yang berakhiran dengan tilde, jadi lebih aman menggunakan nama sederhana dengan huruf, angka, dan tanda hubung.

Periksa seluruh sintaks setelah modifikasi

Untuk memeriksa sintaks dari sudoers dan file yang disertakan yang sudah ada, gunakan perintah berikut.

sudo visudo -c

Pemeriksaan yang berhasil tidak berarti desain izin aman. Disarankan untuk menjaga sesi administrator terpisah, menggunakan sudo -l sebagai pengguna target, menguji tindakan yang diizinkan/dilarang, dan kemudian akhiri sesi.

Struktur dasar aturan sudoers

Aturan sudoers secara konseptual menggabungkan item berikut.

user host=(runuser:rungroup) tag: command
Item Makna Hal-hal yang perlu diperiksa selama desain
Pengguna atau grup Subjek yang diterapkan oleh aturan Grup umumnya diwakili sebagai %groupname
Host Sistem tempat aturan berlaku Jangan memperluas cakupan host secara berlebihan dalam kebijakan pusat
Pengguna/grup yang mengeksekusi Akun tempat perintah akan dijalankan Tentukan hanya akun yang diperlukan daripada ALL
Tag Sesuaikan perilaku autentikasi, eksekusi, dan pencatatan Gunakan NOPASSWD dan fitur serupa secara terbatas setelah menilai risikonya
Perintah dan argumen Program yang dapat dijalankan dan argumen opsional yang diizinkan Persempit cakupan dengan jalur absolut dan argumen tetap

Berikut adalah contoh yang membatasi pengguna deploy hanya untuk melakukan restart dan pemeriksaan status layanan tertentu sebagai root. Ini hanya contoh: kebijakan lain juga dapat memberikan izin tambahan. Sebelum diterapkan, tinjau semua aturan dan apakah layanan atau perintah memungkinkan eksekusi lain atau modifikasi file.

deploy ALL=(root) /usr/bin/systemctl restart webapp.service, /usr/bin/systemctl is-active webapp.service

Karena jalur aktual dari berkas eksekusi dapat berbeda-beda tergantung sistem, periksa dengan perintah seperti command -v systemctl. Jika berkas eksekusi dalam skrip yang dapat dimodifikasi pengguna atau dalam direktori yang dapat ditulis oleh pengguna diizinkan dalam sudoers, pengguna dapat mengubah kontennya untuk menjalankan perintah sembarangan dengan hak istimewa yang ditingkatkan.

Rancang sudoers dengan prinsip hak istimewa paling sedikit

Hindari kebiasaan menggunakan ALL dan NOPASSWD

Aturan seperti ALL=(ALL) NOPASSWD: ALL secara efektif memberikan hak administratif luas tanpa pengawasan. Bahkan jika otomatisasi diperlukan, Anda harus merancangnya dengan akun khusus, berkas eksekusi dan argumen tetap, catatan (log), perlindungan rahasia, dan jalur pemanggilan.

Berhati-hatilah dengan program yang dapat keluar ke shell

Program yang dapat memanggil editor, pager, shell, menulis file sembarang, atau memuat plugin mungkin terlihat seperti perintah yang dibatasi tetapi dapat mengarah ke shell administratif. Jangan menilai keamanan hanya berdasarkan nama perintah; tinjau fungsionalitas penuh program, variabel lingkungan, dan file konfigurasi.

Batasi secara spesifik jalur perintah dan argumennya

Tentukan perintah dengan jalur absolut dan, jika memungkinkan, tetapkan argumen yang diizinkan. Wildcard dan aturan negasi dapat mencocokkan jalur yang tidak terduga atau dilewati, jadi Anda harus memahami sepenuhnya aturan pencocokan perintah sudoers sebelum digunakan.

Catat perubahan izin dan tinjau secara teratur

Untuk perubahan kebijakan sudo, disarankan untuk mencatat peminta, peninjau, tujuan, dan kondisi kedaluwarsa. Hapus akun dan aturan yang tidak digunakan, dan periksa secara berkala hak istimewa yang berlebihan berdasarkan log aktual dan hasil dari sudo -l.

Alasan mengapa variabel lingkungan dan jalur berubah

sudo mungkin tidak menyalin lingkungan apa adanya

Pengaturan default dari sudoers dapat menghapus variabel lingkungan yang berbahaya atau mengatur lingkungan yang terbatas. PATH, HOME, variabel proxy, atau pengaturan bahasa mungkin berbeda dari shell biasa Anda, yang dapat mengubah perilaku perintah.

sudo env

Untuk memecahkan masalah, Anda dapat membandingkannya dengan output env dari pengguna biasa, tetapi tinjau kontennya sebelum dibagikan karena mungkin berisi token atau informasi sensitif.

Gunakan sudo -E dengan hati-hati

-E meminta agar lingkungan pengguna pemanggil dipertahankan sesuai kebijakan. Kebijakan tersebut mungkin menolaknya, dan nilai lingkungan seperti jalur pustaka, proxy, dan jalur eksekusi dapat mengubah perilaku program yang dijalankan dengan hak istimewa yang lebih tinggi. Secara umum lebih aman untuk secara eksplisit hanya mengizinkan variabel yang diperlukan di sudoers.

Menggunakan sudo dalam otomatisasi

Gunakan -n untuk mencegah menunggu kata sandi

Dalam tugas otomatis, menunggu input kata sandi secara interaktif dapat menyebabkan tugas berhenti. -n menyebabkan gagal segera ketika input autentikasi diperlukan.

sudo -n /usr/bin/systemctl restart webapp.service

Apakah berhasil atau gagal harus diperiksa melalui status keluar dan log. Jangan menaruh kata sandi di skrip atau di baris perintah, karena dapat terekspos di daftar proses, riwayat shell, atau log.

Izinkan hanya perintah yang diperlukan untuk bersifat non-interaktif

Jika eksekusi tanpa pengawasan diperlukan, hanya izinkan perintah dan argumen yang ditunjuk pada akun layanan khusus, dan pastikan akun tersebut tidak dapat mengubah executable dan pengaturan terkait. Alih-alih menggunakan hak istimewa NOPASSWD yang luas, Anda juga dapat mempertimbangkan API khusus tugas, layanan systemd, atau program pembantu dengan izin terbatas.

Kesalahan dan solusi umum

Pesan atau gejala Kemungkinan penyebab Cara memeriksa
user is not in the sudoers file Tidak ada aturan yang diizinkan untuk pengguna Sampaikan perintah dan tujuan yang diperlukan kepada administrator
not allowed to execute Kombinasi perintah/argumen bertentangan dengan kebijakan Periksa rentang yang diizinkan dengan sudo -l
command not found PATH untuk sudo berbeda dari shell pengguna Periksa jalur absolut dan secure_path
Password diminta lagi Cache autentikasi kedaluwarsa atau perbedaan terminal/kebijakan Periksa pengaturan kebijakan dan cap waktu
Izin ditolak pada pengalihan Shell saat ini mencoba membuka file yang dilindungi terlebih dahulu Gunakan sudoedit atau tee yang terbatas
Kesalahan sintaks sudoers Pengeditan langsung atau aturan yang salah Periksa dengan visudo -c dalam sesi pemulihan

Prinsip keamanan saat menggunakan sudo

  • Sebelum mengeksekusi perintah yang disalin dari internet atau dokumen, periksa langsung opsi dan jalur target.
  • Untuk perintah seperti sudo rm atau yang terkait dengan disk, partisi, firewall, dan akun, lakukan verifikasi metode pemulihan dan potensi dampaknya terlebih dahulu.
  • Jangan biarkan shell administrator terbuka terlalu lama untuk perintah sekali pakai.
  • Jangan sembarangan menaruh kata sandi, token, atau kunci pribadi di baris perintah, skrip, atau variabel lingkungan.
  • Jangan memberikan hak istimewa tinggi pada skrip atau executable yang dapat diubah oleh pengguna.
  • Periksa lokasi log sudo dan kebijakan retensi, dan di lingkungan kritis, tinjau pencatatan sentral serta audit input/output.

Meskipun sudo mencatat perintah, hal itu tidak berarti setiap perintah individu yang dijalankan setelah sudo sh atau pelarian shell disimpan dalam log perintah tradisional. Pastikan apakah pencatatan input/output diatur secara terpisah.

Pertanyaan yang Sering Diajukan

Apakah sudo selalu dijalankan dengan hak istimewa root?

Jika Anda tidak menentukan pengguna target, defaultnya umumnya adalah root, tetapi Anda dapat menentukan pengguna lain dengan -u, dan apakah itu benar-benar diizinkan ditentukan oleh kebijakan. Poin utama dari sudo bukan hanya menjalankan sebagai root, tetapi menjalankan perintah dengan izin pengguna lain yang diizinkan.

Mengapa sudo tidak meminta kata sandi?

Informasi autentikasi terbaru mungkin masih berlaku untuk waktu yang ditetapkan oleh kebijakan, atau aturan NOPASSWD dapat berlaku untuk perintah tersebut. Anda dapat memeriksa kebijakan dengan sudo -l, dan gunakan sudo -k untuk membatalkan cap waktu; kebijakan NOPASSWD tetap dapat membolehkan perintah tanpa kata sandi.

Mengapa sudo cd tidak mengubah direktori saat ini?

cd adalah perintah bawaan shell yang mengubah direktori kerja dari shell saat ini. Mengubah direktori di proses terpisah tidak mempengaruhi shell induk. Untuk menjalankan perintah di direktori tertentu, periksa apakah perintah itu mendukung opsi direktori kerja atau apakah sudo mendukung -D.

Apakah file sudoers bisa diedit dengan editor biasa?

Tidak disarankan. Gunakan visudo untuk memeriksa sintaks karena kesalahan dapat membuat sudo tidak dapat digunakan. Anda juga dapat mengedit file terpisah dengan sudo visudo -f /etc/sudoers.d/filename dan memeriksa seluruh konfigurasi dengan sudo visudo -c.

Ringkasan

Untuk perintah yang memerlukan hak istimewa administrator, gunakan sudo command. Untuk menjalankan sebagai pengguna lain, gunakan sudo -u user command. Anda dapat memeriksa ruang lingkup yang diizinkan dengan sudo -l. Status otentikasi dapat diperbarui dengan -v dan dibatalkan setelah pekerjaan dengan -k.

Gunakan visudo dan sudoedit untuk file konfigurasi, dan buat aturan sudoers berdasarkan jalur absolut, argumen tetap, dan hak istimewa minimum. Untuk perintah administratif yang sering digunakan lainnya, Anda dapat merujuk ke daftar perintah Linux (bahasa Inggris).

Perubahan umpan balik input sudo Ubuntu 26.04