
Linux'da Kullanıcı Bilgilerini Değiştirme ve Parola Yönetimi
- Murat Akpınar
- Linux öğrenme yolculuğu
- 19 Kasım 2023
İçindekiler
Bir çalışan işten ayrıldı, siz de hesabını kapatmak için usermod -L çalıştırdınız. Komut hata vermedi, /etc/shadow satırının başına ! düştü, iş bitti gibi görünüyor. Ama o kullanıcı SSH anahtarıyla sunucuya hâlâ girebiliyor — çünkü -L hesabı değil, parolayı kilitler.
Bu yazıda mevcut bir hesabın kabuğunu, ev dizinini ve parola ömrünü değiştiren komutları göreceğiz: usermod, passwd ve çoğu rehberde atlanan chage. Ayrıca /etc/shadow‘un dokuz alanını tek tek okuyacağız — üçü neredeyse her yerde yanlış anlatılıyor.
Önce Bak: id, passwd -S ve chage -l
Değiştirmeden önce mevcut durumu okuyun. Üç komut, üç farklı pencere:
id ayse
# uid=1001(ayse) gid=1001(ayse) groups=1001(ayse),27(sudo),1005(bilgiislem)
sudo passwd -S ayse
# ayse P 2023-10-29 0 99999 7 -1
passwd -S yedi alan verir: kullanıcı adı, parola durumu, son değişiklik tarihi, sonra sırasıyla minimum yaş, maksimum yaş, uyarı süresi ve etkisizlik süresi. İkinci alan üç değer alabilir ve en çok işinize yarayacak olan odur:
| Değer | Anlamı |
|---|---|
P | Kullanılabilir bir parola var |
L | Parola kilitli (usermod -L ya da passwd -l uygulanmış) |
NP | Parola hiç yok — hesap parolasız, tehlikeli |
Tarihleri okunabilir biçimde isterseniz chage -l daha nettir:
sudo chage -l ayse
# Last password change : Eki 29, 2023
# Password expires : never
# Password inactive : never
# Account expires : never
# Maximum number of days between password change : 99999
# Number of days of warning before password expires : 7
usermod: Kabuk, Ev Dizini ve Grup Değiştirmek
usermod mevcut bir hesabın alanlarını düzenler. En çok kullanılan seçenekler:
| Seçenek | Ne yapar |
|---|---|
-s | Kullanıcının kabuğunu değiştirir (/bin/bash, /usr/sbin/nologin) |
-d | Ev dizini yolunu değiştirir — dizini taşımaz |
-m | -d ile birlikte, mevcut ev dizininin içeriğini yeni yere taşır |
-l | Kullanıcı adını değiştirir (ev dizini ve grup adı değişmez) |
-c | Açıklama alanını (GECOS) düzenler |
-g | Birincil grubu değiştirir |
-aG | Ek grup üyeliği ekler |
-L / -U | Parolayı kilitler / kilidini açar |
-e | Hesabın son kullanma tarihini belirler |
sudo usermod -s /bin/bash ayse
sudo usermod -c "Ayşe Yılmaz - Bilgi İşlem" ayse
-d‘yi -m olmadan yazmak en sık yapılan hatadır. Tek başına -d yalnızca /etc/passwd satırındaki yolu değiştirir; dosyalar eski yerinde kalır. Kullanıcı bir sonraki girişinde bomboş — hatta var olmayan — bir dizine düşer ve tüm dosyalarını kaybettiğini sanır:
sudo usermod -d /srv/ayse ayse # yalnız kayıt değişti, dosyalar /home/ayse'de kaldı
sudo usermod -d /srv/ayse -m ayse # doğrusu: içerik de taşınır
-m‘nin useradd -m ile aynı şey olmadığına dikkat edin: useradd -m ev dizinini oluşturur, usermod -m var olanı taşır. Mevcut dizin yoksa yenisi oluşturulmaz.
-g ile -aG de karıştırılır. -g birincil grubu değiştirir, eskisinin yerine geçer. -aG ek üyelik ekler — ve -a‘yı düşürüp yalnız -G yazarsanız kullanıcının diğer tüm ek üyelikleri silinir. Ayrıntısı gruplar yazısında.
/etc/shadow: Dokuz Alan, Üçü Yanlış Bilinir
Parolalar /etc/passwd‘de değil, yalnızca root’un okuyabildiği /etc/shadow‘da durur. Satırlar iki nokta ile ayrılmış dokuz alandan oluşur:
ayse:$y$j9T$2mKq7XvR1sPdN8wLcYtE30$Hn4vB6zQ1rT9sXcM2kL7pWdF5yJ8gA3eR0uV6iO1bC4:19659:0:99999:7:::
| # | Alan | Yukarıdaki satırda | Anlamı |
|---|---|---|---|
| 1 | Kullanıcı adı | ayse | |
| 2 | Parola hash’i | $y$… | $y$ yescrypt, $6$ SHA-512. Başında ! varsa kilitli, * ise parolayla giriş hiç yapılamaz |
| 3 | Son değişiklik | 19659 | 1970-01-01’den beri geçen gün sayısı (= 2023-10-29) |
| 4 | Minimum yaş | 0 | Parolayı değiştirdikten sonra kaç gün beklemeden yeniden değiştiremez |
| 5 | Maksimum yaş | 99999 | Parola kaç gün sonra süresi dolmuş sayılır |
| 6 | Uyarı süresi | 7 | Süre dolmadan kaç gün önce uyarılır |
| 7 | Etkisizlik süresi | boş | Parolanın süresi dolduktan sonra kaç gün daha kabul edileceği; bu süre de geçince kullanıcı giremez |
| 8 | Hesap son kullanma | boş | Hesabın kapanacağı tarih (yine gün sayısı olarak). Parola süresinden bağımsızdır |
| 9 | Ayrılmış | boş | Kullanılmıyor |
Son üç alan sık sık yanlış anlatılır. Özellikle 7. alan, başarısız giriş denemelerinden sonraki kilitlenme süresi değildir — o iş pam_faillock gibi PAM modüllerinin işidir ve /etc/shadow ile ilgisi yoktur. 7. alan yalnızca parolanın süresi dolduktan sonraki ek toleransı tanımlar. 8. alan ise parolayı değil hesabı kapatır; ikisi ayrı mekanizmadır.
Dosyayı elle düzenlemeyin. Tek bir alanı bozmak hesabı erişilemez hâle getirir; bu alanların hepsi passwd ve chage ile yönetilir.
Parola Yaşlandırma: chage
Yukarıdaki 4-8 arası alanları düzenleyen komut chage‘dir:
sudo chage -M 90 -W 14 ayse # parola 90 günde dolsun, 14 gün önceden uyarsın
sudo chage -m 1 ayse # değiştirdikten sonra 1 gün beklesin
sudo chage -I 7 ayse # süresi dolduktan sonra 7 gün tolerans (7. alan)
sudo chage -E 2026-12-31 ayse # hesap bu tarihte kapansın (8. alan, tarih UTC olarak yorumlanır)
En çok işe yarayanı, kullanıcıyı ilk girişte parola değiştirmeye zorlamaktır — yeni açılan hesaplarda standart uygulamadır:
sudo chage -d 0 ayse
Son değişiklik tarihini sıfırlar; kullanıcı bir sonraki oturum açışında parolasını değiştirmeden devam edemez.
Hesabı Kapatmak: -L Yetmez
Şimdi girişteki soruna dönelim. usermod -L yalnızca hash’in başına ! koyar:
sudo usermod -L ayse
sudo passwd -S ayse
# ayse L 2023-10-29 0 99999 7 -1
L görünüyor, parola artık çalışmıyor. Ama parola, sisteme girmenin tek yolu değildir:
~/.ssh/authorized_keysiçindeki bir anahtarla SSH oturumu hâlâ açılır; anahtar doğrulaması parolaya bakmaz.- Kullanıcı adına çalışan
cronişleri çalışmaya devam eder. - Başka bir yönetici
sudo su - ayseile o kullanıcıya geçebilir.
Hesabı gerçekten kapatmak için üçünü birden yapın:
sudo usermod -L ayse # parolayı kilitle
sudo chage -E 1 ayse # hesabı süresi dolmuş say
sudo usermod -s /usr/sbin/nologin ayse # kabuğu kaldır
chage -E 1 hesabın son kullanma tarihini 1970-01-02 yapar; oturum açma katmanı hesabı süresi dolmuş kabul eder ve SSH anahtarı da dahil hiçbir yöntemle giriş yapılamaz. usermod(8)‘in -L açıklamasındaki “yalnızca parolayla erişimi değil hesabı da kilitlemek istiyorsanız son kullanma tarihini 1 yapın” notu tam olarak bunu anlatır.
Sıfır yazmayın. Akla yatkın görünen chage -E 0 bu işi yapmaz: shadow(5), 8. alanda 0 değerinin “ya süresi hiç dolmayan bir hesap ya da 1970-01-01 tarihi olarak yorumlandığını, bu yüzden kullanılmaması gerektiğini” söyler. Yani -E 0 yazdığınızda hesabın kapanıp kapanmadığı sistemin yorumuna kalır — ayrıldığını sandığınız kullanıcı hâlâ girebilir. Doğru değer 1‘dir.
Çalışan süreçleri de unutmayın — kilitlemek açık oturumları kapatmaz:
sudo pkill -u ayse # kullanıcının süreçlerini sonlandır
Sonuç
-gbirincil grubu değiştirir,-aGek grup ekler. İkisini karıştırmak kullanıcının mevcut üyeliklerini silmek demektir; ayrıntısı Gruplar ve kullanıcıları gruplara ekleme/çıkarma yazısında./etc/shadow‘un 7. alanı başarısız giriş sayacı değildir. Parolanın süresi dolduktan sonraki toleransı tanımlar; başarısız denemeye göre kilitlemepam_faillock‘un işidir. Alanları elle değilpasswdvechageile düzenleyin.-Lparolayı kilitler, hesabı kapatmaz. Kilitli bir hesaba SSH anahtarıyla hâlâ girilebilir vecronişleri çalışmaya devam eder; hesabı gerçekten kapatan komutchage -E 1‘dir —-E 0değil, çünküshadow(5)‘e göre 0 belirsizdir.
Yol haritasında sırada üyeliklerin kendisi var: Gruplar ve Kullanıcıları Gruplara Ekleme/Çıkarma. Serinin tamamına GNU/Linux Öğrenme Yolculuğu sayfasından ulaşabilirsiniz.


