Linux'ta ACL'leri (Erişim Kontrol Listeleri) kullanarak Dosyaları/Dizinleri Güvenli Hale Getirin


Sistem Yöneticisi olarak ilk önceliğimiz, verileri yetkisiz erişime karşı korumak ve güvenliğini sağlamak olacaktır. Hepimiz chmod, chown, chgrp… vb. gibi bazı yararlı Linux komutlarını kullanarak ayarladığımız izinlerin farkındayız. Ancak bu varsayılan izinler, setlerin bazı sınırlamaları vardır ve bazen ihtiyaçlarımıza göre çalışmayabilir. Örneğin aynı dizin veya dosya üzerinde farklı kullanıcılar için farklı izin setleri oluşturamayız. Böylece Erişim Kontrol Listeleri (ACL'ler) hayata geçirildi.

Diyelim ki 'tecmint1', 'tecmint2' ve 'tecmint3' olmak üzere üç kullanıcınız var. Ortak gruba sahip olanların her biri 'acl' der. 'tecmint1 kullanıcısı, yalnızca 'tecmint2' kullanıcısının, ''ye ait dosyaları okuyabilmesini ve erişebilmesini istiyor tecmint1' ve başka hiç kimsenin buna erişimi olmamalıdır.

ACL'ler (Erişim Kontrol Listeleri) aynı numarayı yapmamıza olanak tanır. Bu ACL'ler, bir kullanıcı, grup ve bir kullanıcının grup listesinde yer almayan herhangi bir kullanıcı grubuna izin vermemize olanak tanır.

Not: Redhat Ürün Belgelerine göre ext3 dosya sistemi ve NFS'den dışa aktarılan dosya sistemleri için ACL desteği sağlar.

Linux Sistemlerinde ACL Desteği Nasıl Kontrol Edilir

Devam etmeden önce mevcut Çekirdek ve bağlı dosya sistemlerindeki ACL'ler için desteğe sahip olmalısınız.

1. ACL Desteği için Çekirdeği Kontrol Edin

Dosya sistemi için ACL Desteğini ve POSIX_ACL=Y seçeneğini kontrol etmek için aşağıdaki komutu çalıştırın (Y yerine N varsa, Çekirdek anlamına gelir) ACL'yi desteklemiyor ve yeniden derlenmesi gerekiyor).

[root@linux ~]# grep -i acl /boot/config*

CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y

2. Gerekli Paketleri Kontrol Edin

ACL'lerle oynamaya başlamadan önce gerekli paketlerin kurulu olduğundan emin olun. Aşağıda yum veya apt-get kullanılarak yüklenmesi gereken gerekli paketler verilmiştir.

[root@linux ~]# yum install nfs4-acl-tools acl libacl		[on RedHat based systems]
[tecmint@linux ~]$ sudo apt-get install nfs4-acl-tools acl	[on Debian based systems]

3. ACL Desteği İçin Takılı Dosya Sistemini Kontrol Edin

Şimdi, monte edilen dosya sisteminin ACL seçeneğiyle monte edilip edilmediğini kontrol edin. Aşağıda gösterildiği gibi kontrol etmek için 'mount' komutunu kullanabiliriz.

[root@linux ~]# mount  | grep -i root

/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)

Ancak bizim durumumuzda varsayılan olarak acl gösterilmiyor. Böylece, acl seçeneğini kullanarak monte edilen bölümü yeniden bağlama seçeneğimiz var. Ancak ilerlemeden önce, bölümün acl seçeneğiyle bağlanıp bağlanmadığından emin olmak için başka bir seçeneğimiz daha var çünkü yeni sistem için varsayılan montaj seçeneğiyle entegre edilebilir.

[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl

Default mount options:    user_xattr acl

Yukarıdaki çıktıda, varsayılan montaj seçeneğinin zaten acl desteğine sahip olduğunu görebilirsiniz. Başka bir seçenek de bölümü aşağıda gösterildiği gibi yeniden monte etmektir.

[root@linux ~]# mount -o remount,acl /

Daha sonra kalıcı hale getirmek için aşağıdaki girişi '/etc/fstab' dosyasına ekleyin.

/dev/mapper/fedora-root /	ext4    defaults,acl 1 1

Tekrar bölümü yeniden monte edin.

[root@linux ~]# mount -o remount  /

4. NFS Sunucusu için

NFS sunucusunda, NSF sunucusu tarafından dışa aktarılan dosya sistemi ACL'yi destekliyorsa ve ACL'ler NFS İstemcileri tarafından okunabiliyorsa, ACL'ler istemci Sistemi tarafından kullanılır.

NFS paylaşımında ACL'leri devre dışı bırakmak için NFS Sunucusunda '/etc/exportfs' dosyasına “no_acl” seçeneğini eklemeniz gerekir. NSF istemci tarafında devre dışı bırakmak için bağlama süresi boyunca tekrar “no_acl” seçeneğini kullanın.

Linux Sistemlerinde ACL Desteği Nasıl Uygulanır?

İki tür ACL vardır:

  1. Erişim ACL'leri: Erişim ACL'leri herhangi bir dosya veya dizine izin vermek için kullanılır.
  2. Varsayılan ACL'ler: Varsayılan ACL'ler yalnızca belirli bir dizinde erişim kontrol listesi vermek/ayarlamak için kullanılır.

Erişim ACL'si ile Varsayılan ACL arasındaki fark:

  1. Varsayılan ACL yalnızca dizin düzeyinde kullanılabilir.
  2. Bu dizinde oluşturulan herhangi bir alt dizin veya dosya, ACL'leri üst dizininden devralır. Öte yandan bir dosya, erişim ACL'leri olarak varsayılan ACL'leri devralır.
  3. Varsayılan ACL'leri ayarlamak için “–d” kullanırız ve Varsayılan ACL'ler isteğe bağlıdır.
Varsayılan ACL'leri Ayarlamadan Önce

Belirli bir dosya veya dizin için varsayılan ACL'leri belirlemek için 'getfacl' komutunu kullanın. Aşağıdaki örnekte getfacl, bir 'Müzik' klasörüne ilişkin varsayılan ACL'leri almak için kullanılır.

[root@linux ~]# getfacl Music/

file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::rw-
Varsayılan ACL'leri Ayarladıktan Sonra

Belirli bir dosya veya dizin için varsayılan ACL'leri ayarlamak için 'setfacl' komutunu kullanın. Aşağıdaki örnekte, setfacl komutu, 'Müzik' klasöründe yeni bir ACL'yi (okuma ve yürütme) ayarlayacaktır. güçlü>.

[root@linux ~]# setfacl -m d:o:rx Music/
[root@linux ~]# getfacl Music/
file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x

Yeni ACL'ler Nasıl Ayarlanır?

Herhangi bir dosya veya dizinde ayarlama veya değişiklik yapmak için 'setfacl' komutunu kullanın. Örneğin, 'tecmint1' kullanıcısına okuma ve yazma izinlerini vermek.

setfacl -m u:tecmint1:rw /tecmint1/example

ACL'ler Nasıl Görüntülenir?

Herhangi bir dosya veya dizinde ACL'yi görüntülemek için 'getfacl' komutunu kullanın. Örneğin, '/tecmint1/example' üzerinde ACL'yi görüntülemek için aşağıdaki komutu kullanın.

getfacl /tecmint1/example

file: tecmint1/example/
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

ACL'ler Nasıl Kaldırılır

ACL'yi herhangi bir dosyadan/dizinden kaldırmak için aşağıda gösterildiği gibi x ve b seçeneklerini kullanıyoruz.

setfacl -x ACL file/directory  	# remove only specified ACL from file/directory.

setfacl -b  file/directory   		#removing all ACL from file/direcoty

ACL’leri aşağıdaki senaryolara uygulayalım.

Her ikisi de 'acl' adında ortak ikincil gruba sahip olan iki Kullanıcı (tecmint1 ve tecmint2). 'tecmint1'e ait bir dizin oluşturacağız ve 'tecmint2<' kullanıcısına bu dizinde okuma ve yürütme iznini vereceğiz.'.

1. Adım: İki kullanıcı oluşturun ve her ikisinden de şifreyi kaldırın

[root@linux ~]# for user in tecmint1 tecmint2

> do
> useradd $user
> passwd -d $user
> done
Removing password for user tecmint1.
passwd: Success
Removing password for user tecmint2.
passwd: Success

2. Adım: İkincil Grupta Bir Grup ve Kullanıcılar Oluşturun.

[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2

3. Adım: Bir /tecmint Dizini oluşturun ve sahipliği tecmint1 olarak değiştirin.

[root@linux ~]# mkdir /tecmint1
[root@linux ~]# chown tecmint1 /tecmint1/
[root@linux ~]# ls -ld /tecmint1/

drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[root@linux ~]# getfacl /tecmint1

getfacl: Removing leading '/' from absolute path names
file: tecmint1
owner: tecmint1
group: root
user::rwx
group::r-x
other::r-x

4. Adım: tecmint1 ile giriş yapın ve /tecmint klasöründe bir Dizin oluşturun.

[tecmint@linux ~]$ su - tecmint1

Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmint1@linux ~]$ cd /tecmint1/
[tecmint1@linux tecmint1]$ mkdir example
[tecmint1@linux tecmint1]$ ll

total 4
drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[tecmint1@linux tecmint1]$ whoami 
tecmint1

5. Adım: Şimdi 'setfacl' kullanarak ACL'yi ayarlayın, böylece 'tecmint1' tüm rwx izinlerine sahip olacak, 'tecmint2', 'example' klasöründe yalnızca okuma iznine sahip olacak ve diğerlerinin hiçbir izni olmayacak.

setfacl -m u:tecmint1:rwx example/
setfacl -m u:tecmint2:r-- example/
setfacl -m  other:--- example/
getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::r-x
mask::rwx
other::---

6. Adım: Şimdi başka bir terminalde 'tecmint2' gibi diğer kullanıcıyla giriş yapın ve dizini '/tecmint1' olarak değiştirin. Şimdi ‘ls’ komutunu kullanarak içerikleri görüntülemeyi deneyin ve ardından dizini değiştirerek aşağıdaki gibi farkı görmeyi deneyin.

[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ ls -lR example/
example/:
total 0
[tecmint2@linux tecmint1]$ cd example/

-bash: cd: example/: Permission denied
[tecmint2@linux tecmint1]$ getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

7. Adım: Şimdi 'example' klasöründe 'tecmint2' için 'yürütme' iznini verin ve ardından <'yi kullanın. Efekti görmek için Strong>'cd' komutunu kullanın. Artık 'tecmint2' dizini görüntüleme ve değiştirme izinlerine sahip ancak herhangi bir şey yazma iznine sahip değil.

[tecmint1@linux tecmint1]$ setfacl -m u:tecmint2:r-x example/
[tecmint1@linux tecmint1]$ getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r-x
group::rwx
mask::rwx
other::---
[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ cd example/
[tecmint2@linux example]$ getfacl .
[tecmint2@linux example]$ mkdir test

mkdir: cannot create directory ‘test’: Permission denied
[tecmint2@linux example]$ touch test

touch: cannot touch ‘test’: Permission denied

Not: ACL uygulandıktan sonra aşağıdaki gibi 'ls –l' çıktısı için ekstra bir '+' işareti göreceksiniz.

[root@linux tecmint1]# ll

total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example

Referans Bağlantıları

ACL Belgeleri