DEĞİŞTİRİLEN bir dosyayı nasıl yapabilirim?


35

Giriş yaparken aşağıdakileri yapabilirim:

mkdir foo
touch foo/bar
chmod 400 foo/bar 
chmod 500 foo

Sonra vim'i açabilirim (değil root), düzenlerim bar, yazmaya zorlarım w!ve dosya değiştirilir.

İşletim sisteminin herhangi bir dosya değişikliğini reddetmesini nasıl sağlayabilirim?

GÜNCELLEME Mar 02 2017

  1. chmod 500 foo kırmızı bir ringa balığıdır: bir dizindeki yazma izninin bir dosyanın içeriğini değiştirme yeteneği ile ilgisi yoktur - yalnızca dosya oluşturma ve silme yeteneği.

  2. chmod 400 foo/barAslında dosyanın içeriğinin değişmesini engeller. Ama , bu yok değil bir dosyanın sahibi her zaman (hepsi atası dizinlerde çalıştırma izni yani dosyaya erişebilir varsayarak) onun dosyanın izinleri değiştirebilir - değiştirip bir dosyanın izinlerini engeller. Aslında, strace (1) vim'in (7.4.576 Debian Jessie) yaptığı şeyin bu olduğunu gösteriyor - vim, dosyanın sahibinin yazma iznini geçici olarak eklemek için chmod'u (2) çağırıyor, ardından dosyayı değiştiriyor ve ardından chmod'u çağırıyor ( 2) tekrar yazma iznini kaldırmak için. Bu yüzden chattr +ieserleri kullanmak - sadece root çağırabilir chattr -i. Teorik olarak, vim (veya herhangi bir program), root olarak çalıştırıldığında değişmez bir dosya üzerinde chmod ile yaptığı gibi chattr ile aynı şeyi yapabilir.


3
Davlumbazın altında vim, aslında izinleri değiştirip geri koyulduğuna inanıyorum .
Ürdün

Eğer Are değil olarak çalışan root?
Alvin Wong,

Alvin, bunu root olmayan bir kullanıcı olarak yapıyorum. Açıklığa kavuşturmak için yazıyı düzenledim.
user2141130

Yanıtlar:


49

"Değişmez" özelliğini, Linux'taki çoğu dosya sistemiyle ayarlayabilirsiniz.

chattr +i foo/bar

Değişmez niteliği kaldırmak için, -yerine kullanın +:

chattr -i foo/bar

Bir dosyanın geçerli özelliklerini görmek için lsattr kullanabilirsiniz:

lsattr foo/bar

Chattr (1) man sayfasının mevcut tüm özelliklerin bir açıklama sağlar. İşte açıklaması i:

   A  file with the `i' attribute cannot be modified: it cannot be deleted
   or renamed, no link can be created to this file  and  no  data  can  be
   written  to  the  file.  Only the superuser or a process possessing the
   CAP_LINUX_IMMUTABLE capability can set or clear this attribute.

3
Linux'ta bu değişmez bayrağı birçok dosya sistemlerinde kullanılabilir değil, sadece ext2 / 3/4 (en az Btrfs hfsplus, jfs, nilfs2, xfs, ocfs2, ubifs, gFS2, kod sayesinde hızlı bir bakıştan AFAICT ReiserFS'deki at)
Stéphane Chazelas

@StephaneChazelas chattrKomutun e2fsprogssistemimde paketin bir parçası olduğunu gördüm . Bu yüzden ifade verdim. Yorumunuzu temel alarak cevabı güncelledim.
Ürdün

Bu :-( sembolik bağlar için değil çalışır ben symlink edilebileceğini kaçınmak istiyorum çünkü bu çözüm, çok iyi olurdu. Arızî kök dahil herhangi bir kullanıcı tarafından değiştirilebilir.
natenho

Immutable bir inode bayrağı doğru, xattr değil mi? ioctl bayrağı kesin mi?
ytpillai

1

Yapabilirsin:

  1. Dosya sahibini rootveya yeni oluşturulan bir kukla kullanıcısını değiştirin
  2. Doğru grubu koru.
  3. chmod 440Gruba göre okumaya izin vermek için kullanın (sizsiniz).

Doğru kullanıcı bu gruptaki tek kişi değilse, yeni bir grup oluşturmalı ve yalnızca onu eklemeli ve bu grubu bunun için kullanmalısınız. Ancak, dosyanın sahibi siz değilsiniz, bu nedenle vidosya sahibini değiştiremezsiniz.


3
Üst dizine yazabilirseniz, vim dosyayı silebilir ve yeni bir tane oluşturabilir (ve bunu yaptığınızda ne yapar :w!). vim, dizinin izinlerini geçici olarak değiştirdiği sürece geçmez. Bu yüzden dizini yazılabilir olmamak güvenli olmalıdır.
Stéphane Chazelas 10:13

0

Tüm dizin ağacını salt okunur yapmak için:

cd <directory>
find ./ -print0 | sudo xargs -I {} -0 chattr +i {}

O, yine değişikliği okunabilir hale getirmek +iiçin -i.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.