8
Konuya ait anahtar kelimeler : Unix/Linux dosya/klasör sahipliği, chown, chgrp, chmod, suid, sgid Dosya/klasör sahipliği Unix/Linux sistemlerde güvenliğin en önemli ögelerinden birisidir. Herhangi bir dosya/klasör üzerinde işlem yapabilmek için o dosya/klasör üzerinde gerekli yetkiye sahip olmanız gerekmektedir. Ali adlı kullanıcıya ait dosya/klasörler üzerinde Ahmet adlı kişinin hak sahibi olması pek doğru olmaz tabiki. Mesela Unix/Linux sistemlerde en üst düzey yetkiye sahip Root kullanıcısının izni olmadan, sistem dosyaları üzerinde yada sistemi etkileyebilecek programlar üzerinde diğer kullancıların her türlü yetkiye sahip olması, sistemin kararsız ve güvensiz olmasına neden olur. chown : Herhangi bir dosya/klasör üzerinde user(kullanıcı) sahipliğini değiştirmeye yaramaktadır. Bir kaç parametre alabilir. Kullanım : chown [parametreler] [user]:[group] dosya/klasör şekinde olmaktadır. "chown" komutundan sonra gerekli parametreler ve "kullanıcı:grup" adı ve en son olarak "dosya/klasör adı belirtilerek kullanabilirsiniz. Unutmamanız gereken nokta; herhangi bir dosya/klasör üzerinde dosya/klasör sahipliği değişimi yapabilmek için, ya o dosya/klasör ün sahibi olmanız, ya dosya/kalsör ün ait olduğu gruba üye olmak yada dosya/klasör sahibinden daha üst bir yetkiye sahip olmanız gerekmektedir. Bunu bir ast/üst mantığıyla düşünebilirsiniz, mesela size ait dosya/klasör ler üzerinde Root kullanıcısı sizden daha yetkili olduğu için işlem yapabilir, fakat siz(Standart kullanıcı) olduğunuz için, Root kullancısına ait dosya/klasör ler üzerinde aynı işlemleri yapamazsınız. Şimdi tux klasörü içerisinde bir adet "penguen.txt" adında bir dosya oluşturalım ve ayrıntılı olarak listeleme yaparak dosya haklarına bir göz atalım.
[alax@alax ~]$ cd ~/tux [alax@alax tux]$ touch penguen.txt [alax@alax tux]$ ls -l total 4 -rw-r--r-- 1 alax(1) alax(2) 0 Oct 21 21:41 penguen.txt drwxr-xr-x 2 alax alax 4096 Oct 21 00:22 script [alax@alax tux]$
Şimdi penguen.txt dosyasına bakalım, (1) numarası ile gösterdiğim yer sahip adı, (2) ile gösterdiğim ise grup adıdır. Benim kullanıcı adım "alax" ve dahil olduğum grup adı "alax" tır. Şimdi penguen.txt dosyasının sahibini alax ve grubunu ise "users" yapalım.
[alax@alax tux]$ chown alax:users penguen.txt [alax@alax tux]$ ls -l total 4 -rw-r--r-- 1 alax users 0 Oct 21 21:41 penguen.txt drwxr-xr-x 2 alax alax 4096 Oct 21 00:22 script [alax@alax tux]$
Gördüğünüz gibi "penguen.txt" adlı dosyanın sahibi "alax" ve grubu "users" oldu. Kullanımı bu kadar basit. Tabiki burada kullanıcı adı ve grup adı sistemde tanımlı olmalıdır. Ben sistemde olmayan bir kullanıcıya, gruba, yada benden daha üst bir kullanıcıya yada gruba sahiplik veremem. Tabiki burada grup belirtmeniz şart değil sadece sahip adını yazarakta sahibini değiştirebilirsiniz.
[alax@alax tux]$ chown ahmet penguen.txt [alax@alax tux]$
Bu şekilde dosyanın sahibini "ahmet" olarak değiştirdik. chgrp : Dosya/klasör ün ait olduğu grubu değiştirme komutu. Örnek kullanım:
[alax@alax tux]$ chgrp users penguen.txt [alax@alax tux]$
Bu şekilde de dosyanın grubunu users olarak değiştirmiş olduk. Not : Üst düzey bir kullanıcıya kendinden alt seviyedeki bir kullanıcı tarafından bir sahiplik verilemez. Üst rütbeli kullanıcı kendi altındaki bir kullanıcıya sahiplik verebilir yada ondan sahiplik alabilir. Dosya/klasör sahipliği üç kısımdam oluşmaktadır. Owner Permissions : Sahip izinleri, dosya/klasör sahibinin sahip olduğu izinler. Group Permissions : Grup izinleri. Dosya/klasör ün ait olduğu gruba üye kullanıcıların sahip olduğu izinler. Other Permissions : Diğer kullanıcıların dosya/klasör üzerinde sahip oldukları izinler. Bu sıralamayı kesinlikle aklımızda tutmalıyız. Önce sahip sonra grup ve en sonra diğer kullanıcılar. Şimdi dosya/klasör erişim modlarına bakalım. chmod :Dosya/klasör üzerinde erişim yetkisini belirleme komutu. Birçok parametre alabilmektedir. Kullanım : chmod [parametreler] dosya/klasör şeklinde olmaktadır. Herhangi bir dosya/klasör üzerinde üç(3) çeşit erişim hakkı bulunmaktadır. read : Okuma erişimi. Dosya/klasör üzerinde okuma erişimini belirtir. write : Yazma erişimi. Dosya/klasör üzerinde yazma erişimini belirtir. execute : Çalıştırılabilme erişimi. Dosyanın bir program gibi çalıştırılabilme erişimini belirtir. Bir dosya/klasör üzerinde "sahip:grup:diğer kullanıcıların" herbirinin ayrı ayrı okuma,yazma,çalıştırabilme hakkı bulunmaktadır. penguen.txt dosyasını ayrıntılı olarak listeleyelim
[alax@alax tux]$ ls -l penguen.txt -rw-r--r-- 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$
Yukarıda kırmızı ile belirlenen kısım ( r=okuma, w=yazma, x=çalıştırılabilme ) penguen.txt dosyası üzerinde hak sahibi olan sahip, grup ve diğer kullanıcıların haklarını göstermektedir. Kırmızı ile gösterdiğim yer on(10) adet harf alabilir. İlk harf r,w,x in dışındadır. İlk harf " d " ise klasör, tire " - " ise dosya anlamına gelmektedir. Geriye kalan dokuz harf üç üç ayrılır. İlk üç harf dosya/klasör "sahibinin" r,w,x haklarını, ortadaki üç harf "gruba" ait r,w,x haklarını ve son üç harf "diğer kullanıcıların" r,w,x haklarını göstermektedir. " -rw-r--r--" : İlk harf = " - " tire. Bu bir dosyadır. Klasör olduğu zaman burada "d" harfi bulunacaktır. İlk üçlünün ilk harfi = "r". Dosya sahibi bu dosyayı okuyabilir. İlk üçlünün ikinci harfi = "w". Dosya sahibi bu dosyaya yazabilir, içeriğini değiştirebilir. İlk üçlünün üçüncü harfi = "-". Buranın "x" olması durumunda dosya sahibi bu dosyayı çalıştırabilirdi, fakat tire "-" yani çalıştıramaz anlamına gelmektedir. Eğer bir izin aktif değilse "-" ile gösterilir. İkinci üçlünün ilk harfi = "r". Dosyanın ait olduğu grup üyeleri bu dosyayı okuyabilir. İkinci üçlünün ikinci harfi ="-". Dosyanın ait olduğu grup üyeleri bu dosyaya yazma ve değiştirme yetkisi yok. İkinci üçlünün üçüncü harfi = "-". Dosyanın ait olduğu grup üyeleri bu dosyayı çalıştırmaya yetkisi yoktur. Üçüncü üçlünün ilk harfi = "r" : Diğer kullanıcılar bu dosyayı okuyabilir. Üçüncü üçlünün ikinci harfi = "-" : Diğer kullanıcılar bu dosyaya yazamaz, içeriğini değiştiremez. Üçüncü üçlünün üçüncü harfi = "-" : Diğer kullanıcılar bu dosyayı çalıştıramaz. Şimdi bu izinleri dosya/klasör e nasıl veriyoruz ona bakalım. u : Dosya/klasör sahibini temsil etmektedir. g : Dosya/klasör ün ait olduğu grubu temsil etmektedir. o : Diğer kullanıcıları temsil etmektedir. Erişim verme/alma/eşitleme: + : Artı işareti, belirlenen erişimi ver. - : Eksi işareti, belirlenen erişimi kaldır. = : Eşittir işareti, belirlenen erişimleri belirler. Yani sadece bu(nlar) olsun. penguen.txt adlı dosya üzerinde bu anlatımları örneklendirelim. Lütfen chmod kullanımından sonra dosya erişim izinlerine dikkatlice bakınız.
[alax@alax tux]$ ls -l penguen.txt -rw-r--r-- 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$ chmod u+x penguen.txt [alax@alax tux]$ ls -l penguen.txt -rwxr--r-- 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$
[alax@alax tux]$ chmod g+wx penguen.txt [alax@alax tux]$ ls -l penguen.txt -rwxrwxr-- 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$
[alax@alax tux]$ chmod o=w penguen.txt [alax@alax tux]$ ls -l penguen.txt -rwxrwx-w- 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$
Şimdi yukarıda üç örnekte yaptıklarımızı hepsini bir seferde yapalım.
[alax@alax tux]$ chmod u+x,g+wx,o=w penguen.txt [alax@alax tux]$ ls -l penguen.txt -rwxrwx-w- 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$
Sayı Sekiz tabanında gösterimi Harf(ler)
0 İzin yok ---
1 Çalıştırılabilme izni --x
2 Yazma izni -w-
3 Çalıştırabilme ve yazma: 1 (execute) + 2 (write) = 3 -wx
4 Okuma izni r--
5 Okuma ve çalıştırabilme: 4 (read) + 1 (execute) = 5 r-x
6 Okuma ve yazma izni: 4 (read) + 2 (write) = 6 rw-
7 Bütün izinler: 4 (read) + 2 (write) + 1 (execute) = 7 rwx
Yukarıdaki rakamlarla yine aynı sıralamada(sahip,grub,diğer kullanıcılar) şeklinde erişim izinlerini belirleyebiriz.
[alax@alax tux]$ chmod 644 penguen.txt [alax@alax tux]$ ls -l penguen.txt -rw-r--r-- 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$ chmod 755 penguen.txt [alax@alax tux]$ ls -l penguen.txt -rwxr-xr-x 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$ chmod 777 penguen.txt [alax@alax tux]$ ls -l penguen.txt -rwxrwxrwx 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$ chmod 050 penguen.txt [alax@alax tux]$ ls -l penguen.txt ----r-x--- 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$
Gördüğünüz gibi istediğiniz şekilde sahibi olduğunuz dosya/klasörlerin izinlerini değiştirebilirsiniz. Bu kullanım daha kısa ve kullanması kolaydır. Sadece rakamların(0..7) ne anlama geldiğini bilmeniz yeterli. SUID ve SGID : Küçük "s" aktif, büyük "S" pasif anlamına gelmektedir. Bazen bir programı çalıştırmaya izniniz olsa bile problemlerle karşılaşabilirsiniz. Tabi bu durumlar genellikle güvenlik için oluşturulmuştur ve sistem kararlılığı için gereklidir. Mesela sizin "passwd" programını kullanmaya yetkiniz vardır, bu komut ile şifrenizi değiştirebilirsiniz. Fakat bu programın çalıştıktan, yeni şifre belirlendikten sonra, yeni şifreyi yazacağı dosya üzerinde yetkiniz yok ise o zaman ne olacak? İşte burada dosyanın sahibine ait çalıştırılabilme izni "x" yerine, "s" harfi ile belirlenmiştir.
[alax@alax tux]$ ls -l /bin/passwd -rwsr-xr-x 1 root root 47224 Mar 15 2015 /bin/passwd
Gördüğünüz gibi root kullanıcısına ait olan passwd programının kullanıcıya ait ilk üçlü yetkisi "rws" şeklindedir. Son üçlüye yani diğer kullanıcıların izinlerine bakarsanız "r-x", yani okuma ve çalıştırabilme yetkisi vardır. Unix/Linux sistemlerde şifreler "/etc/shadow" dosyasında saklanmaktadır.
[alax@alax tux]$ ls -l /etc/shadow -rw------- 1 root root 735 Oct 14 00:13 /etc/shadow
/etc/shadow dosyasını sadece sahibi olan Root kullanıcı okuyabilir ve değiştirebilir. Fakat ben kendi şifremi değiştirmem için yeni şifreyi bu dosyaya kaydetmem lazım ki işlem başarılı olsun. Durum: 1- Benim "passwd" komutunu çalıştırmaya yetkim var. 2- Benim /etc/shadow dosyasında değişiklik yapmaya hakkım yok. İşte burada bu komutlar devreye giriyor. Bunların programa yüklediği anlam şudur: Kullanıcı passwd komutunu çalıştırır. Ardından /etc/shadow dosyasına yeni şifreyi eklemeye gelince o zaman kullanıcıya ayrılmış izinler dahilinde dosyayı "root" olarak açar ve yeni şifreyi kaydeder. Şöyle düşünelim arkadaşlar, şimdi "/etc/shadow" dosyası 10 eşit parçadan oluşan bir bütün olsun, ve bu dosyanın sahibi root. Bu 10 eşit parçadan 1 tanesi bana ait olsun. Fakat dosyanın kalanı "root" a ait. İşte burada root bana şunu diyor, 1 parça sana ait fakat diğerleri bana ait, dolayısıyla sen kendi alanında ne gibi bir değişiklik yapmak istiyorsan bana söyle ben yaparım, sen buraya girme. Burada root sadece bir örnektir. Hangi program hangi kullanıcıya ait ise burada root o oluyor. Bizim örneğimizde passwd komutunu kullandığımız için, dosya sahibi root oldu. Genel olarak yukarıdaki gibi bir yorumda bulunabiliriz. Peki bu izni bir dosyaya nasıl verebiliriz?
[alax@alax tux]$ ls -l penguen.txt ----r-x--- 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$ chmod 777 penguen.txt [alax@alax tux]$ ls -l penguen.txt -rwxrwxrwx 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$ chmod u+s penguen.txt [alax@alax tux]$ ls -l penguen.txt -rwsrwxrwx 1 alax users 0 Oct 21 21:41 penguen.txt
Gördüğünüz gibi önce penguen.txt dosyasının izinlerine baktık, sonra erişim izinlerini 777 olarak ayaraladık ve en son SUID değerini aktif yaptık. Tabi pasif yapmak için büyük "S" kullanmalısınız.Tabiki burada "chmod g+s penguen.txt" komutu ile dosyanın ait olduğu gruba "s" çalıştırabilme yetkisi de verebiliriz. Yada ikisini aynı anda kullanabiliriz. hem sahibi hemde grubuna "s" çalıştırma yetkisini aşağıdaki şekilde verebilir.
[alax@alax tux]$ chmod ug+s penguen.txt [alax@alax tux]$ ls -l penguen.txt -rwsrwsrwx 1 alax users 0 Oct 21 21:41 penguen.txt [alax@alax tux]$
Son olarak "chmod" kullanımı: chmod (ugo)(+-=)(rwxs) dosya_adi şeklinde olmaktadır. ilk kısım(ugo) istediğiniz yada istediklerinizi seçebilir, aynı anda birçok kişi/gruba ait erişim iznlerini ayarlayabilirsiniz.