Ubuntu’da Kullanıcı ve Grup Yönetimi

Bir Ubuntu sunucusunu ilk kurduğunuzda yapmanız gereken en önemli şeylerden biri kullanıcı ve grup yönetimini doğru şekilde yapılandırmaktır. Yanlış yapılandırılmış kullanıcı yetkileri, güvenlik açıklarına ve ciddi sistem sorunlarına yol açabilir. Bu yazıda Ubuntu üzerinde kullanıcı ve grup yönetimini en ince ayrıntısına kadar ele alacağız.

Kullanıcı Yönetiminin Temelleri

Ubuntu’da kullanıcı bilgileri /etc/passwd dosyasında tutulur. Parola hash’leri ise /etc/shadow dosyasında saklanır. Bu dosyaları doğrudan düzenlemek yerine sistem araçlarını kullanmak hem daha güvenli hem de daha pratiktir.

Mevcut kullanıcıları listelemek için:

cat /etc/passwd
# Sadece gerçek kullanıcıları görmek için (UID >= 1000)
awk -F: '$3 >= 1000 {print $1, $3, $6, $7}' /etc/passwd

Şu an sistemde oturum açmış kullanıcıları görmek için who veya w komutunu kullanabilirsiniz:

w
# veya
who
# veya daha detaylı bilgi için
last | head -20

Yeni Kullanıcı Oluşturma

adduser ve useradd Farkı

Ubuntu’da iki farklı kullanıcı oluşturma komutu vardır: adduser ve useradd. Bu iki komut arasındaki farkı bilmek önemlidir.

adduser: Debian/Ubuntu’ya özgü, interaktif, kullanıcı dostu bir betiktir. Ev dizini oluşturur, şifre sorar, temel dosyaları kopyalar.

useradd: Tüm Linux dağıtımlarında bulunan düşük seviyeli C programıdır. Betik veya otomasyon için idealdir ama manuel kullanımda dikkatli olmak gerekir.

Günlük operasyonlarda adduser kullanmak çok daha pratiktir:

# Interaktif kullanıcı oluşturma
sudo adduser ahmet

# Belirli parametrelerle kullanıcı oluşturma
sudo adduser --home /opt/appuser --shell /bin/bash --gecos "Uygulama Kullanicisi" appuser

# useradd ile otomatik ev dizini oluşturma (betikler için)
sudo useradd -m -s /bin/bash -c "Servis Hesabi" servis_user

Gerçek dünya senaryosu: Bir web sunucusunda uygulama deploy eden bir kullanıcı oluşturuyorsunuz. Bu kullanıcının ev dizini /opt/deploy altında olsun ve sadece bash kabuğuna erişimi olsun:

sudo adduser --home /opt/deploy --shell /bin/bash deployer
sudo mkdir -p /opt/deploy
sudo chown deployer:deployer /opt/deploy

Kullanıcı Bilgilerini Güncelleme

Mevcut bir kullanıcının bilgilerini değiştirmek için usermod komutunu kullanırız:

# Kullanıcı adını değiştirme
sudo usermod -l yeni_ad eski_ad

# Ev dizinini değiştirme ve taşıma
sudo usermod -d /yeni/ev/dizini -m kullanici

# Kabuğu değiştirme
sudo usermod -s /bin/zsh ahmet

# Hesabı kilitleme
sudo usermod -L ahmet

# Hesabı açma
sudo usermod -U ahmet

# Hesap bitiş tarihi belirleme
sudo usermod -e 2024-12-31 ahmet

-l: Kullanıcı adını değiştirir -d: Ev dizinini değiştirir -m: Ev dizini değiştirilirken dosyaları taşır -s: Varsayılan kabuğu değiştirir -L: Hesabı kilitler -U: Hesabı açar -e: Hesap bitiş tarihini belirler

Parola Yönetimi

Parola yönetimi sadece parola değiştirmekten ibaret değildir. Parola politikaları, son kullanma tarihleri ve hesap güvenliği de bu kapsamda değerlendirilir.

# Kullanıcı parolasını değiştirme
sudo passwd ahmet

# Parolayı süresi dolmuş olarak işaretleme (ilk girişte değiştirmeye zorla)
sudo passwd -e ahmet

# Parola politikasını görüntüleme
sudo chage -l ahmet

# Parola son kullanma tarihini belirleme
sudo chage -M 90 ahmet  # 90 günde bir değiştirme zorunluluğu
sudo chage -m 7 ahmet   # En az 7 gün kullanma zorunluluğu
sudo chage -W 14 ahmet  # Bitiş tarihinden 14 gün önce uyarı

Kurumsal ortamlarda sık karşılaşılan bir senaryo: Yeni işe başlayan bir çalışan için hesap oluştururken ilk girişte şifre değişikliğine zorlamak:

sudo adduser yeni_calisan
sudo passwd -e yeni_calisan
sudo chage -M 90 -m 1 -W 7 yeni_calisan

Bu şekilde kullanıcı ilk girişinde şifresini değiştirmek zorunda kalır, şifresi 90 günde bir sona erer ve 7 gün önceden uyarı alır.

Grup Yönetimi

Gruplar, kullanıcıları organize etmenin ve yetki yönetimini kolaylaştırmanın en pratik yoludur. Ubuntu’da her kullanıcının bir birincil grubu (primary group) ve birden fazla tali grubu (secondary group) olabilir.

Grup Oluşturma ve Yönetme

# Yeni grup oluşturma
sudo groupadd developers
sudo groupadd -g 2000 operations  # Belirli GID ile grup oluşturma

# Gruba kullanıcı ekleme
sudo usermod -aG developers ahmet
sudo usermod -aG developers,operations mehmet  # Birden fazla gruba ekleme

# gpasswd ile grup yönetimi
sudo gpasswd -a ahmet developers   # Kullanıcı ekleme
sudo gpasswd -d ahmet developers   # Kullanıcıyı gruptan çıkarma
sudo gpasswd -A ahmet developers   # Ahmet'i grup yöneticisi yapma

# Grup üyelerini görme
getent group developers
# veya
grep developers /etc/group

Önemli not: usermod -aG komutunda -a parametresini unutmayın! -a (append) parametresi olmadan kullanırsanız kullanıcının mevcut tüm grup üyelikleri silinir ve sadece belirttiğiniz gruba eklenir. Bu çok sık yapılan bir hatadır.

Kullanıcının Grup Üyeliklerini Kontrol Etme

# Mevcut kullanıcının gruplarını görme
groups

# Başka bir kullanıcının gruplarını görme
groups ahmet

# Daha detaylı bilgi için
id ahmet

Örnek çıktı şöyle görünür: uid=1001(ahmet) gid=1001(ahmet) groups=1001(ahmet),27(sudo),1002(developers)

sudo Yetkilendirmesi

Ubuntu’da root erişimi için sudo mekanizması kullanılır. Root hesabı varsayılan olarak devre dışıdır ve bu güvenlik açısından doğru bir yaklaşımdır.

Kullanıcıya sudo Yetkisi Verme

En hızlı yol kullanıcıyı sudo grubuna eklemektir:

sudo usermod -aG sudo ahmet

Ancak bu yöntem kullanıcıya tam sudo yetkisi verir. Daha granüler kontrol için /etc/sudoers dosyasını kullanmak gerekir. Bu dosyayı doğrudan değil, her zaman visudo komutuyla düzenleyin:

sudo visudo

Sudoers dosyasına ekleyebileceğiniz bazı kurallar:

# Tam sudo yetkisi (parola ile)
ahmet ALL=(ALL:ALL) ALL

# Parolasız sudo (dikkatli kullanın!)
ahmet ALL=(ALL:ALL) NOPASSWD: ALL

# Sadece belirli komutlar için sudo
ahmet ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx

# Grup tabanlı yetkilendirme
%developers ALL=(ALL) /usr/bin/apt update, /usr/bin/apt upgrade

# Belirli sunucuda belirli kullanıcı olarak çalıştırma
deploy_user ALL=(www-data) NOPASSWD: /usr/bin/rsync

Gerçek dünya senaryosu: Bir DevOps ekibiniz var ve bu ekip sadece nginx servisini yönetebilmeli, başka hiçbir şeye dokunamaz. /etc/sudoers.d/ dizininde ayrı bir dosya oluşturmak daha temiz bir yaklaşımdır:

sudo visudo -f /etc/sudoers.d/devops-nginx

Dosya içeriği:

# DevOps ekibi nginx yönetimi
%devops ALL=(ALL) NOPASSWD: /usr/bin/systemctl start nginx
%devops ALL=(ALL) NOPASSWD: /usr/bin/systemctl stop nginx
%devops ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
%devops ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload nginx
%devops ALL=(ALL) NOPASSWD: /usr/bin/nginx -t

Kullanıcı Silme

Kullanıcı silme işleminde dikkatli olmak gerekir. Kullanıcının dosyaları ne olacak? Çalışan prosesleri var mı?

# Kullanıcıyı ve ev dizinini sil
sudo deluser --remove-home ahmet

# Kullanıcıyı, ev dizinini ve mail kutusunu sil
sudo deluser --remove-all-files ahmet

# Sadece hesabı sil (ev dizini kalır)
sudo deluser ahmet

# userdel alternatifi
sudo userdel -r ahmet  # -r ev dizinini de siler

Kullanıcı silmeden önce o kullanıcıya ait dosyaları bulmak iyi bir pratiktir:

# Sistemde kullanıcıya ait tüm dosyaları bul
sudo find / -user ahmet -type f 2>/dev/null

# Kullanıcıya ait çalışan prosesler
ps aux | grep ahmet

# Aktif oturumları sonlandırma
sudo pkill -u ahmet

Hesap Kilitleme ve Güvenlik

Bir çalışan işten ayrıldığında veya güvenlik ihlali şüphesi durumunda hesabı hızlıca kilitlemek gerekebilir:

# Hesabı kilitle
sudo usermod -L ahmet
sudo passwd -l ahmet  # Alternatif yöntem

# SSH key erişimini de engellemek için
sudo usermod -s /sbin/nologin ahmet

# Hesabı tamamen geçersiz kıl (1970-01-02 tarihi geçmişte kalır)
sudo usermod -e 1 ahmet

# Kilidi kaldır
sudo usermod -U ahmet
sudo passwd -u ahmet

Servis Hesapları

Web sunucuları, veritabanları veya uygulamalar için özel servis hesapları oluşturmak güvenlik açısından kritiktir. Bu hesapların shell erişimi olmamalı ve mümkünse home dizinleri sınırlı olmalıdır.

# Giriş yapamayan servis hesabı oluşturma
sudo useradd -r -s /usr/sbin/nologin -d /nonexistent -c "Myapp Servisi" myapp

# Parametre açıklamaları:
# -r: Sistem hesabı (düşük UID, genellikle 999 altı)
# -s /usr/sbin/nologin: Shell yok, giriş yapılamaz
# -d /nonexistent: Ev dizini yok
# -c: Hesap açıklaması

# Servis hesabı için özel dizin oluşturma
sudo mkdir -p /var/lib/myapp
sudo chown myapp:myapp /var/lib/myapp
sudo chmod 750 /var/lib/myapp

Örnek senaryo: Node.js uygulamanız için güvenli bir servis hesabı:

sudo groupadd nodejs-app
sudo useradd -r -g nodejs-app -s /usr/sbin/nologin -d /opt/nodejs-app nodejs-app
sudo mkdir -p /opt/nodejs-app /var/log/nodejs-app
sudo chown -R nodejs-app:nodejs-app /opt/nodejs-app /var/log/nodejs-app
sudo chmod 750 /opt/nodejs-app

Toplu Kullanıcı Yönetimi

Büyük ekiplerle çalışırken tek tek kullanıcı oluşturmak yerine betikler kullanmak hayat kurtarır:

#!/bin/bash
# Toplu kullanıcı oluşturma betiği

KULLANICI_LISTESI="ali veli ayse fatma"
VARSAYILAN_GRUP="developers"
GECICI_PAROLA="Gecici@2024!"

for kullanici in $KULLANICI_LISTESI; do
    # Kullanıcı zaten varsa atla
    if id "$kullanici" &>/dev/null; then
        echo "$kullanici zaten mevcut, atlaniyor..."
        continue
    fi
    
    # Kullanıcı oluştur
    sudo useradd -m -s /bin/bash -G "$VARSAYILAN_GRUP" "$kullanici"
    
    # Geçici parola ata
    echo "$kullanici:$GECICI_PAROLA" | sudo chpasswd
    
    # İlk girişte parola değiştirmeye zorla
    sudo passwd -e "$kullanici"
    
    # Parola politikası
    sudo chage -M 90 -W 7 "$kullanici"
    
    echo "$kullanici olusturuldu."
done

echo "Tum kullanicilar olusturuldu."

Kullanıcı Aktivitesini İzleme

Bir sysadmin olarak kullanıcıların ne yaptığını takip etmek önemlidir:

# Son giriş yapan kullanıcılar
last | head -20

# Başarısız giriş denemeleri
sudo lastb | head -20

# Belirli kullanıcının giriş geçmişi
last ahmet

# Şu an oturum açık olan kullanıcılar
who -a

# Kullanıcının son aktivitesi
lastlog | grep -v "Never logged in"

# Giriş yapamayan hesapları listele
grep -E "(/usr/sbin/nologin|/bin/false)" /etc/passwd

/etc/skel Yapılandırması

Yeni kullanıcılar oluşturulduğunda ev dizinlerine kopyalanacak varsayılan dosyalar /etc/skel/ dizininde bulunur. Bu dizini düzenleyerek tüm yeni kullanıcılara standart bir ortam hazırlayabilirsiniz:

# Skel içeriğini görme
ls -la /etc/skel/

# Tüm yeni kullanıcılara özel bash konfigürasyonu eklemek
sudo nano /etc/skel/.bashrc

# Ekibinize özel alias'lar veya ortam değişkenleri
cat >> /etc/skel/.bashrc << 'EOF'
# Ekip standart aliasları
alias ll='ls -alF'
alias la='ls -A'
alias update='sudo apt update && sudo apt upgrade'
export EDITOR=nano
export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTTIMEFORMAT="%F %T "
EOF

Yaygın Sorunlar ve Çözümleri

Kullanıcı sudo grubuna eklendi ama çalışmıyor: Yeni grup üyeliği aktif oturum için geçerli değildir. Kullanıcının oturumu kapatıp açması veya newgrp sudo komutunu kullanması gerekir.

Ev dizini oluşturulmamış: useradd -m yerine sadece useradd kullandıysanız ev dizini oluşturulmaz. Sonradan oluşturmak için:

sudo mkhomedir_helper ahmet
# veya
sudo cp -r /etc/skel /home/ahmet
sudo chown -R ahmet:ahmet /home/ahmet

Kullanıcı giriş yapamıyor: Shell’in doğru ayarlandığını kontrol edin:

grep ahmet /etc/passwd
# Shell /usr/sbin/nologin ise değiştirin
sudo usermod -s /bin/bash ahmet
# Hesabın kilitli olmadığını kontrol edin
sudo passwd -S ahmet

Sonuç

Ubuntu’da kullanıcı ve grup yönetimi, sistem güvenliğinin temel taşlarından biridir. adduser, usermod, groupadd ve visudo gibi araçları doğru kullanmak, hem güvenli hem de yönetilebilir bir ortam oluşturmanızı sağlar.

Özetlemek gerekirse:

  • Yeni kullanıcılar için her zaman adduser kullanın, otomasyon için useradd‘ı tercih edin
  • Sudo yetkilerini minimum gereksinim prensibine göre verin, tam yetki vermekten kaçının
  • Servis hesaplarını mutlaka nologin shell ile oluşturun
  • Parola politikalarını chage ile zorunlu kılın
  • Grup yönetiminde -aG parametresindeki -a‘yı asla unutmayın
  • Çalışan ayrıldığında hesabı silmek yerine önce kilitleyin, daha sonra silersiniz
  • /etc/sudoers.d/ dizinini kullanarak sudoers kurallarını düzenli tutun
  • Büyük ekiplerde toplu işlemler için betik yazın

Bu prensiplere uyduğunuzda kullanıcı yönetimi hem güvenli hem de sürdürülebilir bir hal alır. Herhangi bir konuda takılırsanız man adduser, man usermod gibi man sayfaları her zaman en güncel ve güvenilir kaynaktır.

Yorum yapın