Takip et

Ubuntu’da Linux Sistem Kullanıcılarını Görüntüleme Rehberi

Ubuntu’da Linux Sistem Kullanıcılarını Görüntüleme Rehberi Linux tabanlı işletim sistemleri, çok kullanıcılı bir yapıya sahiptir ve bu

Ubuntu’da Linux Sistem Kullanıcılarını Görüntüleme Rehberi

Linux tabanlı işletim sistemleri, çok kullanıcılı bir yapıya sahiptir ve bu yapı, sistemin güvenliği ve işlevselliği için temel bir unsurdur. Ubuntu da bu prensiplere sıkı sıkıya bağlıdır. Bir Linux sisteminde kullanıcılar genellikle iki ana kategoriye ayrılır: etkileşimli oturum açabilen, belirli görevleri yerine getiren “normal kullanıcılar” ve sistemin arka planında çalışan servisler, uygulamalar veya diğer sistem bileşenleri için oluşturulmuş “sistem kullanıcıları”. Bu teknik makalede, Ubuntu’da sistem kullanıcılarını nasıl görüntüleyeceğinizi, neden önemli olduklarını ve bu kullanıcıların sisteminizdeki rolünü nasıl anlayacağınızı ayrıntılı bir şekilde ele alacağız. Sistem yönetimi, güvenlik denetimi veya sorun giderme amacıyla olsun, sistem kullanıcılarını doğru bir şekilde tanımlamak ve izlemek, her Linux yöneticisi için vazgeçilmez bir beceridir.

Giriş: Neden Sistem Kullanıcıları Önemlidir?

Linux işletim sistemlerinde, her süreç belirli bir kullanıcı bağlamında çalışır. Bu, güvenlik modelinin temelini oluşturur. Bir web sunucusu (örneğin Apache veya Nginx), bir veritabanı sunucusu (PostgreSQL, MySQL) veya bir posta sunucusu (Postfix) gibi kritik servisler, genellikle root kullanıcısı yerine daha az yetkiye sahip özel sistem kullanıcıları altında çalışacak şekilde yapılandırılır. Bu yaklaşım, olası bir güvenlik açığının sömürülmesi durumunda, saldırganın elde edeceği yetkileri minimumda tutmayı amaçlar. Örneğin, www-data kullanıcısı altında çalışan bir web sunucusu ele geçirildiğinde, saldırganın erişimi sadece www-data kullanıcısının izinleriyle sınırlı kalır ve tüm sistemin ele geçirilmesi engellenir.

Sistem kullanıcıları, genellikle interaktif bir kabuk oturumu açma yeteneğine sahip değildirler ve kendilerine ait bir ev dizinleri bulunmaz. Amaçları, belirli sistem servisleri için kimlik sağlamak ve bu servislerin dosya sistemindeki belirli kaynaklara erişimini kontrol etmektir. Bu makale boyunca, bu tür kullanıcıları nasıl listeleyeceğinizi, özelliklerini nasıl yorumlayacağınızı ve güvenlik açısından nelere dikkat etmeniz gerektiğini adım adım inceleyeceğiz.

Temel Kavramlar: Kullanıcı Hesapları, Gruplar ve Kimlikler

Linux’ta her kullanıcı ve grup bir sayısal kimliğe sahiptir. Bu kimlikler, dosya sistemi izinlerini ve süreç sahipliğini belirlemek için kullanılır.

Kullanıcı Kimlikleri (UID) ve Grup Kimlikleri (GID)

* UID (User ID): Her kullanıcının benzersiz bir kullanıcı kimliği vardır. root kullanıcısı her zaman UID 0’a sahiptir ve sistemdeki en yüksek yetkiye sahip kullanıcıdır.
* GID (Group ID): Her grubun benzersiz bir grup kimliği vardır. Her kullanıcı aynı zamanda birincil bir gruba atanır ve birden fazla ikincil gruba üye olabilir.

Linux dağıtımları arasında UID aralıkları farklılık gösterebilir, ancak genel olarak şu standartlar geçerlidir:

* UID 0: root kullanıcısı.
* UID 1-999: Genellikle sistem kullanıcıları ve servis hesapları için ayrılmıştır. Bu aralık, sistemin çalışması için gerekli olan ve doğrudan insanlar tarafından kullanılmayan hesapları içerir. Örneğin, daemon, bin, sys, nobody, www-data, postfix, mysql gibi kullanıcılar bu aralıkta yer alır.
* UID 1000 ve üzeri: Genellikle normal, interaktif kullanıcı hesapları için ayrılmıştır. Ubuntu’da varsayılan olarak ilk oluşturulan kullanıcıya 1000 UID’si atanır ve sonraki kullanıcılar için bu sayı artarak devam eder.

Bu UID aralıkları, /etc/login.defs dosyasındaki SYS_UID_MIN, SYS_UID_MAX, UID_MIN, UID_MAX gibi parametrelerle yapılandırılabilir.

Kabuk (Shell) ve Giriş (Login) Yeteneği

Bir kullanıcının kabuk türü, o kullanıcının sistemde etkileşimli bir oturum açıp açamayacağını belirler.

* /bin/bash, /bin/sh, /bin/zsh gibi kabuklar, kullanıcının komut satırına erişmesine ve komutları çalıştırmasına olanak tanır. Bu kabuklar genellikle normal kullanıcılar için atanır.
* /usr/sbin/nologin veya /bin/false gibi kabuklar, kullanıcının sisteme giriş yapmasını engeller. Bu, sistem kullanıcıları için standart bir uygulamadır, çünkü bu hesapların amacı etkileşimli oturumlar açmak değil, arka plan servislerini çalıştırmaktır. Bir sistem kullanıcısının kabuğunun /bin/bash olarak ayarlanması ciddi bir güvenlik riski oluşturabilir.

Kullanıcı ve Grup Bilgilerini Saklayan Dosyalar

Linux sistemlerinde kullanıcı ve grup bilgileri genellikle üç ana dosyada saklanır:

* /etc/passwd: Tüm kullanıcı hesaplarının temel bilgilerini içerir. Her satır bir kullanıcıyı temsil eder ve yedi alan içerir: kullanıcı adı, şifre placeholder’ı (x), UID, GID, yorum/açıklama, ev dizini ve kabuk.
/etc/shadow: Kullanıcı şifrelerinin şifrelenmiş hallerini ve şifre politikalarını (son değiştirme tarihi, geçerlilik süresi vb.) saklar. Bu dosya sadece root tarafından okunabilir. Sistem kullanıcıları genellikle bir şifreye sahip olmadıkları için bu dosyada veya ! gibi özel karakterler ile işaretlenirler.
* /etc/group: Tüm grupların bilgilerini içerir. Her satır bir grubu temsil eder ve dört alan içerir: grup adı, şifre placeholder’ı (x), GID ve gruba dahil olan kullanıcıların listesi.

Bu dosyaları doğrudan okuyarak veya bu dosyaları temel alan komutları kullanarak sistem kullanıcılarını görüntüleyebiliriz.

Sistem Kullanıcılarını Görüntülemenin Yolları

Sistem kullanıcılarını görüntülemek için çeşitli komutlar ve yöntemler mevcuttur. Her bir yöntem, farklı bir bakış açısı sunar ve belirli durumlarda daha kullanışlı olabilir.

1. /etc/passwd Dosyası ile Görüntüleme

/etc/passwd dosyası, tüm kullanıcı hesaplarının temel bilgilerini içerdiği için sistem kullanıcılarını tespit etmenin en doğrudan yoludur.

Dosya Yapısı:
Her satır aşağıdaki formatta yedi alan içerir:
kullanıcı_adı:şifre_placeholder:UID:GID:yorum:ev_dizini:kabuk

Tüm Kullanıcıları Listeleme:
Dosyanın içeriğini görüntülemek için cat komutunu kullanabilirsiniz:

cat /etc/passwd

Bu komut, sistemdeki tüm kullanıcıları, hem normal hem de sistem kullanıcılarını listeler. Çıktı çok uzun olabileceği için less veya more ile sayfa sayfa görüntülemek daha pratik olabilir:

cat /etc/passwd | less

Sistem Kullanıcılarını Filtreleme (UID’ye Göre):
Sistem kullanıcıları genellikle UID’si 1000’den küçük olanlardır. Bu bilgiye dayanarak awk komutu ile filtreleme yapabiliriz:

awk -F: '$3 < 1000 {print $1, $3, $7}' /etc/passwd

* awk -F:: Alan ayırıcı olarak iki nokta üst üste (:) kullanır.
* $3 < 1000: Üçüncü alan (UID) 1000'den küçükse.
* {print $1, $3, $7}: Kullanıcı adını (1. alan), UID'yi (3. alan) ve kabuğu (7. alan) yazdırır.

Bu komut, sistem kullanıcılarının kullanıcı adlarını, UID'lerini ve kabuklarını düzenli bir şekilde listeler.

Sistem Kullanıcılarını Filtreleme (Kabuk Tipine Göre):
Sistem kullanıcıları genellikle /usr/sbin/nologin veya /bin/false gibi bir kabuğa sahiptir. grep komutunu kullanarak bu kabuklara sahip kullanıcıları filtreleyebiliriz:

grep -E '/(nologin|false)$' /etc/passwd

* grep -E: Genişletilmiş düzenli ifadeleri kullanır.
* '/(nologin|false)$': Satırın sonunda /nologin veya /false ile bitenleri arar.

Bu komut, etkileşimli oturum açma yeteneği olmayan tüm kullanıcıları listeler. Çıktıdan sadece kullanıcı adlarını almak isterseniz cut komutunu ekleyebilirsiniz:

grep -E '/(nologin|false)$' /etc/passwd | cut -d: -f1

Sistem Kullanıcılarını Filtreleme (Hem UID hem de Kabuk Tipine Göre):
Daha kesin bir liste için her iki kriteri de birleştirebiliriz:

awk -F: '($3 < 1000) && ($7 == "/usr/sbin/nologin" || $7 == "/bin/false") {print $1, $3, $7}' /etc/passwd

Bu komut, UID'si 1000'den küçük olan ve aynı zamanda nologin veya false kabuğuna sahip olan kullanıcıları listeler.

2. getent Komutu ile Görüntüleme

getent (get entries) komutu, Name Service Switch (NSS) kütüphanesini kullanarak çeşitli veritabanlarından (passwd, group, hosts vb.) bilgi alır. Bu, /etc/passwd dosyasının yanı sıra LDAP veya NIS gibi diğer kimlik doğrulama kaynaklarından da bilgi alabilmesi anlamına gelir.

Tüm Kullanıcıları Listeleme:
getent ile tüm kullanıcıları listelemek /etc/passwd dosyasını okumakla benzerdir:

getent passwd

Sistem Kullanıcılarını Filtreleme:
getent çıktısını da awk veya grep ile filtreleyebiliriz:

getent passwd | awk -F: '$3 < 1000 {print $1, $3, $7}'

veya kabuk tipine göre:

getent passwd | grep -E '/(nologin|false)$' | cut -d: -f1

getent komutu, özellikle sisteminizde birden fazla kimlik doğrulama kaynağı varsa, /etc/passwd dosyasını doğrudan okumaktan daha kapsamlı bir yöntemdir.

3. ps Komutu ile Çalışan Süreçlerin Kullanıcılarını Görüntüleme

ps komutu, sistemde çalışan süreçleri ve bu süreçleri başlatan kullanıcıları gösterir. Bu, hangi sistem kullanıcılarının şu anda bir veya daha fazla servis çalıştırdığını anlamak için dolaylı ama çok etkili bir yoldur.

Tüm Süreçleri ve Sahiplerini Listeleme:

ps aux

Bu komut, tüm kullanıcıların süreçlerini (a), terminali olmayan süreçleri (u) ve diğer kullanıcıların süreçlerini (x) gösterir. Çıktının ilk sütunu, süreci çalıştıran kullanıcı adını gösterir.

Sadece Sistem Kullanıcılarına Ait Süreçleri Filtreleme:
Önceki yöntemlerle sistem kullanıcılarının bir listesini elde ettikten sonra, bu kullanıcıların çalıştırdığı süreçleri grep ile filtreleyebiliriz. Örneğin, www-data kullanıcısının çalıştırdığı süreçleri görmek için:

ps aux | grep www-data

Daha genel olarak, UID'si 1000'den küçük olan kullanıcıların çalıştırdığı süreçleri bulmak için ps komutunun -o seçeneği ile kullanıcı UID'sini de gösterebiliriz:

ps -eo user,uid,pid,cmd | awk '$2 < 1000 {print $1, $2, $3, $4}'

* ps -eo user,uid,pid,cmd: Kullanıcı adını, UID'yi, PID'yi ve komutu gösterir.
* awk '$2 < 1000': İkinci alan (UID) 1000'den küçük olan satırları filtreler.

Bu yöntem, sisteminizde hangi servislerin hangi sistem kullanıcıları altında çalıştığını görselleştirmek için harikadır. Bilmediğiniz bir sistem kullanıcısının bir süreç çalıştırdığını görürseniz, bu bir güvenlik sorununa işaret edebilir.

4. find Komutu ile Dosya Sahipliklerini İnceleme

find komutu, dosya sisteminde belirli kriterlere uyan dosyaları aramak için kullanılır. Bu, dolaylı yoldan sistem kullanıcılarının oluşturduğu veya sahip olduğu dosyaları anlamak için kullanılabilir. Özellikle, belirli bir UID'ye sahip kullanıcının sahip olduğu dosyaları veya sahibi olmayan (potansiyel olarak sorunlu) dosyaları bulmak için kullanışlıdır.

Root'a Ait Dosyaları Bulma:

find / -uid 0 -print 2>/dev/null

* find /: Kök dizininden başlayarak arama yapar.
* -uid 0: UID'si 0 olan (root) dosyalara bakar.
* 2>/dev/null: Hata mesajlarını gizler (erişim izinleri nedeniyle oluşan hatalar gibi).

Belirli Bir Sistem Kullanıcısına Ait Dosyaları Bulma:
Örneğin, www-data kullanıcısının sahip olduğu dosyaları bulmak için:

find / -user www-data -print 2>/dev/null

Bu komut, www-data kullanıcısının sahip olduğu tüm dosyaları ve dizinleri listeler. Bu, bir web sunucusunun hangi dizinlere erişebildiğini veya hangi dosyaları oluşturduğunu anlamak için önemlidir.

Sahibi Olmayan Dosyaları Bulma (nouser/nogroup):
Bazen, bir kullanıcı hesabı silindiğinde, o kullanıcının sahip olduğu dosyalar sistemde kalır ancak artık geçerli bir sahibi yoktur. Bu dosyalar potansiyel güvenlik riskleri veya gereksiz dosya kalıntıları olabilir.

find / -nouser -o -nogroup -print 2>/dev/null

* -nouser: Geçerli bir kullanıcısı olmayan dosyaları arar.
* -nogroup: Geçerli bir grubu olmayan dosyaları arar.
* -o: VEYA (or) operatörü, yani ya kullanıcısı ya da grubu olmayan dosyaları bulur.

Bu yöntem, sistemdeki "sahipsiz" dosyaları tespit ederek temizlik veya güvenlik denetimi yapmanıza yardımcı olabilir.

5. id Komutu ile Tek Bir Kullanıcının Bilgilerini Görüntüleme

id komutu, belirli bir kullanıcının UID, GID ve grup üyeliklerini hızlıca görüntülemek için kullanılır.

id 

Örneğin:

id www-data

Çıktı şöyle bir şey olabilir: uid=33(www-data) gid=33(www-data) groups=33(www-data)
Bu komut, belirli bir sistem kullanıcısının kimlik bilgilerini doğrulamak için kullanışlıdır.

Sistem Kullanıcılarını Tanımlama ve Yönetme İpuçları

Sistem kullanıcılarını görüntülemenin ötesinde, onları doğru bir şekilde tanımlamak ve yönetmek de önemlidir.

UID Aralıkları ve /etc/login.defs

Yukarıda bahsedildiği gibi, UID aralıkları sistem kullanıcılarını tanımlamak için temel bir kriterdir. Bu aralıklar /etc/login.defs dosyasında tanımlanır:

cat /etc/login.defs | grep -E "UID_MIN|UID_MAX|SYS_UID_MIN|SYS_UID_MAX"

Bu dosya, yeni kullanıcılar ve sistem kullanıcıları oluşturulurken varsayılan UID aralıklarını belirler. Ubuntu'da genellikle:
* SYS_UID_MIN 100
* SYS_UID_MAX 999
* UID_MIN 1000
* UID_MAX 60000
şeklinde değerler bulunur. Bu değerler, sistem yöneticisi tarafından değiştirilebilir, bu nedenle kendi sisteminizdeki değerleri kontrol etmek önemlidir.

Kabuk Türleri ve Güvenlik

Bir sistem kullanıcısının kabuğunun /usr/sbin/nologin veya /bin/false olması, onun interaktif oturum açmasını engeller. Bu, sistem kullanıcıları için varsayılan ve güvenli bir yapılandırmadır. Eğer bir sistem kullanıcısının kabuğunun /bin/bash veya /bin/sh olarak ayarlandığını görürseniz, bu potansiyel bir güvenlik açığına işaret edebilir ve araştırılması gerekir. Bu durumu düzeltmek için usermod komutunu kullanabilirsiniz:

sudo usermod -s /usr/sbin/nologin 

UYARI: Bu tür değişiklikleri yapmadan önce kullanıcının amacını ve çalıştırdığı servisleri tam olarak anladığınızdan emin olun. Yanlış bir değişiklik, sistem servislerinin çalışmasını engelleyebilir.

Ev Dizini ve Sistem Kullanıcıları

Normal kullanıcılar genellikle /home/kullanıcı_adı şeklinde bir ev dizinine sahipken, sistem kullanıcılarının ev dizinleri genellikle / (root dizini), /var/empty, /nonexistent veya /dev/null gibi yerlere ayarlanır. Bu, onların kişisel dosya depolamasına veya etkileşimli oturum açtıklarında kullanacakları bir alana ihtiyaç duymadıkları anlamına gelir.

Güvenlik Perspektifi ve Şüpheli Kullanıcılar

* Bilinmeyen Sistem Kullanıcıları: Sisteminizde bilmediğiniz veya açıklayamadığınız bir sistem kullanıcısı gördüğünüzde, bunun ne amaçla oluşturulduğunu araştırmanız önemlidir. Bu, bir uygulamanın parçası olabileceği gibi, kötü niyetli bir yazılımın oluşturduğu bir hesap da olabilir.
Parola Durumu: Sistem kullanıcıları genellikle bir parolaya sahip değildirler. /etc/shadow dosyasında, bu kullanıcıların parola alanında veya ! gibi karakterler bulunur. Eğer bir sistem kullanıcısının geçerli bir parola hash'ine sahip olduğunu görürseniz, bu da bir güvenlik riskidir ve derhal incelenmelidir.
* Yetki Yükseltme: Bir sistem kullanıcısının yetkileri genellikle belirli bir servis için minimum düzeyde tutulur. Eğer bir sistem kullanıcısının beklenenden daha fazla dosya veya dizin üzerinde yazma izni olduğunu fark ederseniz, bu da bir güvenlik açığı olabilir.

Pratik Senaryolar ve Örnekler

Şimdiye kadar öğrendiklerimizi birleştirerek bazı pratik senaryolar üzerinden geçelim.

Senaryo 1: Tüm Sistem Kullanıcılarını Kullanıcı Adı, UID ve Kabuk Bilgileriyle Listeleme
Bu, sistemdeki tüm sistem hesaplarına hızlıca genel bir bakış atmak için en sık kullanılan yöntemdir:

awk -F: '($3 >= 1 && $3 < 1000) {print "Kullanıcı Adı: " $1 ", UID: " $3 ", Kabuk: " $7}' /etc/passwd | column -t

Bu komut, 1 ile 999 arasındaki UID'ye sahip tüm kullanıcıları listeler ve çıktıyı daha okunur hale getirir.

Senaryo 2: Sadece nologin veya false Kabuğuna Sahip Kullanıcıları Listeleme
Bu, etkileşimli oturum açma yeteneği olmayan tüm hesapları görmenizi sağlar:

grep -E '/(nologin|false)$' /etc/passwd | cut -d: -f1,3,7 --output-delimiter=$'\t'

Bu komut, kullanıcı adı, UID ve kabuk bilgilerini sekmelerle ayırarak listeler.

Senaryo 3: Belirli Bir Sistem Kullanıcısının Sahip Olduğu Süreçleri ve İlgili Kullanıcı Bilgilerini Görüntüleme
Örneğin, mysql kullanıcısının çalıştırdığı süreçleri görmek için:

ps -eo user,uid,pid,cmd --sort=user | grep -E "^mysql\s"

Burada grep -E "^mysql\s" ifadesi, çıktının başında "mysql" ve ardından boşluk olan satırları arar, böylece mysql kullanıcısının süreçlerini doğru bir şekilde yakalarız.

Senaryo 4: Yeni Bir Uygulama Kurulumundan Sonra Oluşan Sistem Kullanıcılarını Kontrol Etme
Yeni bir uygulama kurduktan sonra, genellikle bu uygulama için özel bir sistem kullanıcısı oluşturulur. Bu kullanıcıyı tespit etmek için, kurulumdan hemen sonra /etc/passwd dosyasını kontrol edebilir veya son değiştirilen kullanıcıları listelemek için daha karmaşık log analizi yöntemleri kullanabilirsiniz. Ancak basitçe, yukarıdaki filtreleme yöntemlerini kullanarak yeni eklenen düşük UID'li kullanıcıları arayabilirsiniz.

Yaygın Sistem Kullanıcıları ve Görevleri:
* root (UID 0): Süper kullanıcı, tüm sistem üzerinde tam yetkiye sahip.
* daemon (UID 1): Çeşitli arka plan servislerini çalıştıran kullanıcı.
* bin (UID 2): Sistem ikili dosyalarına (binaries) ait süreçler için.
* sys (UID 3): Sistem dosyaları ve süreçleri için.
* adm (UID 4): Yönetim görevleri için, genellikle log dosyalarına erişim sağlar.
* lp (UID 7): Yazıcı (line printer) servisleri için.
* mail (UID 8): Posta sunucusu servisleri için.
* www-data (UID 33): Web sunucuları (Apache, Nginx) tarafından web dosyalarına erişmek ve servisleri çalıştırmak için kullanılır.
* postfix (UID 100-199 arası değişebilir): Postfix posta sunucusu için.
* mysql (UID 100-199 arası değişebilir): MySQL/MariaDB veritabanı sunucusu için.
* nobody (UID 65534): Anonim veya düşük yetkili işlemler için kullanılır. Genellikle NFS gibi servisler tarafından kullanılır.

Bu kullanıcıların her birinin belirli bir rolü ve sınırlı yetkileri vardır. Onları tanımak, sisteminizin nasıl çalıştığını anlamanıza yardımcı olur.

Sonuç

Ubuntu'da Linux sistem kullanıcılarını görüntülemek, sistem yönetimi ve güvenliğinin ayrılmaz bir parçasıdır. Bu makalede ele aldığımız /etc/passwd dosyasını okuma, getent, ps, find ve id gibi komutları kullanma yöntemleri, sisteminizdeki her bir kullanıcının kimliğini, amacını ve potansiyel güvenlik etkilerini anlamanız için güçlü araçlar sunar. UID aralıkları, kabuk tipleri ve ev dizini yapılandırmaları gibi temel kavramları anlamak, normal kullanıcı hesapları ile sistem servis hesaplarını birbirinden ayırmanıza ve olası güvenlik zafiyetlerini tespit etmenize olanak tanır.

Unutmayın ki her sistem kullanıcısının bir nedeni vardır ve genellikle kritik bir sistem servisini çalıştırmakla görevlidir. Bilinmeyen veya şüpheli görünen bir sistem kullanıcısı bulduğunuzda, bu durumu ciddiye almalı ve kapsamlı bir araştırma yapmalısınız. Düzenli olarak sisteminizdeki kullanıcı hesaplarını denetlemek, yetkisiz erişimi veya kötü amaçlı yazılımların oluşturduğu gizli hesapları erken aşamada tespit etmenize yardımcı olacaktır. Bu bilgilerle donanmış olarak, Ubuntu sistemlerinizi daha güvenli ve etkin bir şekilde yönetebilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.