Laboratuvar: Linux Dosya İzinleri
Bu laboratuvarda UNIX tarzı dosya izinlerini inceleyeceğiz ve neler yapabildiklerini ve neden sınırlı olduklarını belirleyeceğiz. Son olarak Linux ACL'lerinin izinleri atamada nasıl daha fazla esneklik sağladığını göreceğiz.
Vanilla Ubuntu konteynerinde çalışacağız ve yazılımı yükleyip kullanıcıları manuel olarak ekleyeceğiz. Konteyneri başlatalım, ihtiyacımız olan paketleri yükleyelim ve birlikte çalışmak için bazı kullanıcılar ekleyelim:
C:\Users\rxt1077\it230\docs>docker run -it ubuntu bash root@11ce9e5ee80e:/# apt-get update <snip> root@11ce9e5ee80e:/# apt-get install acl Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: acl 0 upgraded, 1 newly installed, 0 to remove and 4 not upgraded. Need to get 37.8 kB of archives. After this operation, 197 kB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu focal/main amd64 acl amd64 2.2.53-6 [37.8 kB] Fetched 37.8 kB in 0s (94.1 kB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package acl. (Reading database ... 4127 files and directories currently installed.) Preparing to unpack .../acl_2.2.53-6_amd64.deb ... Unpacking acl (2.2.53-6) ... Setting up acl (2.2.53-6) ... root@11ce9e5ee80e:/# useradd alice root@11ce9e5ee80e:/# useradd bob root@11ce9e5ee80e:/# useradd carol root@11ce9e5ee80e:/# useradd dave |
Geleneksel UNIX dosya izinleri, bir dosyanın kullanıcı ve grup sahipliğini destekler. Bir dosya için okuma, yazma ve yürütme izinleri kullanıcı, grup veya diğerleri için ayarlanabilir. Bir dosyanın izinlerini ls -l komutu ile görüntüleyebilirsiniz. Alice, Bob ve Carol için ev dizinleri oluşturalım ve varsayılan izinleri görüntüleyelim:
root@11ce9e5ee80e:/# cd home root@11ce9e5ee80e:/home# mkdir alice bob carol root@11ce9e5ee80e:/home# ls -l total 12 drwxr-xr-x 2 root root 4096 Oct 28 01:28 alice drwxr-xr-x 2 root root 4096 Oct 28 01:28 bob drwxr-xr-x 2 root root 4096 Oct 28 01:28 carol |
drwxr-xr-x metni bize bu dosyaların dizin olduğunu, sahibinin okuma/yazma/çalıştırma iznine sahip olduğunu, grubun okuma/çalıştırma iznine sahip olduğunu ve diğer kullanıcıların okuma/çalıştırma iznine sahip olduğunu söyler. Bir dizinin içeriğini görüntülemek için çalıştırma izinlerinin gerekli olduğunu unutmamak önemlidir.
Dosya sahipleri ve gruplar chown . biçimini izleyen chown komutu ile ayarlanır. Bu komutu alice, bob ve carol'un ev dizinlerini özel yapmak için kullanmayı deneyelim:
root@11ce9e5ee80e:/home# chown alice.alice alice root@11ce9e5ee80e:/home# chown bob.bob bob root@11ce9e5ee80e:/home# chown carol.carol carol root@11ce9e5ee80e:/home# ls -l total 12 drwxr-xr-x 2 alice alice 4096 Oct 28 01:28 alice drwxr-xr-x 2 bob bob 4096 Oct 28 01:28 bob drwxr-xr-x 2 carol carol 4096 Oct 28 01:28 carol |
Bir UNIX sistemine useradd komutuyla bir kullanıcı eklendiğinde, bu kullanıcının adıyla bir grup oluşturulur. Bu, chown'a yalnızca kendilerinin erişebileceği bir grup aktarmamızı sağlar. Bu iyi bir başlangıç olsa da, başkaları hala bu dizinleri okuma ve çalıştırma yeteneğine sahiptir, yani herkes içeriği görüntüleyebilir. Bunu kanıtlamak için, dave rolünü üstlenelim ve her bir dizinde bir ls yapmayı deneyelim:
root@11ce9e5ee80e:/home# su dave $ ls alice $ ls bob $ ls carol $ exit |
Bakılacak hiçbir dosya olmamasına rağmen ls komutu başarılı oldu. Eğer içeriği görüntüleyemiyor olsaydık, izin reddedildi hatası alırdık. chmod komutu bir Kullanıcı (u), Grup (g), Diğerleri (o) veya Tümü (a) için dosya izinlerini değiştirmek için kullanılır. chmod - ile bir izni kaldırabilir, + ile bir izin ekleyebilir veya = ile bir izni ayarlayabilir (diğerlerini kaldırarak). Bu ev dizinlerini gerçekten özel yapmak için chmod kullanalım:
root@11ce9e5ee80e:/home# chmod u=rwx,g=,o= alice root@11ce9e5ee80e:/home# chmod u=rwx,g=,o= bob root@11ce9e5ee80e:/home# chmod u=rwx,g=,o= carol root@11ce9e5ee80e:/home# ls -l total 12 drwx------ 2 alice alice 4096 Oct 28 01:28 alice drwx------ 2 bob bob 4096 Oct 28 01:28 bob drwx------ 2 carol carol 4096 Oct 28 01:28 carol |
Her şey çok daha iyi görünüyor, ancak test edelim ve Dave'in herhangi bir dizini görüntüleyip görüntüleyemeyeceğini görelim:
root@11ce9e5ee80e:/home# su dave $ ls alice ls: cannot open directory 'alice': Permission denied $ ls bob ls: cannot open directory 'bob': Permission denied $ ls carol ls: cannot open directory 'carol': Permission denied $ exit |
Son olarak, Alice'in ev dizininin içeriğini görüntüleyebildiğinden emin olalım:
root@11ce9e5ee80e:/home# su alice $ ls alice $ exit |
| İlk adınızı (tümü küçük harf) kullanarak kendinizi bir kullanıcı olarak ekleyin ve kendiniz için bir ev dizini oluşturun. İzinleri, içeriği yalnızca siz görüntüleyebilecek şekilde ayarlayın. Ev dizininin izinlerini gösterin ve başka bir kullanıcının içeriğini görüntüleyemeyeceğini gösterin. Tüm bunları gösteren bir ekran görüntüsü alın ve bunu çıktılarınızdan biri olarak gönderin. |
Ne yazık ki geleneksel UNIX dosya izinleri genellikle modern bir sistemde ihtiyaç duyulan ayrıntı düzeyini sağlamaz. Örneğin, bir web sunucusunun Alice, Bob ve Carol'ın ev dizinlerinin içeriğini görüntüleyebilmesini istediğimizi varsayalım. Bu genellikle kullanıcıların ev dizinlerine bir public_html dizini yerleştirmelerine ve kişisel bir web alanı oluşturmalarına izin vermek için yapılır. Bunu, ev dizinlerini başkaları tarafından görüntülenebilir hale getirerek yapabiliriz, ancak o zaman başladığımız aynı sorunla karşılaşırız. Bunu, ev dizinlerinin grup sahipliğini web sunucusunun parçası olduğu bir grup olarak değiştirerek de yapabiliriz, ancak o zaman ev dizinlerini bu grubun parçası olan diğer kullanıcılara veya hizmetlere açmış oluruz.
Bu sorunun çözümü, izinlerde ince ayar yapmanıza olanak tanıyan Linux ACL'lerini kullanmaktır. Linux ACL'lerini ayarlamak için setfacl ve getfacl adlı iki komut kullanılır. Örnek olarak bir http kullanıcısı ekleyelim, setfacl komutunu kullanarak http kullanıcısına her üç dizin için okuma ve çalıştırma izinlerini açıkça verelim, yeni izinleri listeleyelim ve yeni ACL'leri listeleyelim:
root@11ce9e5ee80e:/home# useradd http root@11ce9e5ee80e:/home# setfacl -m u:http:rx alice bob carol root@11ce9e5ee80e:/home# ls -l total 12 drwxr-x---+ 2 alice alice 4096 Oct 28 01:28 alice drwxr-x---+ 2 bob bob 4096 Oct 28 01:28 bob drwxr-x---+ 2 carol carol 4096 Oct 28 01:28 carol root@11ce9e5ee80e:/home# getfacl alice bob carol # file: alice # owner: alice # group: alice user::rwx user:http:r-x group::--- mask::r-x other::--- # file: bob # owner: bob # group: bob user::rwx user:http:r-x group::--- mask::r-x other::--- # file: carol # owner: carol # group: carol user::rwx user:http:r-x group::--- mask::r-x other::--- |
| Http kullanıcısının her dizine erişimi olduğunu gösteren bir ekran görüntüsü alın. |
İşiniz bittiğinde, bash'ten çıkmak ve konteyneri durdurmak için exit yazabilirsiniz.
Sonraki Ders: Erişim Kontrolleri İnceleme Soruları
Yorumlar
Yorum Gönder