15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
09.10.2024

useradd vs adduser: Perbedaan Teknis, Kasus Penggunaan, dan Kapan Menggunakan Masing-Masing

`useradd` adalah utilitas biner tingkat rendah yang tersedia di hampir setiap distribusi Linux yang membuat akun pengguna dengan langsung menulis ke `/etc/passwd`, `/etc/shadow`, dan `/etc/group`. `adduser` adalah skrip wrapper tingkat lebih tinggi — biasanya ditulis dalam Perl pada sistem berbasis Debian — yang memanggil `useradd` secara internal sambil mengotomatiskan pembuatan direktori home, pengisian file skeleton, permintaan kata sandi, dan pengumpulan field GECOS. Perbedaan praktisnya bukan hanya soal ergonomi: memilih alat yang salah dalam pipeline provisi otomatis atau pada sistem non-Debian dapat menghasilkan akun pengguna yang tidak lengkap secara diam-diam.

Kedua perintah pada akhirnya mendaftarkan pengguna dalam database autentikasi sistem, tetapi perilakunya berbeda secara signifikan dalam hal default, interaktivitas, portabilitas, dan kemampuan skrip. Panduan ini mencakup setiap perbedaan teknis yang dibutuhkan administrator untuk membuat keputusan yang tepat.

Apa yang Sebenarnya Dilakukan useradd di Balik Layar

`useradd` adalah bagian dari paket shadow-utils (kadang disebut `passwd` pada distribusi lama). Saat dipanggil, ia melakukan serangkaian operasi atomik:

  1. Membaca `/etc/login.defs` untuk menentukan rentang UID default, kebijakan penuaan kata sandi, dan apakah akan membuat direktori home secara default.
  2. Membaca `/etc/default/useradd` untuk shell default, jalur direktori skeleton, dan perilaku grup.
  3. Menulis entri baru ke `/etc/passwd` dan `/etc/shadow`.
  4. Secara opsional membuat direktori home dan menyalin file dari `/etc/skel` jika `-m` diteruskan secara eksplisit.
  5. Secara opsional membuat grup privat yang sesuai dengan nama pengguna jika `USERGROUPS_ENAB` diatur ke `yes` di `/etc/login.defs`.

Poin penting yang sering diabaikan banyak panduan: pada distribusi berbasis Red Hat (RHEL, CentOS, Rocky Linux, AlmaLinux), `useradd` membuat direktori home secara default karena `/etc/login.defs` menetapkan `CREATE_HOME yes`. Pada Debian dan Ubuntu, hal ini tidak terjadi — flag `-m` wajib digunakan kecuali Anda memodifikasi `/etc/default/useradd`. Asimetri perilaku ini sering menjadi sumber kebingungan ketika administrator berpindah antar keluarga distribusi.

Flag Utama dan Perilakunya

FlagTujuanCatatan
———————-
`-m`Buat direktori homeWajib pada Debian/Ubuntu tanpa perubahan konfigurasi
`-d /path`Tetapkan jalur direktori home kustomTidak membuat direktori kecuali `-m` juga digunakan
`-s /bin/bash`Tetapkan shell loginDefault ke `/bin/sh` atau nilai di `/etc/default/useradd`
`-u UID`Tetapkan UID tertentuHarus unik; gunakan `-o` untuk mengizinkan duplikat
`-g GID`Tetapkan grup utamaGrup harus sudah ada
`-G group1,group2`Tambahkan grup tambahanDipisahkan koma, tanpa spasi
`-e YYYY-MM-DD`Tanggal kedaluwarsa akunDitulis ke field 8 `/etc/shadow`
`-f days`Periode tidak aktif kata sandiHari setelah kedaluwarsa sebelum akun dikunci
`-r`Buat akun sistemUID di bawah `SYS_UID_MAX` di `/etc/login.defs`, tidak ada direktori home secara default
`-M`Secara eksplisit tidak membuat direktori homeMengesampingkan default distro
`-N`Tidak membuat grup privat penggunaGrup utama pengguna menjadi grup default
`-k /path`Tentukan direktori skeleton alternatifMengesampingkan `/etc/skel`

Contoh Praktis useradd dengan Opsi Lengkap

“`bash

useradd

-m

-d /srv/appuser

-s /bin/bash

-u 1500

-g developers

-G sudo,docker

-e 2025-12-31

-c "Application Service Account"

appuser

passwd appuser

“`

Tidak ada kata sandi yang ditetapkan sampai `passwd` dipanggil. Sampai saat itu, akun ada tetapi terkunci — entri shadow berisi `!` sebagai hash kata sandi, mencegah login melalui autentikasi kata sandi. Namun, login berbasis kunci SSH tidak terpengaruh oleh kondisi ini.

Apa yang Sebenarnya Dilakukan adduser di Balik Layar

Pada Debian dan Ubuntu, `adduser` adalah skrip Perl yang berlokasi di `/usr/sbin/adduser`. Ia membaca konfigurasinya sendiri dari `/etc/adduser.conf` — file terpisah dari `/etc/login.defs` — dan kemudian memanggil `useradd` dengan flag yang sesuai berdasarkan konfigurasi tersebut ditambah input pengguna.

Skrip ini melakukan langkah-langkah tambahan yang tidak dilakukan `useradd` saja:

  • Meminta kata sandi secara interaktif dan mengonfirmasinya dengan entri kedua.
  • Mengumpulkan field GECOS (nama lengkap, nomor ruangan, telepon kerja, telepon rumah, lainnya) melalui prompt terpandu.
  • Menyalin file skeleton dari `/etc/skel` secara otomatis tanpa memerlukan `-m`.
  • Menetapkan kepemilikan dan izin yang benar pada direktori home.
  • Secara opsional menambahkan pengguna ke grup tambahan yang didefinisikan di `/etc/adduser.conf`.

Pada sistem berbasis Red Hat, `adduser` biasanya merupakan symlink ke `useradd`, artinya berperilaku identik dengan biner tingkat rendah — tidak ada wrapper interaktif. Ini adalah masalah portabilitas terpenting saat menulis skrip lintas distribusi.

File Konfigurasi adduser: /etc/adduser.conf

Direktif utama di `/etc/adduser.conf` yang memengaruhi perilaku:

“`

DSHELL=/bin/bash # Default shell

DHOME=/home # Parent directory for home directories

GROUPHOMES=no # Whether to create group-named subdirectories

LETTERHOMES=no # Whether to use first-letter subdirectories

USERGROUPS=yes # Create a group with the same name as the user

USERS_GID=100 # Default GID if USERGROUPS=no

DIR_MODE=0755 # Permissions on new home directories

SETGID_HOME=no

QUOTAUSER=""

SKEL=/etc/skel

SKEL_IGNORE_REGEX="dpkg-(old|new|dist|tmp)"

“`

Memodifikasi file ini memungkinkan Anda menstandarisasi pembuatan pengguna di seluruh armada server Debian/Ubuntu tanpa harus meneruskan flag setiap saat.

Contoh Praktis adduser

“`bash

adduser customuser

“`

Sesi interaktif terlihat seperti ini:

“`

Adding user 'customuser' …

Adding new group 'customuser' (1001) …

Adding new user 'customuser' (1001) with group 'customuser' …

Creating home directory '/home/customuser' …

Copying files from '/etc/skel' …

New password:

Retype new password:

passwd: password updated successfully

Changing the user information for customuser

Enter the new value, or press ENTER for the default

Full Name []: Jane Smith

Room Number []:

Work Phone []:

Home Phone []:

Other []:

Is the information correct? [Y/n] Y

“`

Untuk menambahkan pengguna yang sudah ada ke grup secara non-interaktif dengan `adduser`:

“`bash

adduser customuser sudo

“`

Ini adalah fitur yang patut diperhatikan: `adduser` berfungsi ganda sebagai alat manajemen keanggotaan grup, yang tidak dapat direplikasi `useradd` dalam satu perintah.

Perbandingan Berdampingan

Fitur`useradd``adduser`
TipeBiner (program C)Skrip (Perl pada Debian, symlink pada RHEL)
InteraktivitasNon-interaktif; semua opsi melalui flagPrompt interaktif secara default
Direktori homeTidak dibuat kecuali `-m` diteruskan (Debian)Dibuat secara otomatis
Pengaturan kata sandiMemerlukan perintah `passwd` terpisahDiminta selama pembuatan
Field GECOSDitetapkan melalui flag `-c` sebagai satu stringDikumpulkan field per field secara interaktif
File skeletonDisalin hanya dengan flag `-m`Selalu disalin
File konfigurasi`/etc/login.defs`, `/etc/default/useradd``/etc/adduser.conf`
Ketersediaan lintas distroSemua distribusi LinuxHanya Debian/Ubuntu (sebagai skrip wrapper)
Kesesuaian untuk skripSangat baik — sepenuhnya non-interaktifBuruk — memerlukan flag `–disabled-password` dan `–gecos` untuk menghindari prompt
Akun sistemDidukung melalui flag `-r`Didukung melalui flag `–system`
Manajemen grupHanya saat pembuatanDapat menambahkan pengguna ke grup yang sudah ada setelah pembuatan
GranularitasKontrol penuh atas setiap parameterDefault yang opinionated, kurang granular

Kapan Menggunakan useradd

Otomasi dan Infrastructure-as-Code

`useradd` adalah pilihan yang tepat dalam konteks non-interaktif apa pun: playbook Ansible, provisioner Terraform, instruksi Docker `RUN`, skrip cloud-init, dan pipeline CI/CD. Ini menghasilkan output deterministik tanpa ketergantungan stdin.

“`bash

Ansible task equivalent

useradd -m -s /bin/bash -G sudo -c "Deploy User" deployuser

echo "deployuser:$(openssl passwd -6 'securepassword')" | chpasswd

“`

Portabilitas Lintas Distribusi

Skrip shell apa pun yang dimaksudkan untuk berjalan pada sistem berbasis Debian maupun RHEL harus menggunakan `useradd`. Mengandalkan perilaku `adduser` akan menghasilkan kegagalan diam-diam atau perilaku tak terduga pada CentOS, Fedora, Rocky Linux, atau Alpine Linux.

Akun Sistem dan Layanan

Membuat akun layanan terkunci tanpa shell login untuk daemon adalah keahlian `useradd`:

“`bash

useradd -r -s /usr/sbin/nologin -d /var/lib/myservice -m myservice

“`

Flag `-r` menetapkan UID di bawah ambang batas akun sistem, memberi sinyal kepada administrator bahwa ini bukan akun pengguna manusia, dan merupakan pola standar untuk penerapan aplikasi di lingkungan VPS Hosting di mana isolasi layanan sangat penting.

Kontrol UID/GID yang Tepat

Dalam lingkungan NFS, orkestrasi container, atau saat menyinkronkan database pengguna di beberapa server, UID dan GID yang konsisten adalah wajib. `useradd -u 1500 -g 1500` menjamin hal ini; `adduser` tidak menawarkan kontrol deterministik yang sama tanpa konfigurasi yang signifikan.

Kapan Menggunakan adduser

Pengaturan Server Interaktif

Saat menyediakan Dedicated Server baru secara manual dan menambahkan beberapa akun pengguna manusia pertama, `adduser` mengurangi risiko pengaturan yang tidak lengkap. Prompt terpandu membuatnya hampir tidak mungkin untuk melupakan langkah kata sandi.

Lingkungan Debian/Ubuntu dengan Default Standar

Jika seluruh infrastruktur Anda menjalankan Debian atau Ubuntu dan Anda membuat pengguna direktori home standar, `adduser` menghasilkan hasil yang benar lebih cepat dengan lebih sedikit flag yang perlu diingat.

Manajemen Grup Pasca-Pembuatan

Sintaks `adduser username groupname` untuk menambahkan pengguna yang sudah ada ke grup yang sudah ada lebih bersih daripada `usermod -aG groupname username`, meskipun keduanya valid.

Orientasi Administrator Junior

Sifat interaktif `adduser` menjadikannya alat pengajaran yang lebih baik. Ini menampilkan field yang penting (kata sandi, nama lengkap) dan menyembunyikan kompleksitas rentang UID dan direktori skeleton sampai administrator siap mempelajarinya.

Kasus Edge Kritis dan Jebakan

Jebakan Direktori Home yang Hilang

Pada Debian/Ubuntu, menjalankan `useradd username` tanpa `-m` membuat pengguna tetapi bukan direktori home. Pengguna dapat login (setelah kata sandi ditetapkan), tetapi `$HOME` tidak akan ada, menyebabkan kegagalan pada aplikasi apa pun yang menulis ke direktori home saat login pertama — termasuk `.bash_history`, `.ssh/authorized_keys`, dan banyak direktori konfigurasi aplikasi.

“`bash

Verify home directory existence after creation

ls -la /home/newuser || echo "Home directory missing — run: mkhomedir_helper newuser"

“`

Penguncian File Shadow

Kedua perintah mengunci `/etc/shadow` selama penulisan. Dalam skrip provisi konkurensi tinggi yang membuat puluhan pengguna secara bersamaan, ini menyebabkan kondisi balapan. Gunakan antrian atau eksekusi berurutan saat membuat pengguna secara massal.

Tabrakan UID di Lingkungan Terkontainerisasi

Saat menerapkan aplikasi pada VPS dengan cPanel atau lingkungan panel kontrol lainnya, panel itu sendiri mengelola alokasi UID. Menjalankan `useradd` secara manual dengan UID yang dikodekan keras dapat bertabrakan dengan UID yang ditetapkan panel, menyebabkan kesalahan izin di beberapa akun. Selalu periksa `getent passwd | awk -F: '{print $3}' | sort -n` sebelum menentukan UID secara manual.

adduser –disabled-password untuk Skrip

Jika Anda harus menggunakan `adduser` dalam skrip (misalnya, untuk memanfaatkan default `/etc/adduser.conf`-nya), tekan prompt interaktif:

“`bash

adduser –disabled-password –gecos "Automated User,,," scriptuser

echo "scriptuser:$(openssl passwd -6 'password')" | chpasswd

“`

Flag `–gecos` menerima string yang dipisahkan koma yang sesuai dengan field GECOS, menghilangkan semua prompt interaktif.

Integrasi PAM dan NSS

Baik `useradd` maupun `adduser` tidak mengonfigurasi modul PAM atau entri NSS (Name Service Switch) untuk LDAP, Active Directory, atau sistem autentikasi terpusat lainnya. Pada server yang terintegrasi dengan `sssd` atau `winbind`, pembuatan pengguna lokal dengan salah satu perintah membuat akun yang mungkin bertentangan dengan atau digantikan oleh akun layanan direktori. Verifikasi `/etc/nsswitch.conf` sebelum membuat pengguna lokal pada sistem yang bergabung dengan domain.

Kustomisasi File Skeleton

Kedua perintah menyalin dari `/etc/skel` secara default. Untuk tim yang mengelola lingkungan Shared Web Hosting di mana setiap pengguna membutuhkan `.bashrc`, `.vimrc`, atau konfigurasi SSH yang telah dikonfigurasi sebelumnya, mengisi `/etc/skel` sebelum menjalankan salah satu perintah adalah pendekatan yang benar — bukan memodifikasi file setelah pembuatan akun.

Memverifikasi Pembuatan Pengguna

Terlepas dari perintah mana yang Anda gunakan, verifikasi hasilnya:

“`bash

Check passwd entry

getent passwd newuser

Check shadow entry (requires root)

getent shadow newuser

Check group memberships

groups newuser

id newuser

Verify home directory and permissions

ls -la /home/newuser

Test login shell

su -s /bin/bash – newuser -c "echo login successful"

“`

Memodifikasi dan Menghapus Pengguna

`useradd` dan `adduser` hanya membuat akun. Manajemen pasca-pembuatan menggunakan perintah yang berbeda:

  • `usermod` — Memodifikasi atribut pengguna yang sudah ada (shell, grup, direktori home, kedaluwarsa).
  • `userdel` / `deluser` — Menghapus akun. `deluser –remove-home username` pada Debian juga menghapus direktori home dan spool surat.
  • `passwd` — Menetapkan atau mengubah kata sandi, mengunci/membuka kunci akun.
  • `chage` — Mengelola kebijakan penuaan dan kedaluwarsa kata sandi.

“`bash

Lock an account without deleting it

usermod -L username

Unlock

usermod -U username

Force password change on next login

chage -d 0 username

“`

Matriks Keputusan Praktis

Gunakan daftar periksa ini untuk memilih perintah yang tepat:

  • Apakah skrip berjalan pada sistem non-Debian atau perlu portabel? Gunakan `useradd`.
  • Apakah ini lingkungan otomatis non-interaktif (CI/CD, Ansible, Docker)? Gunakan `useradd`.
  • Apakah Anda memerlukan UID/GID tertentu untuk konsistensi NFS atau container? Gunakan `useradd -u -g`.
  • Apakah Anda membuat akun sistem/layanan tanpa shell login? Gunakan `useradd -r -s /usr/sbin/nologin`.
  • Apakah Anda menggunakan Debian/Ubuntu, membuat akun pengguna manusia standar secara interaktif? Gunakan `adduser`.
  • Apakah Anda ingin menambahkan pengguna yang sudah ada ke grup dengan satu baris perintah yang bersih? Gunakan `adduser username groupname`.
  • Apakah Anda menulis dokumentasi atau melatih staf junior di Debian? Gunakan `adduser`.
  • Apakah Anda perlu menyesuaikan lokasi direktori home, kedaluwarsa, atau shell secara non-interaktif dalam skala besar? Gunakan `useradd` dengan flag eksplisit.

Kebersihan akun pengguna yang tepat adalah fondasi keamanan server. Baik Anda mengelola satu VPS maupun armada Dedicated Server, memahami dengan tepat apa yang ditulis setiap perintah ke disk — dan apa yang dibiarkan tidak ditetapkan — mencegah kelas eskalasi hak istimewa dan kegagalan autentikasi yang berasal dari provisi akun yang tidak lengkap.

FAQ

Apakah useradd membuat direktori home secara default?

Tergantung pada distribusinya. Pada sistem berbasis Red Hat (RHEL, CentOS, Rocky Linux), `CREATE_HOME yes` di `/etc/login.defs` menyebabkan `useradd` membuat direktori home secara otomatis. Pada Debian dan Ubuntu, tidak ada direktori home yang dibuat kecuali Anda secara eksplisit meneruskan flag `-m`.

Apakah adduser tersedia di CentOS atau Rocky Linux?

Pada distribusi berbasis RHEL, `adduser` adalah tautan simbolik ke `useradd`, bukan wrapper Perl interaktif yang ditemukan di Debian/Ubuntu. Menjalankan `adduser username` di CentOS berperilaku identik dengan `useradd username` — tidak ada prompt, tidak ada direktori home otomatis pada default gaya Debian.

Bagaimana cara menggunakan adduser secara non-interaktif dalam skrip?

Teruskan `–disabled-password` untuk melewati prompt kata sandi dan `–gecos ""` untuk melewati prompt field GECOS: `adduser –disabled-password –gecos "" username`. Tetapkan kata sandi setelahnya dengan `echo "username:password" | chpasswd` atau dengan menyalurkan hash `openssl passwd -6`.

Apa perbedaan antara /etc/login.defs dan /etc/adduser.conf?

`/etc/login.defs` adalah file konfigurasi seluruh sistem yang dibaca oleh `useradd`, `userdel`, dan `usermod` — ini mengontrol rentang UID/GID, default penuaan kata sandi, dan perilaku pembuatan direktori home. `/etc/adduser.conf` dibaca secara eksklusif oleh skrip Perl `adduser` dan `deluser` pada sistem berbasis Debian dan mengontrol default tingkat lebih tinggi seperti shell default, jalur induk direktori home, dan direktori skeleton.

Dapatkah saya dengan aman mencampur useradd dan adduser pada server Debian yang sama?

Ya. Keduanya pada akhirnya menulis ke file `/etc/passwd`, `/etc/shadow`, dan `/etc/group` yang sama. Akun yang dibuat dengan salah satu perintah tidak dapat dibedakan di tingkat sistem. Satu-satunya kekhawatiran praktis adalah konsistensi: jika tim Anda menggunakan `adduser` secara interaktif dan skrip otomasi menggunakan `useradd` tanpa `-m`, Anda mungkin berakhir dengan beberapa pengguna yang tidak memiliki direktori home. Standarisasi pada satu pendekatan per lingkungan dan dokumentasikan.

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai