"Enter"a basıp içeriğe geçin

Dosya Hiyerarşisi ve Kullanıcı İşlemleri

 

Bu yazıda linux sistemlerdeki dosya hiyerarşisini ve kullanıcı işlemlerini örneklerle anlatacağım.

 

Dosya Hiyerarşisi

Linux’ta her şey bir dosyadır. Ve sistemin kusursuz çalışması için, her bir dosya ve dizin hiyerarşik şekilde ayrılmıştır. Böylece hiçbir dosya veya kullanıcı, girmemesi gereken bir yere giremez.

Linux sistemlerde en üstte root dizini vardır. / ile gösteririr.. Diğer tüm dizinler onun altındadır (ör: home, bin, dev vb…)

Linux sistem yapısında windowsun aksine her bir parça farklı klasörlerdedir. Mesela windowsta tüm sistem dosyaları, sürücüler vb. Windows isimli klasördedir. Ama linuxda her biri root dizininin altındaki farklı klasörlerde bulunur.

Root dizininin alt dizinleri

/bin : Olması zorunlu temel komut dosyalarını içerir.
/boot : Başlangıç için gerekli dosyaları bulundurur.
/dev : Donanım dosyaları vardır.
/etc : Sistem ayarlarını barındırır.
/lib : Kütüphane dosyaları ve çekirdek modülleri bulunur.
/media : Bazı depolama ortamları için bağlanma noktasıdır
/mnt : Bazı depolama ortamları için bağlanma noktasıdır (mount)
/opt : Üçüncü parti kullanıcı programlarının kurulması içindir.
/sbin : Sistemi yöneticisiyle ilgili çalıştırabilir dosyaları tutar.
/srv : Sistemin sunduğu hizmetlerle alakalıdır.
/tmp : Geçici dosyaları tutmak içindir.
/usr : Tüm kullanıcılarca paylaşılan verileri içeren dizindir.
/var : Log dosyaları, e-posta ve yazıcı kuyrukları gibi değişken verileri barındırır.
/lost+found : kayıp eşya bürosu. Ani sistem kapatmalarında kaybolan dosyalar burda bulunabilir (belki)

Bunlar işletim sisteminin temel dosyalarıdır. Ayrıca her bir kullanıcı için home dosyası vardır ör: /home/ilhan
Bu dizinin altında kullanıcıya ait klasörler bulunur (desktop, download, videos…)

Detaylı bilgi için basabilirsiniz

 

Bağlama (mount)

Linuxta varsayılan olarak, bir aygıt sisteme takılsa da, ona gerek olana (açılana) kadar bağlanmaz. Bağlama işlemini daha sonra ayrıntılı olarak göreceğiz.

Bağlama, takılan bir aygıtın(harddisk, cd, ubs vb) başka bir dizinin alt dizini gibi gösterilmesidir. Windowsta harici bir aygıt takıldığında, otomatik olarak bir harf verilir, ve ana sayfada (bu bilgisayar) gösterilir. Linuxda ise genelde root dizininin altındaki /dev dizine bağlanır, ancak istersek değiştirebiliriz. Bağlama işlemini ileriki yazılarda yapacağız.
Bağlamanın amacı, birden çok bilgisayardan oluşan bir ağı daha kolay yönetebilmektir. (bu konu sunucu yapısıyla alakalı)

Dosyalara erişim

Linux sistemlerde her dizin ve dosyanın bir Sahip Kullanıcısı ve bir de Sahip Grubu vardır. Erişim izinleri de sahibi, grubu ve diğerler kullanıcıların izinleri olarak üç kategoride ayarlanabilir. Bunlardan her birisine okuma, yazma ve çalıştırma yetkileri verilebilir veya kısıtlanabilir.
Örneğin; /root dizininin sahip kullanıcısı “root”, sahip grubu yine “root” olarak ayarlanmıştır. Erişim izinleri de Sahibi:Okuma-Yazma, Grubu:İzin yok, Diğerleri:İzin yok olarak ayarlanmıştır. Böylece bu dizine sadece “root” kullanıcısı erişebilmektedir.

Kullanıcı İşlemleri

Linux çoklu kullanıcı yapısına sahip bir sistemdir. Yani aynı anda birden çok kullanıcı aynı sistemde oturum açabilir. Veya sistemi kullanırken ani kullanıcı değişimlerine izin verir.

Linux sistemlerde kullanıcılar gerçek kullanıcı ve sistem kullanıcıları olarak ikiye ayrılır.

Kullanıcı id’si

Her kullanıcıya sistem tarafından bir numara atanır. Bu numara ayrıca kullanıcı gruplarını da belirtir.
Sistemin oluşturduğu gizli kullanıcılar da vardır, ama bunlar login olmadığı için doğrudan göremeyiz. (örnek root)

Login olan kullanıcı numaraları 1000’den başlar
sistem kullanıcılarının id’leri 1-999 arasındadır
root kullanıcısının id’si 0 olur. En yetkili kullanıcıdır. //adı değiştirilebilir.

id  komutu mevcut kullanıcının bilgilerini listeler. id username ile başka bir kullanıcının bilgilerine de bakabiliriz. Sadece id’sini görmek istiyorsak id -u username komutunu kullanırız.

Şuan sistemimde sadece ubuntu kullanıcısı ekli olduğu için onu gösterdi.

users : sistemde kayıtlı gerçek (login olmuş) kullanıcıları listeler. // sistem kullanıcılarını göstermez

Gizli kullanıcıları (sistem kullanıcılarını) görmek için bir komut yoktur. Bu bilgilerin tutulduğu ayar dosyalarını incelemek gerekir.

Ayar dosyaları root’un altındaki etc dizininde tutulur. Kullanıcı bilgilerinin tutulduğu passwd dosyası da bu dizindedir.
Bu dosyaya erişmek için : cat /etc/passwd

Bunun sonucunda aşağıdaki formatta uzun bir liste çıkacak:

Bu liste daha uzayıp gidiyor. Peki neden bu kadar kullanıcı var?
Linux, işlevleri yerine getirmek için farklı farklı kullanıcılar oluşturur. Bazıları sistem arayüzü ile ilgilenir, bazıları mail servislerini yönetir. Bazıları disk ayarlarını kontrol eder. Bu durumda bir işlev diğerine müdahele edemez. Neden hiyerarşi dendiği sanırım kafanıza daha net oturmuştur.

ubuntu:x:1000:1000:Ubuntu,,,:/home/ubuntu:/bin/bash  yazan satır benim kullanıcı bilgilerimi içeriyor. Bunu inceleyelim.

username kullanıcı adı, ilk 1000 kullanıcı id, ikinci 1000 grup id. /home/username:/bin/bash de o kullanıcı ile ilgili shell dizinidir. Her kullanıcının shell dizini farklıdır. bash yolu olmayan kullanıcılar shell kullanamaz. passwd dosyası içinden bu yolu silersek, artık o kullanıcı shell kullanamayacaktır.

Shell yolu olan kullanıcılar genelde login olmuş kullanıcılardır. Ayrıca 1000 ile başlamasından da gerçek bir kullanıcı olduğunu anlayabiliriz.

Yetkiler

Yetki birşeyi yapma hakkıdır. Bir işlemi, sadece o işlemi yapma yetkisine sahip kullanıcılar yapabilir.
Yetkimizi aşan bir işlem yapabilmek için, sudo komutu ile yönetici izni sağlanmalıdır.

Örneğin, passwd klasöründe kullanıcı bilgileri arasında parola yoktu. Çünkü bu dosyaya her kullanıcı ulaşabilir. Parolalar /etc/shadow dosyasında tutulur. ve bu dosyayı yazdırmak için (cat /etc/shadow) yönetici olarak girmeliyiz. Bunun için sudo programını kullanacağız.

sudo programı

Yetkimizi aşan durumlarda, root hesabı ile login olmadan, sadece o işlem için root yetkisine sahip olmamızı sağlar.

örneğin etc içinde dosya oluşturamayız çünkü etc klasörünün sahibi root kullanıcısıdır. Bunun için ya root olarak login olmalıyız (gereksiz zaman alır ve güvenlik zaafiyetine yol açar) yada sudo komutu ile açmalıyız.

Bu olay aslında, windowstaki yönetici olarak çalıştır seçeneği ile aynı şeydir.
Root olarak login olmaktan genel olarak kaçınmalıyız. Çünkü linux mimarisinden dolayı, root kullanıcı sistemde her şeyi yapma yetkisine sahiptir. Root olarak login olduğumuzda yaptığımız bir hata, sistemi geri alınamayacak şekilde bozabilir.

sudo kullanarak yetki yükseltmek için: sudo cat /etc/shadow deriz. mevcut hesabın parolasını girerek sudo programını çalıştırırız. Yetkimizi yükseltmiş oluruz ve dosyayı açabiliriz
sudo kullanmazsak ve yetkimiz yoksa, hata mesajı alırız. //Permission denied

Root için şifreye bakalım. burada görünen root parolasının bir şifreleme algoritması ile şifrelenmiş halidir. $6$ ifadesi hangi algoritma ile şifrelendiğini gösterir. Mesela $5$ olsaydı, MD5 algoritması ile şifrelenmiş demekti.

Terminal ekranında bir kere sudo yetkisi aldığımızda, terminal kapanana kadar tekrar şifre girmrmiz gerekmez.

Bir dizine yada dosyaya kimlerin erişebileceğini düzenlemek için arayüzde sağ tıklayarak izinler kısmından ayarlayabiliriz. // Terminalden nasıl yapıldığı ilerde anlatılacak

Sudo kullanabilmek için sudo kullanma iznimiz olması gerekir. Bunun için de sudo grubunda olmalıyız

Gruplar

Linuxta herşey bir dosyadır.Çalışan programlar da aslında birer dosyadır. Bu yüzden yapılan tüm işlemler için, ilgili dosyaya erişim iznimiz olması gerekir diyebiliriz. Mesela bir programı açabilmek için, o programın dosyasına erişimimiz olması gerekir.

Grup kavramı aslında bu işe yarar. Bir kullanıcı grubuna bir dosyayı açma izni verdiğimizde, aslında o gruba üye tüm kullanıcılar için, o dosyanın yaptığı işlevi kullanma hakkı veririz.

sudo da bir program olduğuna göre, bir grup oluşturup o gruba sudo programını çalıştırma yetkisi verirsek, o gruptaki herkes sudo programını kullanarak yetkisini yükseltebilir.

groups komutu ile, kullanıcının bulunduğu tüm gruplar listelenir.
groups username ile başka bir kullanıcının gruplarına da bakabiliriz.

id komutu ile, o kullanıcıya ait bilgilerin çıktığını görmüştük. Bu bilgilerin arasında, kullanıcının bulunduğu gruplar da vardı.

Sistemdeki tüm grupları görebilmek için, cat /etc/group komutu kullanılır. Bunun sonucunda aşağıdaki formatta, tüm gruplar listelenir.

sudo:x:27:username ilk kısım (sudo) grubun adıdır. 24 grup id’sidir. sondaki (: dan sonraki) username de o gruba dahil olan ve login edilmiş kullanıcılardır. Yani ubuntu isimli kullanıcı sudo grubuna dahil. sudo grubundakiler sudo programını kullanabildiğine göre, ubuntu kullanıcısı sudo  programını kullanabiliriz.

Kullanıcı id’leri gibi, sonradan oluşturulan grup id’leri de 1000 den başlar. 0 root grubudur. 0-1000 arası sistem tarafından önceden oluşturulan gruplardır.

İzin türleri

Bir dosyayla ilgili izinler aslında çalıştırmak, okumak ve yazmaktır (accest, read, write) . Silmek de yazmaya girer.

Arayüz ile yetki verme

Arayüzle yetki verme sayfasında, Owner o dosyanın sahibi, group, o dosyayla bağlantılı grup ve others da, bu sayılanlar dışındaki herkestir. Sahibin, ilgili grubun ve diğer kişilerin yetkilerini bu şekilde ayarlayabiliriz.

Sudoers dosyası

Sudo kullanabilmek için sudo kullanma iznimiz olması gerektiğini söylemiştik. Şimdi buna bakalım
Sudoers dosyası : Hangi kullanıcıların yada grupların sudo kullanabileceğini belirleyen konfigürasyon dosyasıdır. Bu ayarı sadece root yapabilir.
sudoers dosyasını sudo nano /etc/sudoers diyerek nano ile açabiliriz. Bunu açtığımızda karşımıza sudo komutunu kullanabilecek kişiler çıkar.
Bu dosyayı açtığımızda 3 farklı kısım göreceğiz. Bizim işimize yarayan, bir ve üçüncü kısımlardır.

 

3. kısımdaki %sudo ALL=(ALL:ALL) ALL : sudo grubundaki herkes sudo yetkisini kullanabilir demektir. //birine sudo yetkisi vermek için sudo grubuna alabiliriz
Bu bölümde %grupadi ALL=(ALL:ALL) ALL diyerek istediğimiz gruba sudo kullanma yetkisi verebiliriz.

Aynı şekilde 1. kısımda da root ALL=(ALL:ALL) ALL ifadesi, root kullanıcısının sudo kullanabileceğini belirtir.
username ALL=(ALL:ALL) ALL diyerek, istediğimiz kullanıcıya sudo kullanabilme yetkisi verebiliriz
Gerekli izni aldıktan sonra sudo yetkisini kullanmak için kendi parolamızı bilmek yeterlidir.

user2 kullanıcısına ve grup1 grubuna sudo yetkisi verdik.

Kullanıcı şifresini ayarlama

passwd : kullanıcı şifresi oluşturmak veya değiştirmek için kullanılır.
passwd username diyerek kullanıcı parolasını ayarlayabiliriz.

Biz parolayı girerken ekranda gözükmez. Bu yüzden girilmedi diye korkmayın.

Kullanıcı Oluşturma ve silme

arayüzde kullanıcı eklemek için, kullanıcı ayarları sayfasında unlock’a basarak yetkili kullanıcının parolasını girerek yetki almalıyız.
Daha sonra açacağımız hesabın türünü seçerek yeni kullanıcımızı oluşturabiliriz.

adduser username : username adında bir kullanıcı oluşturduk. //root yada sudo yetkisi gerekir.
Bu şekilde açtığımızda hem kullanıcı hem de aynı adda bir grup oluşturur.
Böylece artık kullanıcımıza ait bir grup ve home dizinimiz açıldı (bash yolu da dahil). Ardından bizden bir parola, isim vb seçmemizi isteyecektir. Room number, phone number vb bilgiler genelde kurumsal sistemlerde gerekli, biz boş bırakabiliriz.

users dediğimizde henüz çıkmadı çünkü sistem dosyalarına henüz tam işlenmedi. Ancak id komutu ile kontrol ettiğimizde hem kullanıcının hem de grubun açıldığını görebiliriz. Sistemi yeniden başlattığımızda users komutu ile de gözükecektir.

Terminalde login olmak için su username deyip o kullanıcının parolasını girmemiz yeterlidir.
Çıkmak için logout deriz

Kullanıcı silme : userdel -r username //-r parametresi, o kullanıcıya ait home vb dizinlerin de silinmesini sağlar. -r kullanmazsak, kullanıcı silinde de ona ait dosyalar sistemde kalır.

Root olarak login olma

Varsayılan olarak, sistemi ilk kurduğumuzda root şifresi oluşturulmamıştır. Bu durumdayken doğal olarak root ile oturum açmamız mümkün değildir.
login olabilmek için ilk olarak root parolası belirlememiz gerekir.

passwd root : root kullanıcısının şifresini değiştirmek istedik. Ama buna iznimiz yok. Bu yüzden sudo ile çalıştırmalıyız.
sudo passwd root: önce sudo şifremizi (mevcut kullanıcının şifresini), sonra da root için kullanacağımız şifreyi giriyoruz
Artık root şifremiz oluşturuldu.
Ubuntuda açılış ekranında root olarak login olmak engellenmiştir. Bunun yerine terminalden giriş yapılabilir.

sudo su : terminalden root olarak login olmamızı sağlar.

terminalde root olarak login olursak istediğimiz her şeyi yapabiliriz. (1 şey dışında. Onu en son göreceğiz)

exit: superuser’dan (su, root) çıkıp eski loginimize dönmemizi sağlar.

Grup oluşturma ve silme

groupadd grupadi grubumuz direkt oluştu. // bu da root-sudo yetkisi gerektirir.
Grubu silme : sudo groupdel grupadi

 

 

 

Kullanıcıyı gruba ekleme-Gruptan çıkarma :
usermod -a -G grupadi kullaniciadi : kullanıcıyı o gruba ekler
deluser kullaniciadi grupadi : kullanıcıyı gruptan kaldırır.

 

 

Yetkileri görme terminal üzerinden değiştirme

ls -l : tüm dosyaların kime ait olduklarını, okuma yazma yetkililerini gösterir. ls -la ile gizli dosyaları da görebiliriz.

-rw-r–r– 1 ubuntu ubuntu 0 Aug 20 07:26 dosya1: baştaki rw dosya sahibinin, ortadaki r sahiplik gurubunun, sonraki r de diğer kullanıcıların yetkilerini gösterir. yani dosya sahibi read ve write, diğer tüm kullanıcılar da read yetkisine sahiptir.
en baştaki – işareti bir dosya olduğunu gösterir. bir dizin olsaydı d ile başlayacaktı
aradaki – işaretleri, o yetkiye sahip değil demektir. rwx hepsine sahip demek. x-w yazıp çalıştırabilir ama okuyamaz demektir. Tüm kullanıcıların tüm izinlere sahip olması -rwxrwxrwx ile gösterilir.
ilk ubuntu, sahibi olan kullanıcıdır. ikinci ubuntu sahiplik grubudur. 0 dosyanın boyutu, geri kalan da oluşturma tarihidir.
ls -ln dersek kullanıcı ve grup isimleri yerine id’ler görünür.

chmod : dosya yetkilerini değiştirir. chmod u=rwx,g=rwx,o=rwx dosyaadi
u= ile sahip kullanıcının, g= ile sahiplik grubunun, o= ile de diğer herkesin yetkilerini tanımladık

u+r yada g+rw diyerek de izinler verebiliriz. u-r yada g-rw diyerek geri alabiliriz.

root kullanıcısı her zaman tüm yetkilere sahiptir.

Arayüzde execute (çalıştırma yetkisi)ni herkese veriyordu. Belli bir kişiye vermek için terminalden yapmalıyız.

Sayısal tabanla da kullanılabilir. Her bir iznin sayısal karşılığı vardır. Bunların toplamı kullanıcı yada gruba verilir.
çalıştırma 1 okuma 4 yazma 2. 7 verirsek tüm izinlere sahip demektir.

chmod 711 dosyaadi dosya sahibi herşeyi yapabilir. Diğer kullanıcılar sadece çalıştırabilir. chmod u=rwx,g=x,o=x dosyaadi ile aynı şeydir

Sayısal olarak yetki kaldırmak da mümkündür.
Örneğin yetki durumu 777 olan bir dosya düşünelim. chmod -222 dosyaadi dersek, 2nin karşılığı olan yazma yetkisi tüm kullanıclardan kalkar. -020 dersek, sadece sahiplik grubu için kalkar.

Aynı şekilde +222 diyerek herkese yazma yetkisi verebiriz

Dosya sahipliği değiştirme

chown kullaniciadi:grupadi dosyaadi : dosyanın sahibini ve sahiplik grubunu değiştirir. Sadece sahibini değiştirmek için chown kullaniciadi dosyaadi diyebiliriz.
Eğer dosyanın sahibi değilsek sudo yetkisi gerekir.
chgrp grupadı dosyaadı : sadece grup sahipliğini değiştirir

Dosyaya hiç kimsenin erişememesini sağlama

chattr +i dosya : bunu yaparsak, ls ile bakıldığında izinler varmış gibi görünür. Ama root dahil hiç kimse bu dosya üzerinde değişiklik yapamaz. Böyle dosyaları anlamak için lsattr kommutu kullanılır.
-i diyerek kaldırabiliriz.

 

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir