Linux'ta chattr Komutu Nasıl Kullanılır
Yayınlanan: 2022-06-28Normal okuma, yazma ve yürütme dosya izinlerinin yanı sıra, Linux dosyaları, dosyanın diğer özelliklerini kontrol eden başka bir dizi özniteliğe sahiptir. Bunları nasıl göreceğiniz ve değiştireceğiniz aşağıda açıklanmıştır.
İzinler ve Nitelikler
Linux'ta bir dosyaya kimin erişebileceği ve onunla neler yapabileceği, kullanıcı merkezli bir dizi izin tarafından kontrol edilir. Bir dosyanın içeriğini okuyabilir, dosyaya yeni veriler yazabilir veya bir komut dosyası veya program ise bir dosyayı yürütebilir, tümü bu izinler grubuna tabidir. İzinler dosyaya uygulanır, ancak farklı kullanıcı kategorileri için kısıtlamaları ve yetenekleri tanımlar.
Dosyanın sahibine , dosya grubuna ve diğerleri , yani ilk iki kategoride olmayan kullanıcılar için izinler vardır. Bir dosya veya dizindeki izinleri görmek için ls
komutunu -l
(uzun listeleme) seçeneğiyle birlikte kullanabilirsiniz.
İzinleri değiştirmek için chmod
komutunu kullanırsınız. En azından, dosya için yazma izniniz varsa veya kök kullanıcıysanız yapabilirsiniz.
Dosya izinlerinin kullanıcı merkezli olduğunu görebiliriz çünkü izinleri kullanıcı düzeyinde verirler veya kaldırırlar. Buna karşılık, bir dosyanın öznitelikleri dosya sistemi merkezlidir. İzinler gibi, dosya veya dizinde ayarlanırlar. Ancak bir kez ayarlandığında, tüm kullanıcılar için aynıdır.
Nitelikler, izinlerden ayrı bir ayar koleksiyonudur. Değişmezlik ve diğer dosya sistemi düzeyindeki davranışlar gibi öznitelikler kontrol özellikleri. Bir dosyanın veya dizinin özniteliklerini görmek için lsattr
komutunu kullanırız. Nitelikleri ayarlamak için chattr
komutunu kullanıyoruz.
İzinler ve nitelikler inode içinde saklanır. Bir düğüm, dosyalar ve dizinler gibi dosya sistemi nesneleri hakkında bilgi tutan bir dosya sistemi yapısıdır. Bir dosyanın sabit sürücüdeki konumu, oluşturulma tarihi, izinleri ve öznitelikleri, tümü inode'unda depolanır.
Farklı dosya sistemleri farklı temel yapılara ve yeteneklere sahip olduğundan, öznitelikler bazı dosya sistemleri tarafından farklı davranabilir veya tamamen göz ardı edilebilir. Bu yazıda, birçok Linux dağıtımı için varsayılan dosya sistemi olan ext4
kullanıyoruz.
Bir Dosyanın Niteliklerine Bakmak
chattr
ve lsattr
komutları bilgisayarınızda zaten mevcut olacak, bu nedenle herhangi bir şey yüklemenize gerek yok.
Geçerli dizindeki dosyalardaki öznitelikleri kontrol etmek için lsattr
kullanın:
lsattr
Kesik çizgiler, ayarlanmamış öznitelikler için yer tutuculardır. Ayarlanan tek öznitelik, e
(uzantılar) özniteliğidir. Bu, dosya sistemi düğümlerinin sabit sürücüdeki dosyanın tüm bölümlerini işaret etmek için uzantıları kullandığını veya gerekirse kullanacağını gösterir.
Dosya, sabit sürücü bloklarının bitişik bir dizisinde tutuluyorsa, inode'un yalnızca dosyayı depolamak için kullanılan ilk ve son blokları kaydetmesi gerekir. Dosya parçalanmışsa, düğüm, dosyanın her parçasının ilk ve son bloğunun numarasını kaydetmelidir. Bu sabit sürücü blok numarası çiftlerine uzantılar denir.
Bu, en sık kullanılan özniteliklerin listesidir.
- a : Yalnızca ekleyin. Bu özniteliğe sahip bir dosya yalnızca eklenebilir. Yine de yazılabilir, ancak yalnızca dosyanın sonunda. Dosya içindeki mevcut verilerin herhangi birinin üzerine yazılması mümkün değildir.
- c : Sıkıştırılmış. Dosya sabit sürücüde otomatik olarak sıkıştırılır ve okunduğunda sıkıştırılmaz. Dosyalara yazılan veriler, sabit sürücüye yazılmadan önce sıkıştırılır.
- A :
atime
güncellemesi yok.atime
, bir dosyaya en son ne zaman erişildiğini kaydeden bir düğümdeki bir değerdir. - C : Yazma üzerine kopyalama yok. İki işlem bir dosyaya erişim talep ederse, aynı dosyaya işaretçiler verilebilir. Dosyaya yazmaya çalışırlarsa, yalnızca dosyanın kendi benzersiz kopyaları verilir, bu da onu bu işleme özgü kılar.
- d : Döküm yok. Linux
dump
komutu, tüm dosya sistemlerinin kopyalarını yedekleme ortamına yazmak için kullanılır. Bu öznitelik,dump
dosyayı yok saymasını sağlar. Yedeklemeden hariç tutulur. - D : Senkronize dizin güncellemeleri. Bir dizin için bu öznitelik açıldığında, o dizinde yapılan tüm değişiklikler eşzamanlı olarak, yani hemen sabit sürücüye yazılır. Veri işlemleri arabelleğe alınabilir.
- e : Kapsam biçimi.
e
niteliği, dosya sisteminin, dosyanın sabit sürücüdeki konumunu eşlemek için uzantıları kullandığını gösterir. Bunuchattr
ile değiştiremezsiniz. Dosya sisteminin çalışmasının bir işlevidir. - ben : değişmez. Değiştirilemez bir dosya, yeniden adlandırma ve silme dahil olmak üzere değiştirilemez. Kök kullanıcı, bu özelliği ayarlayabilecek veya ayarını kaldırabilecek tek kişidir.
- s : Güvenli silme. Bu öznitelik kümesine sahip bir dosya silindiğinde, dosya verilerini tutan sabit sürücü bloklarının üzerine sıfır içeren baytlar yazılır. Bunun
ext4
dosya sistemi tarafından dikkate alınmadığını unutmayın. - S : Senkron güncellemeler.
S
özniteliği ayarlanmış bir dosyada yapılan değişiklikler, dosyaya eşzamanlı olarak yazılır. - u :
u
özniteliği ayarlanmış bir dosyanın silinmesi, dosyanın bir kopyasının oluşturulmasına neden olur. Dosya yanlışlıkla kaldırılmışsa, bu dosya kurtarma için faydalı olabilir.
Bir Dosyanın Niteliklerini Değiştirme
chattr
komutu, bir dosyanın veya dizinin özniteliklerini değiştirmemizi sağlar. +
(set) ve -
(unset) operatörlerini chmod
komutuna ve izinlerine benzer şekilde bir özniteliği uygulamak veya kaldırmak için kullanabiliriz.
chattr
komutu ayrıca bir =
(yalnızca set) operatörüne sahiptir. Bu, bir dosyanın veya dizinin özniteliklerini yalnızca komutta belirtilen özniteliklere ayarlar. Diğer bir deyişle, komut satırında listelenmeyen tüm öznitelikler unset .
Yalnızca Ekle Özelliğini Ayarlama
Bir metin dosyasına yalnızca ekleme özniteliğini ayarlayalım ve dosyayla yapabileceklerimizi nasıl etkilediğini görelim.
sudo chattr + bir metin dosyası.txt
Yalnızca ekleme bitinin ayarlanıp ayarlanmadığını lsattr
kullanarak kontrol edebiliriz:
lsattr metin dosyası.txt
“ a
” harfi, özelliğin ayarlandığını gösterir. Dosyanın üzerine yazmaya çalışalım. Çıktıyı tek açılı ayraç “ >
” ile bir dosyaya yeniden yönlendirmek, dosyadaki tüm içeriği yeniden yönlendirilen çıktıyla değiştirir.
Metin dosyasını bir miktar lorem ipsum yer tutucu metniyle önceden yükledik.
kedi metin dosyası.txt
Çıktıyı ls
dosyaya yönlendireceğiz:
ls -l > metin dosyası.txt
sudo ls -l > metin dosyası.txt
sudo
komutunu kullansak bile işleme izin verilmiyor.
Çıktıyı yeniden yönlendirmek için iki açılı ayraç “ >>
” kullanırsak, dosyadaki mevcut verilere eklenir. Bu, yalnızca ekleme metin dosyamız için kabul edilebilir olmalıdır.
sudo ls -l >> metin dosyası.txt
Herhangi bir hata mesajı olmadan komut istemine geri döndük. Ne olduğunu görmek için dosyanın içine bir göz atalım.
kedi metin dosyası.txt
Dosyanın sonuna ls
yönlendirilen çıktı eklendi.
Dosyaya veri ekleyebilsek de, dosyada yapabileceğimiz tek değişiklik bu. Onu silemeyiz ve root da yapamayız.
rm metin dosyası.txt
sudo rm metin dosyası.txt
Değişmez Özelliği Ayarlama
Asla yeni veri eklenmeyecek bir dosyayı korumak istiyorsanız, değişmez özniteliği ayarlayabilirsiniz. Bu, veri ekleme de dahil olmak üzere dosyadaki tüm değişiklikleri engeller.
sudo chattr +i ikinci dosya.txt
lsattr ikinci dosya.txt
Değişmez özniteliğin ayarlandığını belirten “ i
”yi görebiliriz. Dosyamızı değişmez hale getirdikten sonra, kök kullanıcı bile onu yeniden adlandıramaz ( mv
), silemez ( rm
) veya ona veri ekleyemez.
sudo mv ikinci dosya.txt yeni ad.txt
sudo rm ikinci dosya.txt
sudo ls -l >> ikinci dosya.txt
ext4'te Güvenli Silmeye Güvenmeyin
Belirttiğimiz gibi, bazı işletim sistemleri tüm özellikleri desteklemez. Güvenli silme özniteliği, ext4
dahil olmak üzere ext
dosya sistemleri ailesi tarafından dikkate alınmaz. Dosyaların güvenli bir şekilde silinmesi için buna güvenmeyin.
Bunun ext4
çalışmadığını görmek kolaydır. Bir metin dosyasında s
(güvenli silme) niteliğini ayarlayacağız.
sudo chattr +s üçüncü dosya.txt
Yapacağımız şey, bu dosyayla ilgili meta verileri tutan düğümü bulmak. İnode, dosyanın kapladığı ilk sabit sürücü bloğunu tutar. Dosya bir miktar lorem ipsum yer tutucu metni içeriyor.
Doğru sabit sürücü konumunu okuduğumuzu doğrulamak için bu bloğu doğrudan sabit sürücüden okuyacağız. Dosyayı sileceğiz ve ardından aynı sabit dalış bloğunu bir kez daha okuyacağız. Güvenli silme özniteliği kabul ediliyorsa, sıfırlanmış bayt okumalıyız.
--fibmap
(dosya blok haritası) seçeneği ile hdparm
komutunu kullanarak dosyanın inode'unu bulabiliriz.
sudo hdparm --fibmap üçüncü dosya.txt
İlk sabit sürücü bloğu 18100656'dır. Okumak için dd
komutunu kullanacağız.
Seçenekler şunlardır:
- if=/dev/sda : Bu bilgisayardaki ilk sabit sürücüden okuyun.
- bs=512 : 512 baytlık bir sabit sürücü blok boyutu kullanın.
- atla=18100656 : 18100656 bloğundan önceki tüm blokları atlayın. Başka bir deyişle, 18100656 bloğundan okumaya başlayın.
- count=1 : Bir veri bloğunu okuyun.
sudo dd if=/dev/sda bs=512 atla=18100656 sayı=1
Beklendiği gibi lorem ipsum yer tutucu metnini görüyoruz. Sabit sürücüde doğru bloğu okuyoruz.
Şimdi dosyayı sileceğiz.
rm üçüncü dosya.txt
Aynı sabit disk bloğunu okursak, verileri hala görebiliriz.
sudo dd if=/dev/sda bs=512 atla=18100656 sayı=1
Yine, ext4
güvenli silme için buna güvenmeyin. Dosyaları, kurtarılamayacak şekilde silmek için kullanılabilecek daha iyi yöntemler vardır.
İLGİLİ: Linux'ta Dosyaları Güvenli Bir Şekilde Silme
Faydalı, Ama Dikkatli Kullanın
Dosyaların özniteliklerinin ayarlanması, onları kazara felaketlere karşı dayanıklı hale getirebilir. Bir dosyayı silemiyor veya üzerine yazamıyorsanız, oldukça güvenlidir.
Bunları sistem dosyalarına uygulamak ve Linux kurulumunuzu daha güvenli hale getirmek isteyebileceğinizi düşünebilirsiniz. Ancak güncellemeler yayınlandıkça veya yükseltmeler uygulandıkça sistem dosyalarının periyodik olarak değiştirilmesi gerekir. Bu nedenle, bu öznitelikleri yalnızca kendi oluşturduğunuz dosyalarda kullanmak en güvenli yoldur.
İLGİLİ: Fail2ban ile Linux Sunucunuzu Nasıl Güvenli Hale Getirirsiniz?