Linux'ta chattr Komutu Nasıl Kullanılır

Yayınlanan: 2022-06-28
Kırmızı dizüstü bilgisayar arka planında Linux terminali.
fatmawati achmad zaenuri/Shutterstock

Normal 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.

Linux'ta chmod Komutu Nasıl Kullanılır
İLGİLİ Linux'ta chmod Komutu Nasıl Kullanılır

İ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.

Linux'taki düğümler hakkında bilmek istediğiniz her şey
İLGİLİ Linux'taki düğümler hakkında bilmek istediğiniz her şey

İ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 

Bir dizindeki tüm dosyalar için dosya özniteliklerini listeleme

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. Bunu chattr 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 

Bir metin dosyasında yalnızca ekleme özelliğini ayarlama

Yalnızca ekleme bitinin ayarlanıp ayarlanmadığını lsattr kullanarak kontrol edebiliriz:

 lsattr metin dosyası.txt 

Bir metin dosyası için niteliklerin listelenmesi

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 

Bir metin dosyasındaki yer tutucu metin

Çıktıyı ls dosyaya yönlendireceğiz:

 ls -l > metin dosyası.txt
 sudo ls -l > metin dosyası.txt 

Yalnızca ekleme içeren bir metin dosyasının üzerine yazmaya çalışmak

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 

Çıktıyı bir metin dosyasının sonuna yönlendirme

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 

Bir metin dosyasının içeriğini inceleme

Dosyanın sonuna ls yönlendirilen çıktı eklendi.

Yalnızca ekleme metin dosyasına eklenen yeni veriler

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 

Yalnızca ekleme metin dosyası silinemiyor

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 

Bir metin dosyasında değişmez özniteliği ayarlama

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 

Değişikliğe direnen değişmez bir dosya

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 

Bir metin dosyasında güvenli silme özelliğini ayarlama

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 

Bir dosyanın düğümünü bulma

İ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 

Bir dosyanın ilk sabit sürücü bloğunu okuma

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 

Silinen bir dosya tarafından kullanılan bir sabit sürücü bloğundan veri okuma

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?