15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
10.11.2023

Cara Menonaktifkan Permintaan Kata Sandi untuk Perintah Sudo di Linux

Perintah sudo — singkatan dari superuser do — memberikan pengguna Linux yang berwenang hak akses sementara setingkat root untuk menjalankan tugas administratif. Secara default, setiap pemanggilan sudo memerlukan autentikasi kata sandi untuk memverifikasi identitas pemanggil. Anda dapat menonaktifkan prompt kata sandi ini secara global untuk pengguna, secara selektif untuk perintah tertentu, atau sementara untuk sesi tertentu dengan memodifikasi file /etc/sudoers melalui visudo atau dengan menyesuaikan direktif timestamp_timeout.

Sebelum melanjutkan: menonaktifkan autentikasi kata sandi sudo mengurangi postur pertahanan berlapis sistem Anda. Terapkan perubahan ini hanya pada akun tepercaya, sebaiknya dibatasi pada perintah tertentu daripada hak akses ALL secara menyeluruh. Pada lingkungan VPS Hosting produksi mana pun, perlakukan sudo tanpa kata sandi sebagai pertukaran yang diperhitungkan, bukan sebagai kemudahan default.

Memahami Cara Kerja Autentikasi Sudo

Ketika pengguna menjalankan sudo, tumpukan Linux PAM (Pluggable Authentication Modules) mengautentikasi permintaan terhadap aturan yang didefinisikan dalam /etc/sudoers. Setelah autentikasi berhasil, kernel mencatat stempel waktu kredensial di /run/sudo/ts/ (atau /var/db/sudo/ pada distribusi yang lebih lama). Pemanggilan sudo berikutnya dalam jendela timestamp_timeout — 15 menit secara default — melewati autentikasi ulang sepenuhnya.

Arsitektur ini berarti ada dua mekanisme yang secara fundamental berbeda yang dapat Anda gunakan:

  • Penyimpanan cache kredensial — memperpanjang atau menghilangkan jendela batas waktu sehingga pengguna mengautentikasi sekali dan kredensial bertahan lebih lama.
  • Direktif NOPASSWD — menginstruksikan sudo untuk melewati autentikasi sepenuhnya untuk perintah atau pengguna tertentu, terlepas dari waktu.

Memahami perbedaan ini sangat penting. Memperpanjang timestamp_timeout ke nilai yang besar tetap memerlukan satu autentikasi awal. Direktif NOPASSWD tidak memerlukan autentikasi sama sekali, selamanya. Keduanya tidak setara dari sudut pandang keamanan.

File sudoers: Arsitektur dan Pengeditan yang Aman

File konfigurasi utama adalah /etc/sudoers. File ini tidak boleh diedit langsung dengan editor teks standar. Selalu gunakan visudo, yang:

  • Mengunci file dari pengeditan bersamaan
  • Memvalidasi sintaks sebelum menyimpan
  • Mencegah file sudoers yang salah format mengunci semua pengguna dari sudo
sudo visudo

Pada sistem Debian/Ubuntu modern, /etc/sudoers menyertakan direktori drop-in:

/etc/sudoers.d/

Anda dapat menempatkan file aturan individual di sini alih-alih memodifikasi file utama secara langsung. Ini adalah pendekatan yang direkomendasikan untuk sistem produksi — ini menjaga aturan kustom Anda tetap terisolasi dan membuat audit menjadi mudah.

sudo visudo -f /etc/sudoers.d/custom_nopasswd

File di /etc/sudoers.d/ tidak boleh mengandung . dalam namanya (misalnya, hindari custom.conf) dan harus memiliki izin yang disetel ke 0440:

sudo chmod 0440 /etc/sudoers.d/custom_nopasswd

Metode 1: Melewati Prompt Kata Sandi Sementara untuk Satu Sesi

Flag -S menginstruksikan sudo untuk membaca kata sandi dari input standar (stdin) daripada dari terminal. Ini terutama berguna dalam skrip non-interaktif di mana Anda menyalurkan kata sandi secara terprogram:

echo "your_password" | sudo -S apt update

Peringatan penting: Menyematkan kata sandi teks biasa dalam skrip atau riwayat shell merupakan risiko keamanan yang signifikan. Metode ini sesuai untuk pipeline otomasi terisolasi di mana kata sandi disuntikkan melalui manajer rahasia atau variabel lingkungan — bukan dikodekan secara langsung dalam file skrip. Untuk otomasi tanpa pengawasan di server, direktif NOPASSWD yang dijelaskan di bawah ini adalah solusi yang lebih bersih secara arsitektur.

Metode 2: Menonaktifkan Prompt Kata Sandi untuk Semua Perintah bagi Pengguna Tertentu

Metode ini memberikan pengguna yang disebutkan namanya kemampuan untuk menjalankan perintah sudo apa pun tanpa kata sandi. Gunakan dengan hemat — biasanya untuk akun layanan khusus atau pengguna otomasi, bukan untuk akun operator manusia.

Langkah 1: Buka file sudoers:

sudo visudo

Langkah 2: Tambahkan baris berikut, ganti username dengan nama akun Linux yang sebenarnya:

username ALL=(ALL) NOPASSWD: ALL

Langkah 3: Simpan dan keluar. Pada nano berbasis visudo, tekan Ctrl+X, lalu Y, lalu Enter. Pada vi berbasis visudo, ketik :wq.

Arti aturan ini, diuraikan:

BidangNilaiArti
usernamePengguna targetSiapa aturan ini berlaku
ALL (pertama)Host mana punAturan berlaku di semua mesin (berguna untuk konfigurasi sudoers bersama)
(ALL)Pengguna target mana punDapat menjalankan perintah sebagai pengguna mana pun, termasuk root
NOPASSWD: ALLSemua perintah, tanpa kata sandiTidak diperlukan autentikasi untuk perintah apa pun

Metode 3: Menonaktifkan Prompt Kata Sandi hanya untuk Perintah Tertentu

Ini adalah pendekatan yang paling memperhatikan keamanan ketika eksekusi tanpa kata sandi benar-benar diperlukan. Daripada memberikan NOPASSWD: ALL secara menyeluruh, Anda membatasi pengecualian pada jalur biner yang tepat.

Langkah 1: Buka file sudoers:

sudo visudo

Langkah 2: Temukan bagian Defaults dan tambahkan aturan yang ditargetkan di bawahnya:

username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt-get update

Ganti username dengan akun yang sebenarnya dan tentukan jalur absolut lengkap ke setiap perintah. Anda dapat memisahkan beberapa perintah dengan koma dalam satu baris.

Langkah 3: Simpan dan keluar.

Mengapa jalur absolut penting: sudo menyelesaikan perintah terhadap aturan sudoers menggunakan jalur biner lengkap. Jika Anda menentukan apt-get tanpa jalur, aturan mungkin tidak cocok, atau lebih buruk lagi, biner berbahaya yang ditempatkan lebih awal di $PATH dapat dipanggil. Selalu verifikasi jalur dengan which:

which systemctl
# /usr/bin/systemctl

Kasus penggunaan nyata: Pipeline deployment yang berjalan sebagai pengguna deploy perlu memulai ulang layanan aplikasi setelah setiap rilis. Memberikan NOPASSWD hanya untuk systemctl restart myapp berarti pipeline dapat berfungsi secara otonom tanpa mengekspos akses root penuh.

Metode 4: Memperpanjang Batas Waktu Stempel Waktu Kredensial

Daripada menghilangkan autentikasi sepenuhnya, Anda dapat memperpanjang berapa lama sudo mengingat autentikasi yang berhasil. Ini adalah opsi yang paling tidak invasif untuk pengguna interaktif yang menjalankan beberapa perintah administratif dalam satu sesi kerja.

Langkah 1: Buka file sudoers:

sudo visudo

Langkah 2: Modifikasi atau tambahkan direktif timestamp_timeout di bawah blok Defaults:

Defaults    timestamp_timeout=60

Ini menetapkan cache kredensial ke 60 menit. Pengguna mengautentikasi sekali, dan perintah sudo berikutnya dalam jendela tersebut tidak memerlukan kata sandi.

Nilai khusus:

NilaiPerilaku
0Kata sandi diperlukan pada setiap pemanggilan sudo
-1Kredensial tidak pernah kedaluwarsa (efektif tanpa kata sandi setelah autentikasi pertama)
15Default pada sebagian besar distribusi
60Wajar untuk sesi admin aktif

Langkah 3: Simpan dan keluar.

Untuk menerapkan penggantian batas waktu hanya untuk pengguna tertentu daripada seluruh sistem:

Defaults:username    timestamp_timeout=60

Metode 5: Menggunakan File Drop-in sudoers (Praktik Terbaik Produksi)

Daripada mengedit /etc/sudoers secara langsung, buat file drop-in yang dibatasi cakupannya. Pendekatan ini bersifat idempoten, dapat diaudit, dan aman untuk dikelola melalui alat manajemen konfigurasi seperti Ansible, Puppet, atau Chef.

sudo visudo -f /etc/sudoers.d/deploy_nopasswd

Di dalam file:

# Allow the deploy user to restart services without a password
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp

Tetapkan izin yang benar:

sudo chmod 0440 /etc/sudoers.d/deploy_nopasswd

Verifikasi konfigurasi sudoers valid di semua file:

sudo visudo -c
# sudoers file: /etc/sudoers, parsed OK
# sudoers file: /etc/sudoers.d/deploy_nopasswd, parsed OK

Perbandingan Semua Metode

MetodeCakupanMemerlukan Autentikasi AwalRisiko KeamananKasus Penggunaan Terbaik
sudo -S dengan stdinPerintah tunggalYa (disalurkan)Tinggi jika dikodekan langsungCI/CD dengan manajer rahasia
NOPASSWD: ALLSemua perintah, satu penggunaTidakSangat TinggiAkun otomasi terisolasi
NOPASSWD: /path/cmdHanya perintah tertentuTidakRendah-SedangPipeline deployment, skrip
Perpanjangan timestamp_timeoutSemua perintah, dibatasi waktuYa (sekali)RendahSesi admin interaktif
File /etc/sudoers.d/ drop-inDapat dikonfigurasiDapat dikonfigurasiBergantung pada aturanServer produksi yang dikelola IaC

Pertimbangan Penguatan Keamanan

Menonaktifkan prompt kata sandi sudo memperkenalkan permukaan serangan yang nyata. Terapkan mitigasi berikut:

  • Audit penggunaan sudo: Aktifkan pencatatan sudo dengan menambahkan Defaults logfile="/var/log/sudo.log" ke konfigurasi sudoers Anda. Tinjau log ini secara berkala.
  • Batasi berdasarkan perintah dan argumen: NOPASSWD: /usr/bin/systemctl restart nginx jauh lebih aman daripada NOPASSWD: /usr/bin/systemctl — yang terakhir memungkinkan pengguna menghentikan, menonaktifkan, atau menyembunyikan layanan apa pun.
  • Gunakan akun layanan khusus: Jangan pernah menerapkan NOPASSWD: ALL pada akun utama operator manusia. Buat akun yang bertujuan khusus (misalnya, deploy, monitor) dengan daftar putih perintah minimal.
  • Kombinasikan dengan autentikasi hanya kunci SSH: Jika sudo tanpa kata sandi dikonfigurasi di server, pastikan akses SSH itu sendiri memerlukan autentikasi berbasis kunci. Menonaktifkan kata sandi SSH dan kata sandi sudo secara bersamaan pada server yang dapat diakses publik adalah kesalahan konfigurasi yang kritis.
  • Rotasi dan tinjau: Secara berkala audit /etc/sudoers.d/ untuk aturan yang sudah usang yang terkait dengan akun yang dinonaktifkan atau skrip yang sudah tidak digunakan.

Pada Dedicated Servers di mana Anda memiliki kontrol perangkat keras penuh, konfigurasi ini membawa bobot yang lebih besar — akun yang disusupi dengan sudo tanpa kata sandi pada mesin khusus berarti akses root penuh dan tidak terbantahkan tanpa pembatasan tingkat hypervisor.

Memverifikasi Konfigurasi Anda

Setelah membuat perubahan, selalu uji aturan sebagai pengguna target tanpa beralih ke root:

# Switch to the target user
su - username

# Test a specific command
sudo /usr/bin/systemctl restart nginx

# Verify sudo privileges without executing a command
sudo -l

sudo -l mencantumkan semua perintah yang diizinkan untuk dijalankan oleh pengguna saat ini, termasuk mana yang bersifat NOPASSWD. Ini adalah alat debugging utama Anda ketika aturan tidak berperilaku seperti yang diharapkan.

Untuk memeriksa aturan sudoers efektif untuk pengguna tertentu dari sesi root:

sudo -l -U username

Konfigurasi Praktis untuk Pipeline Deployment Web Server

Berikut adalah konfigurasi lengkap dan siap produksi untuk pengguna deployment di web server — jenis pengaturan yang akan Anda gunakan pada VPS dengan cPanel atau tumpukan LEMP/LAMP kustom:

1. Buat pengguna deployment:

sudo useradd -m -s /bin/bash deploy
sudo passwd deploy

2. Buat aturan drop-in sudoers:

sudo visudo -f /etc/sudoers.d/deploy
# Deployment pipeline: passwordless service management only
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart php8.2-fpm
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/chown -R www-data /var/www/html

3. Tetapkan izin dan validasi:

sudo chmod 0440 /etc/sudoers.d/deploy
sudo visudo -c

4. Uji sebagai pengguna deploy:

su - deploy
sudo systemctl restart nginx
# Should execute without a password prompt

Pola ini dapat langsung diterapkan pada alur kerja deployment otomatis apa pun, baik Anda menggunakan GitHub Actions, GitLab CI, Jenkins, atau skrip shell kustom yang dipicu melalui SSH.

Jika infrastruktur Anda mencakup VPS Control Panels yang dikelola, verifikasi bahwa pengguna sistem panel itu sendiri (misalnya, cpanel, plesk) tidak terpengaruh secara tidak sengaja oleh aturan NOPASSWD: ALL yang luas yang Anda tambahkan ke sudoers.

Daftar Periksa Poin Utama

Sebelum menerapkan konfigurasi sudo tanpa kata sandi apa pun, jalankan matriks keputusan ini:

  • Apakah ini akun manusia atau akun layanan? Akun layanan dapat mentolerir NOPASSWD; akun manusia sebaiknya menggunakan perpanjangan timestamp_timeout.
  • Dapatkah Anda membatasi pengecualian pada perintah tertentu? Selalu lebih pilih NOPASSWD: /path/to/command daripada NOPASSWD: ALL.
  • Apakah akses SSH diamankan dengan autentikasi berbasis kunci? Jika tidak, perbaiki itu terlebih dahulu sebelum melonggarkan persyaratan sudo.
  • Apakah aktivitas sudo sedang dicatat? Tambahkan Defaults logfile="/var/log/sudo.log" jika belum ada.
  • Apakah Anda menggunakan file drop-in di /etc/sudoers.d/? Lebih pilih ini daripada mengedit /etc/sudoers secara langsung untuk kemudahan pemeliharaan.
  • Sudahkah Anda menjalankan sudo visudo -c untuk memvalidasi sintaks? Jangan pernah melewati langkah ini — kesalahan sintaks dalam sudoers dapat mengunci Anda dari akses administratif sepenuhnya.
  • Apakah Anda memiliki metode pemulihan out-of-band? Pada instans VPS cloud, pastikan Anda memiliki akses konsol atau snapshot pemulihan sebelum membuat perubahan sudoers.

FAQ

Apa cara paling aman untuk mengizinkan sudo tanpa kata sandi untuk skrip tertentu?

Buat skrip wrapper dengan jalur absolut tetap, tempatkan di direktori sistem (misalnya, /usr/local/bin/deploy-restart.sh), dan berikan NOPASSWD hanya untuk jalur spesifik tersebut di /etc/sudoers.d/. Ini mencegah injeksi argumen dan membatasi dampak jika akun disusupi.

Apakah menonaktifkan prompt kata sandi sudo akan memengaruhi semua sesi terminal segera?

Ya. Perubahan pada /etc/sudoers atau file di /etc/sudoers.d/ berlaku segera untuk semua pemanggilan sudo baru. Tidak perlu memulai ulang layanan apa pun atau keluar. Kredensial yang sudah di-cache tidak terpengaruh hingga kedaluwarsa.

Apa yang terjadi jika saya membuat kesalahan sintaks dalam file sudoers?

Jika Anda menggunakan visudo, itu akan menangkap kesalahan sebelum menyimpan dan meminta Anda untuk memperbaikinya. Jika Anda entah bagaimana melewati visudo dan memperkenalkan kesalahan sintaks, sudo akan menolak untuk berjalan sama sekali. Pemulihan memerlukan boot ke mode pengguna tunggal atau menggunakan akses konsol out-of-band untuk memperbaiki file.

Dapatkah saya menerapkan NOPASSWD ke grup alih-alih pengguna individual?

Ya. Gunakan sintaks %groupname: %developers ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx. Ini menerapkan aturan ke semua anggota grup developers, membuatnya lebih mudah untuk mengelola akses dalam skala besar tanpa mengedit sudoers untuk setiap anggota tim baru.

Apakah timestamp_timeout=-1 berperilaku sama dengan NOPASSWD: ALL?

Tidak. timestamp_timeout=-1 berarti kredensial tidak pernah kedaluwarsa setelah autentikasi pertama yang berhasil — tetapi autentikasi pertama tersebut tetap memerlukan kata sandi. NOPASSWD: ALL melewati autentikasi sepenuhnya, termasuk pemanggilan pertama. Yang pertama jauh lebih aman untuk pengguna interaktif.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai