useradd ve adduser: Teknik Farklılıklar, Kullanım Senaryoları ve Her Birinin Ne Zaman Kullanılacağı
`useradd`, neredeyse her Linux dağıtımında mevcut olan ve `/etc/passwd`, `/etc/shadow` ve `/etc/group` dosyalarına doğrudan yazarak kullanıcı hesapları oluşturan düşük seviyeli bir ikili yardımcı programdır. `adduser`, Debian tabanlı sistemlerde genellikle Perl ile yazılmış, dahili olarak `useradd` çağırırken ev dizini oluşturma, iskelet dosyası doldurma, parola sorgulama ve GECOS alanı toplama işlemlerini otomatikleştiren daha üst düzey bir sarmalayıcı betiktir. Pratik fark yalnızca ergonomi değildir: otomatik bir sağlama hattında veya Debian dışı bir sistemde yanlış aracı seçmek, sessiz sedasız eksik kullanıcı hesapları oluşturabilir.
Her iki komut da nihayetinde bir kullanıcıyı sistemin kimlik doğrulama veritabanına kaydeder; ancak davranışları varsayılanlar, etkileşim, taşınabilirlik ve betiklenebilirlik açısından önemli ölçüde farklılaşır. Bu kılavuz, bir yöneticinin bilinçli bir karar vermesi için ihtiyaç duyduğu her teknik ayrımı kapsamaktadır.
useradd Arka Planda Gerçekte Ne Yapar
`useradd`, shadow-utils paketinin (eski dağıtımlarda bazen `passwd` olarak adlandırılır) bir parçasıdır. Çağrıldığında bir dizi atomik işlem gerçekleştirir:
- Varsayılan UID aralıklarını, parola eskime politikalarını ve varsayılan olarak ev dizini oluşturulup oluşturulmayacağını belirlemek için `/etc/login.defs` dosyasını okur.
- Varsayılan kabuk, iskelet dizini yolu ve grup davranışı için `/etc/default/useradd` dosyasını okur.
- `/etc/passwd` ve `/etc/shadow` dosyalarına yeni bir giriş yazar.
- `-m` açıkça geçirilmişse isteğe bağlı olarak bir ev dizini oluşturur ve `/etc/skel` dizininden dosyaları kopyalar.
- `/etc/login.defs` dosyasında `USERGROUPS_ENAB` değeri `yes` olarak ayarlanmışsa isteğe bağlı olarak kullanıcı adıyla eşleşen özel bir grup oluşturur.
Pek çok kılavuzun atladığı kritik bir nokta: Red Hat tabanlı dağıtımlarda (RHEL, CentOS, Rocky Linux, AlmaLinux), `useradd` varsayılan olarak ev dizinini oluşturur; çünkü `/etc/login.defs` dosyası `CREATE_HOME yes` değerini ayarlar. Debian ve Ubuntu’da ise bu gerçekleşmez — `/etc/default/useradd` dosyasını değiştirmediğiniz sürece `-m` bayrağı zorunludur. Bu davranışsal asimetri, yöneticiler dağıtım aileleri arasında geçiş yaptığında sık karşılaşılan bir karışıklık kaynağıdır.
Temel Bayraklar ve Davranışları
| Bayrak | Amaç | Notlar |
|---|---|---|
| —— | ——— | ——- |
| `-m` | Ev dizini oluştur | Debian/Ubuntu’da yapılandırma değişikliği olmadan zorunludur |
| `-d /path` | Özel ev dizini yolu belirle | `-m` da kullanılmadıkça dizini oluşturmaz |
| `-s /bin/bash` | Giriş kabuğunu ayarla | Varsayılan olarak `/bin/sh` veya `/etc/default/useradd` dosyasındaki değer kullanılır |
| `-u UID` | Belirli bir UID ata | Benzersiz olmalıdır; yinelenenlere izin vermek için `-o` kullanın |
| `-g GID` | Birincil grubu ayarla | Grup zaten mevcut olmalıdır |
| `-G group1,group2` | Ek gruplar ekle | Virgülle ayrılmış, boşluk olmadan |
| `-e YYYY-MM-DD` | Hesap sona erme tarihi | `/etc/shadow` dosyasının 8. alanına yazılır |
| `-f days` | Parola etkinlik dışı kalma süresi | Sona ermeden sonra hesabın kilitlenmesine kadar geçen gün sayısı |
| `-r` | Sistem hesabı oluştur | `/etc/login.defs` dosyasında `SYS_UID_MAX` değerinin altında UID, varsayılan olarak ev dizini yok |
| `-M` | Ev dizini açıkça oluşturma | Dağıtım varsayılanlarını geçersiz kılar |
| `-N` | Kullanıcıya özel grup oluşturma | Kullanıcının birincil grubu varsayılan grup olur |
| `-k /path` | Alternatif iskelet dizini belirt | `/etc/skel` değerini geçersiz kılar |
Tam Seçeneklerle Pratik useradd Örneği
“`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
“`
`passwd` çağrılana kadar parola ayarlanmaz. O zamana kadar hesap mevcut olmakla birlikte kilitlidir — shadow girişi, parola karması olarak `!` içerir ve parola kimlik doğrulaması yoluyla girişi engeller. Ancak SSH anahtar tabanlı giriş bu durumdan etkilenmez.
adduser Arka Planda Gerçekte Ne Yapar
Debian ve Ubuntu’da `adduser`, `/usr/sbin/adduser` konumunda bulunan bir Perl betiğidir. Kendi yapılandırmasını `/etc/login.defs` dosyasından ayrı bir dosya olan `/etc/adduser.conf` dosyasından okur ve ardından bu yapılandırmaya ile kullanıcı girdisine dayanarak uygun bayraklarla `useradd` komutunu çağırır.
Betik, `useradd` komutunun tek başına gerçekleştirmediği ek adımlar uygular:
- Parola için etkileşimli olarak soru sorar ve ikinci bir girişle doğrular.
- Yönlendirmeli istemler aracılığıyla GECOS alanlarını (tam ad, oda numarası, iş telefonu, ev telefonu, diğer) toplar.
- `-m` gerektirmeden `/etc/skel` dizininden iskelet dosyalarını otomatik olarak kopyalar.
- Ev dizininde doğru sahiplik ve izinleri ayarlar.
- İsteğe bağlı olarak kullanıcıyı `/etc/adduser.conf` dosyasında tanımlanan ek gruplara ekler.
Red Hat tabanlı sistemlerde, `adduser` genellikle `useradd` komutuna sembolik bir bağlantıdır; yani düşük seviyeli ikili programla aynı şekilde davranır — etkileşimli bir sarmalayıcı yoktur. Bu, dağıtımlar arası betikler yazarken en önemli taşınabilirlik sorunudur.
adduser Yapılandırma Dosyası: /etc/adduser.conf
Davranışı etkileyen `/etc/adduser.conf` dosyasındaki temel yönergeler:
“`
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)"
“`
Bu dosyayı değiştirmek, her seferinde bayrak geçirmeden bir Debian/Ubuntu sunucu filosunda kullanıcı oluşturmayı standartlaştırmanıza olanak tanır.
Pratik adduser Örneği
“`bash
adduser customuser
“`
Etkileşimli oturum şöyle görünür:
“`
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
“`
Mevcut bir kullanıcıyı `adduser` ile etkileşimsiz olarak bir gruba eklemek için:
“`bash
adduser customuser sudo
“`
Bu kayda değer bir özelliktir: `adduser`, tek bir komutla `useradd` komutunun çoğaltamadığı bir grup üyeliği yönetim aracı olarak da işlev görür.
Yan Yana Karşılaştırma
| Özellik | `useradd` | `adduser` |
|---|---|---|
| — | — | — |
| Tür | İkili (C programı) | Betik (Debian’da Perl, RHEL’de sembolik bağlantı) |
| Etkileşim | Etkileşimsiz; tüm seçenekler bayraklar aracılığıyla | Varsayılan olarak etkileşimli istemler |
| Ev dizini | `-m` geçirilmediği sürece oluşturulmaz (Debian) | Otomatik olarak oluşturulur |
| Parola kurulumu | Ayrı `passwd` komutu gerektirir | Oluşturma sırasında sorulur |
| GECOS alanları | Tek bir dize olarak `-c` bayrağıyla ayarlanır | Etkileşimli olarak alan alan toplanır |
| İskelet dosyaları | Yalnızca `-m` bayrağıyla kopyalanır | Her zaman kopyalanır |
| Yapılandırma dosyası | `/etc/login.defs`, `/etc/default/useradd` | `/etc/adduser.conf` |
| Dağıtımlar arası kullanılabilirlik | Tüm Linux dağıtımları | Yalnızca Debian/Ubuntu (sarmalayıcı betik olarak) |
| Betik uygunluğu | Mükemmel — tamamen etkileşimsiz | Zayıf — istemleri önlemek için `–disabled-password` ve `–gecos` bayrakları gerektirir |
| Sistem hesapları | `-r` bayrağıyla desteklenir | `–system` bayrağıyla desteklenir |
| Grup yönetimi | Yalnızca oluşturma zamanında | Oluşturma sonrasında kullanıcıyı mevcut gruba ekleyebilir |
| Ayrıntı düzeyi | Her parametre üzerinde tam kontrol | Önceden belirlenmiş varsayılanlar, daha az ayrıntılı |
useradd Ne Zaman Kullanılır
Otomasyon ve Kod Olarak Altyapı
`useradd`, etkileşimsiz her bağlamda doğru seçimdir: Ansible playbook’ları, Terraform sağlayıcıları, Docker `RUN` talimatları, cloud-init betikleri ve CI/CD hattları. Stdin bağımlılığı olmadan belirleyici çıktı üretir.
“`bash
Ansible task equivalent
useradd -m -s /bin/bash -G sudo -c "Deploy User" deployuser
echo "deployuser:$(openssl passwd -6 'securepassword')" | chpasswd
“`
Dağıtımlar Arası Taşınabilirlik
Hem Debian tabanlı hem de RHEL tabanlı sistemlerde çalışması amaçlanan herhangi bir kabuk betiği `useradd` kullanmalıdır. `adduser` davranışına güvenmek, CentOS, Fedora, Rocky Linux veya Alpine Linux’ta sessiz hatalara veya beklenmedik davranışlara yol açar.
Sistem ve Servis Hesapları
Daemon’lar için kilitli, girişsiz servis hesapları oluşturmak `useradd` komutunun uzmanlık alanıdır:
“`bash
useradd -r -s /usr/sbin/nologin -d /var/lib/myservice -m myservice
“`
`-r` bayrağı, sistem hesabı eşiğinin altında bir UID atar, yöneticilere bunun bir insan kullanıcı hesabı olmadığını bildirir ve servis yalıtımının kritik önem taşıdığı VPS Hosting ortamlarında uygulama dağıtımı için standart bir kalıptır.
Hassas UID/GID Kontrolü
NFS ortamlarında, konteyner orkestrasyonunda veya birden fazla sunucu arasında kullanıcı veritabanlarını senkronize ederken tutarlı UID ve GID’ler zorunludur. `useradd -u 1500 -g 1500` bunu garanti eder; `adduser` ise önemli yapılandırma olmadan aynı belirleyici kontrolü sunmaz.
adduser Ne Zaman Kullanılır
Etkileşimli Sunucu Kurulumu
Yeni bir Dedicated Server‘ı manuel olarak sağlarken ve ilk birkaç insan kullanıcı hesabını eklerken, `adduser` eksik kurulum riskini azaltır. Yönlendirmeli istemler, parola adımını unutmayı neredeyse imkânsız kılar.
Standart Varsayılanlarla Debian/Ubuntu Ortamları
Tüm altyapınız Debian veya Ubuntu üzerinde çalışıyorsa ve standart ev dizinli kullanıcılar oluşturuyorsanız, `adduser` daha az bayrak hatırlamanızı gerektirerek daha hızlı doğru sonuçlar üretir.
Oluşturma Sonrası Grup Yönetimi
Mevcut bir kullanıcıyı mevcut bir gruba eklemek için `adduser username groupname` sözdizimi, `usermod -aG groupname username` komutuna kıyasla daha temizdir; her ikisi de geçerlidir.
Genç Yöneticilerin Yetiştirilmesi
`adduser` komutunun etkileşimli yapısı, onu daha iyi bir öğretim aracı haline getirir. Önemli alanları (parola, tam ad) öne çıkarır ve yönetici hazır olana kadar UID aralıkları ile iskelet dizinlerinin karmaşıklığını gizler.
Kritik Uç Durumlar ve Tuzaklar
Eksik Ev Dizini Tuzağı
Debian/Ubuntu’da `useradd username` komutunu `-m` olmadan çalıştırmak, kullanıcıyı oluşturur ancak ev dizinini oluşturmaz. Kullanıcı giriş yapabilir (bir parola ayarlandıktan sonra), ancak `$HOME` mevcut olmayacaktır; bu durum, ilk girişte ev dizinine yazan her uygulamada — `.bash_history`, `.ssh/authorized_keys` ve pek çok uygulama yapılandırma dizini dahil — hatalara yol açar.
“`bash
Verify home directory existence after creation
ls -la /home/newuser || echo "Home directory missing — run: mkhomedir_helper newuser"
“`
Shadow Dosyası Kilitleme
Her iki komut da yazma işlemleri sırasında `/etc/shadow` dosyasını kilitler. Aynı anda düzinelerce kullanıcı oluşturan yüksek eşzamanlılıklı sağlama betiklerinde bu durum yarış koşullarına neden olur. Toplu kullanıcı oluştururken bir kuyruk veya sıralı yürütme kullanın.
Konteynerleştirilmiş Ortamlarda UID Çakışması
VPS with cPanel veya diğer kontrol paneli ortamlarında uygulama dağıtırken, panel UID tahsisini kendisi yönetir. `useradd` komutunu sabit kodlanmış bir UID ile manuel olarak çalıştırmak, panel tarafından atanan UID’lerle çakışabilir ve birden fazla hesapta izin hatalarına neden olabilir. Bir UID’yi manuel olarak belirtmeden önce her zaman `getent passwd | awk -F: '{print $3}' | sort -n` dosyasını kontrol edin.
Betik Yazımı için adduser –disabled-password
Bir betikte `adduser` kullanmanız gerekiyorsa (örneğin, `/etc/adduser.conf` varsayılanlarından yararlanmak için), etkileşimli istemleri bastırın:
“`bash
adduser –disabled-password –gecos "Automated User,,," scriptuser
echo "scriptuser:$(openssl passwd -6 'password')" | chpasswd
“`
`–gecos` bayrağı, GECOS alanlarıyla eşleşen virgülle ayrılmış bir dize kabul ederek tüm etkileşimli istemleri ortadan kaldırır.
PAM ve NSS Entegrasyonu
Ne `useradd` ne de `adduser`, LDAP, Active Directory veya diğer merkezi kimlik doğrulama sistemleri için PAM modüllerini veya NSS (Name Service Switch) girişlerini yapılandırır. `sssd` veya `winbind` ile entegre sunucularda, her iki komutla yerel kullanıcı oluşturmak, dizin hizmeti hesaplarıyla çakışabilecek veya onlar tarafından geçersiz kılınabilecek hesaplar oluşturur. Etki alanına katılmış sistemlerde yerel kullanıcı oluşturmadan önce `/etc/nsswitch.conf` dosyasını doğrulayın.
İskelet Dosyası Özelleştirme
Her iki komut da varsayılan olarak `/etc/skel` dizininden kopyalar. Her kullanıcının önceden yapılandırılmış `.bashrc`, `.vimrc` veya SSH yapılandırmasına ihtiyaç duyduğu Shared Web Hosting ortamlarını yöneten ekipler için, hesap oluşturulduktan sonra dosyaları değiştirmek yerine her iki komutu çalıştırmadan önce `/etc/skel` dizinini doldurmak doğru yaklaşımdır.
Kullanıcı Oluşturmayı Doğrulama
Hangi komutu kullandığınızdan bağımsız olarak sonucu doğrulayın:
“`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"
“`
Kullanıcıları Değiştirme ve Silme
`useradd` ve `adduser` yalnızca hesap oluşturur. Oluşturma sonrası yönetim farklı komutlar kullanır:
- `usermod` — Mevcut kullanıcı özelliklerini değiştirir (kabuk, gruplar, ev dizini, sona erme).
- `userdel` / `deluser` — Hesapları kaldırır. Debian’daki `deluser –remove-home username` ayrıca ev dizinini ve posta biriktiricisini de kaldırır.
- `passwd` — Parolaları ayarlar veya değiştirir, hesapları kilitler/kilidini açar.
- `chage` — Parola eskime ve sona erme politikalarını yönetir.
“`bash
Lock an account without deleting it
usermod -L username
Unlock
usermod -U username
Force password change on next login
chage -d 0 username
“`
Pratik Karar Matrisi
Doğru komutu seçmek için bu kontrol listesini kullanın:
- Betik Debian dışı bir sistemde mi çalışıyor ya da taşınabilir olması mı gerekiyor? `useradd` kullanın.
- Bu otomatik, etkileşimsiz bir ortam mı (CI/CD, Ansible, Docker)? `useradd` kullanın.
- NFS veya konteyner tutarlılığı için belirli bir UID/GID’e mi ihtiyacınız var? `useradd -u -g` kullanın.
- Giriş kabuğu olmayan bir sistem/servis hesabı mı oluşturuyorsunuz? `useradd -r -s /usr/sbin/nologin` kullanın.
- Debian/Ubuntu’dasınız ve etkileşimli olarak standart bir insan kullanıcı hesabı mı oluşturuyorsunuz? `adduser` kullanın.
- Mevcut bir kullanıcıyı temiz bir tek satırlık komutla bir gruba eklemek mi istiyorsunuz? `adduser username groupname` kullanın.
- Debian’da belge yazıyor veya genç personeli mi eğitiyorsunuz? `adduser` kullanın.
- Ev dizini konumunu, sona ermeyi veya kabuğu ölçekte etkileşimsiz olarak özelleştirmeniz mi gerekiyor? Açık bayraklarla `useradd` kullanın.
Doğru kullanıcı hesabı yönetimi, sunucu güvenliğinin temelini oluşturur. İster tek bir VPS ister bir Dedicated Servers filosu yönetiyor olun, her komutun diske tam olarak ne yazdığını — ve neyi ayarlamadan bıraktığını — anlamak, eksik hesap sağlamadan kaynaklanan ayrıcalık yükseltme ve kimlik doğrulama hatası sınıfını önler.
—
SSS
useradd varsayılan olarak ev dizini oluşturur mu?
Bu, dağıtıma bağlıdır. Red Hat tabanlı sistemlerde (RHEL, CentOS, Rocky Linux), `CREATE_HOME yes` dosyasındaki `/etc/login.defs` ayarı, `useradd` komutunun ev dizinini otomatik olarak oluşturmasına neden olur. Debian ve Ubuntu’da ise `-m` bayrağını açıkça geçmediğiniz sürece ev dizini oluşturulmaz.
adduser, CentOS veya Rocky Linux’ta kullanılabilir mi?
RHEL tabanlı dağıtımlarda `adduser`, Debian/Ubuntu’da bulunan etkileşimli Perl sarmalayıcısı değil, `useradd` komutuna sembolik bir bağlantıdır. CentOS’ta `adduser username` çalıştırmak, `useradd username` ile aynı şekilde davranır — istem yok, Debian tarzı varsayılanlarla otomatik ev dizini yok.
adduser’ı bir betikte etkileşimsiz olarak nasıl kullanabilirim?
Parola istemini atlamak için `–disabled-password` ve GECOS alanı istemlerini atlamak için `–gecos ""` geçirin: `adduser –disabled-password –gecos "" username`. Parolayı daha sonra `echo "username:password" | chpasswd` ile veya bir `openssl passwd -6` karması aktararak ayarlayın.
/etc/login.defs ile /etc/adduser.conf arasındaki fark nedir?
`/etc/login.defs`, `useradd`, `userdel` ve `usermod` tarafından okunan sistem genelinde yapılandırma dosyasıdır — UID/GID aralıklarını, parola eskime varsayılanlarını ve ev dizini oluşturma davranışını kontrol eder. `/etc/adduser.conf` ise yalnızca Debian tabanlı sistemlerdeki `adduser` ve `deluser` Perl betikleri tarafından okunur ve varsayılan kabuk, ev dizini üst yolu ve iskelet dizini gibi üst düzey varsayılanları kontrol eder.
Aynı Debian sunucusunda useradd ve adduser’ı güvenle karıştırabilir miyim?
Evet. Her ikisi de nihayetinde aynı `/etc/passwd`, `/etc/shadow` ve `/etc/group` dosyalarına yazar. Her iki komutla oluşturulan hesaplar sistem düzeyinde birbirinden ayırt edilemez. Tek pratik endişe tutarlılıktır: ekibiniz etkileşimli olarak `adduser` kullanıyorsa ve bir otomasyon betiği `useradd` komutunu `-m` olmadan kullanıyorsa, bazı kullanıcıların ev dizinleri eksik olabilir. Her ortam için tek bir yaklaşımda standartlaşın ve bunu belgeleyin.
