Bir dosyanın / dizinin izinlerini kim değiştirebilir?


14

Bir dosyanın / dizinin sahibinin ve kök kullanıcının bir dosyanın / dizinin izinlerini değiştirmesine izin verilen tek kullanıcı olduğuna (emin değilim) inanıyorum. Doğru muyum veya izinleri değiştirmesine izin verilen başka kullanıcılar var mı?

Yanıtlar:


19

Yalnızca sahip ve root(süper kullanıcı) bir dosyanın veya dizinin iznini değiştirebilir. Bu, sahibin ve süper kullanıcının read ( r), write ( w) ve execute ( x) izinlerini ayarlayabileceği anlamına gelir . Ancak dosya ve dizinlerin sahipliğini (kullanıcı / grup) chown/ komutları chgrpile değiştirmeye sadece izin verilir root.


19
Dosyanın sahibi, kullanıcı yeni grubun üyesiyse o dosyanın grup sahipliğini değiştirebilir.
Kusalananda

7

Normal çalışma amacıyla, sadece kök ve sahibi yapabilir chmod. Buna ek olarak, kök can chownve chgrpve ayrıca sahibi olabilir chgrpsürece sahibinin hedef grubunun bir üyesi olarak.

Güvenlik nedeniyle, başka bir durum daha vardır: dosyayı içeren dizine yazma iznine sahip herhangi bir kullanıcı dosyayı bir kopyayla değiştirebilir ve böylece sahip olabilir ve izinleri ve içeriği değiştirme yeteneğini kazanabilir.

Şöyle ki:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

Bir dizin oluşturduk ve kök olarak bir dosya yazdık. Kök dosyaya sahip olduğu için, dosyaya yazamayız veya chmod yapamayız:

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

Ancak, dizine yazma iznimiz var, bu nedenle sahiplik almak için dosyayı değiştirebiliriz:

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

Ve şimdi sahibi olduğumuza göre, bu dosyayla istediğimizi yapabiliriz:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

Benzer şekilde, dosyaya giden tam yoldaki herhangi bir dizine yazma izni olan herhangi bir kullanıcı , dizin yapısını bu noktadan sonra değiştirebilir ve böylece dosyanın adı verilen ada sahip olabilir. Elbette asıl dosyanın ("dosya2" olarak yeniden adlandırdığımız) sahipliği veya izinleri değişmez.

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2

Herhangi bir Linux dağıtımının Windows gibi ek güvenlik özelliklerini destekleyip desteklemediğini biliyor musunuz? Windows'taysam, dizin izin verilse bile silinmesini önlemek için bir dosyanın silme iznini ayarlayabilirim.
Kevin Li

Birçok (en çok?) Mevcut Linux çeşidi getfacl / setfacl, "klasik" stil dosya izinlerinden daha fazla esneklik sağlayan dosya düzeyinde erişim kontrol listelerini ( ) destekler. * Nix içindeki dosya silme, dosyaya bağlantıyı dizinden kaldırarak çalışır, bu nedenle dosya kaldırma her zaman dizin izinleri tarafından kontrol edilir; dosya izinlerinin kendileri orada hiçbir rol oynamaz.
Bas

Unix'in “her şey bir dosya” felsefesine çok sadık. Yani böyle bir şeyin Linux'ta yapılamayacağını mı söylüyorsunuz?
Kevin Li

3
@KevinLi Bu cevap gerçekten tam değil. Bir dizindeki yapışkan biti , sahip olmayanların dosyaları silme veya yeniden adlandırma yeteneğini sınırlamak için ayarlayabilirsiniz . Bu soruya ve cevaplarına bakınız: unix.stackexchange.com/questions/79395/… ACL'leri veya diğer şemaları kullanmaya gerek yoktur.
Andrew Henle

@KevinLi * nix dosya sistemleri, Windows dosya sistemlerinden çok farklıdır. Dosyalar, dizin hiyerarşisinden ayrı olarak bulunur ve dizinlerde kendilerine işaret eden birkaç "sabit bağlantı" içerebilir. Bir dosyayı silmek aslında dizinde yapılan sabit bağlantıyı kaldırmak anlamına gelir. Dosya, kendisine kaç sabit bağlantının işaret ettiğini izler ve gerçek dosya, işaret eden en az bir sabit bağlantı olduğu sürece diskte kalır. Böylece, silme dizin izinleri, tarafından kontrol edilmektedir yapmak yalnızca dosya sahibi ve root; silme izin verecek Andrew söylediği gibi, özel bir seçenek var.
Bas

1

chmodKomut oldukça doğrudan aynı adlı günlüğe yazmasını söyler; chmod(2)sistem çağrısının kılavuz sayfası (Linux 4.10'da):

Çağıran işlemin etkin UID'si dosyanın sahibiyle eşleşmeli veya işlem ayrıcalıklı olmalıdır (Linux: bu özelliğe sahip olmalıdır CAP_FOWNER).

Çağıran işlem ayrıcalıklı değilse (Linux: özelliğe sahip değilse CAP_FSETID) ve dosya grubu, işlemin etkin grup kimliğiyle veya ek grup kimliklerinden biriyle eşleşmezse, S_ISGIDbit kapatılır, ancak bu hata döndürülmez.

Bu nedenle evet, root olarak çalışan bir işlem, herhangi bir dosyanın CAP_FOWNERkapasitesini düşürmemişse izinlerini değiştirebilir .


Ayrıca ilgi çeken chown; man sayfası chown(2)diyor ki:

Yalnızca ayrıcalıklı bir işlem (Linux: CAP_CHOWNyetenekli bir işlem) bir dosyanın sahibini değiştirebilir. Bir dosyanın sahibi, dosyanın grubunu, sahibinin üyesi olduğu herhangi bir gruba değiştirebilir. Ayrıcalıklı bir işlem (Linux: with CAP_CHOWN) grubu keyfi olarak değiştirebilir.

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.