Dosya izinlerinde kullanıcı ve grup sahibinin önceliği


20

Linux'ta (Arch Linux) dosya izinleri hakkında beklenmedik bir şeyle (benim için) karşılaştım. Temelde:

  • userX içinde groupX
  • fileX userX:groupX ---rwx----

Beni ne şaşırttı: Hiçbir eylem ( rwx) yapamıyorum fileX. Bu doğru mu? Birisi bunun gerçekten beklenen davranış olduğunu teyit edebilir mi?

Yapabileceğim tek eylem vardır mvve rmüst dizinde yazma izinlerine sahip olduğum için.

Mesele şu ki, her zaman bu izinlerin en genel olandan (diğer -> grup -> kullanıcı) başlayarak birbiri üzerinde çöktüğünü düşündüm. Başka bir deyişle, o=rwxgrup ve kullanıcı için ne gibi istekleri varsayalım? Görünüşe göre bu böyle değil ama benim için pek mantıklı değil; mantıksız görünüyor. Bu yaklaşımın yararlı olduğu tek şey, ona gitmek için akıllı bir yol gibi görünmeyen çok özel bir kişiyi / grubu kolayca dışlamaktır (imho). Ayrıca, sahibi (ve grup?) chmodYine de yapabiliyor olmalı değil mi? Bu konuda herhangi bir düşünceniz var mı?


kesinlikle grupX'te misin?
exussum

yeap, kesinlikle; etkin gid ile kontrolid
alex

Yanıtlar:


24

Mesele şu ki, her zaman bu izinlerin en genel olandan (diğer -> grup -> kullanıcı) başlayarak birbiri üzerinde çöktüğünü düşündüm.

Eğer durum buysa, herkes için “diğer” izinler geçerli olacaktır.

Diğer bir deyişle, o = rwx ise, grup ve kullanıcı için ne gibi emirlerin bulunduğunu kimin umurunda?

Bu, önceki cümlenizden farklı. Burada, izinlerin bir arada ya da bir araya getirildiğini ima edersiniz; örneğin, userX dosyaya sahipse ve dosya kullanıcı tarafından okunabiliyorsa veya userX'in ait olduğu bir grup dosyanın sahibi ve dosya grubuysa, userX'in okuma iznine sahip olduğunu ima edersiniz. -readable veya dosya başka bir okunabilir ise. Ama bu böyle değil. Aslında, izinlerin başkaları için geçerli olduğu o=rwxanlamına gelir rwx, ancak başkaları olmayan varlıklar hakkında hiçbir şey söylemez.

İlk olarak, bir kullanıcının hangi gruplara ait olduğu doğrudan önemli değildir. Çekirdeğin, gruplara ait kullanıcılar fikri yoktur. Çekirdek, her işlem için bir kullanıcı kimliği ( etkili UID ) ve grup kimlikleri listesidir (etkili GID ve ek GID'ler). Gruplar, oturum açma işlemi sırasında oturum açma işlemi tarafından belirlenir - grup veritabanını okuyan oturum açma işlemidir (örn. /etc/group). Kullanıcı ve grup kimlikleri alt süreçler tarafından devralınır¹.

Bir işlem geleneksel Unix izinlerine sahip bir dosyayı açmaya çalıştığında:

  • Dosyanın sahibi olan kullanıcı işlemin etkin UID'siyse, kullanıcı izin bitleri kullanılır.
  • Aksi takdirde, dosyanın sahibi grup sürecin etkili GID'si veya sürecin ek grup kimliğinden biriyse, grup izin bitleri kullanılır.
  • Aksi takdirde, diğer izin bitleri kullanılır.

Yalnızca bir rwx bit seti kullanılır. Kullanıcı, diğer gruba göre öncelikli olan gruptan önceliklidir. Olduğunda erişim kontrol listeleri , algoritmanın yukarıda genel Tarıf:

  • İşlemin etkin UID'si için dosyada bir ACL varsa, erişimin verilip verilmediğini belirlemek için kullanılır.
  • Aksi takdirde, işlemin etkin GID'si veya işlemin ek grup kimliğinden biri için dosyada bir ACL varsa, grup izin bitleri kullanılır.
  • Aksi takdirde, diğer izin bitleri kullanılır.

Ayrıca , maske etkisi de dahil olmak üzere ACL girişlerinin nasıl kullanıldığı hakkında daha fazla ayrıntı için Bir kullanıcı birden çok gruba dahil olduğunda ACLS'nin önceliği konusuna bakın .

Böylece -rw----r-- alice internsAlice tarafından okunabilen ve yazılabilen ve stajyerler dışındaki tüm kullanıcılar tarafından okunabilen bir dosyayı belirtir. İzinleri ve sahipliği olan bir dosyaya ----rwx--- alice internssadece Alice dışındaki stajyerler tarafından erişilebilir (stajyer olsun ya da olmasın). Alice chmodizinleri değiştirmek için arayabildiğinden , bu herhangi bir güvenlik sağlamaz; bu bir uç durum. ACL'leri olan sistemlerde, genelleştirilmiş mekanizma belirli kullanıcılardan veya belirli gruplardan izinlerin kaldırılmasına izin verir, bu da bazen yararlıdır.

Her eylem için tüm bitleri (okumak, yazmak, yürütmek) yerine tek bir bit kümesi kullanmanın çeşitli avantajları vardır:

  • ACL'leri olan sistemler üzerinde bir grup kullanıcı veya gruptan izinlerin kaldırılmasına izin vermenin faydalı etkisi vardır. ACL olmayan sistemlerde izinler bir gruptan kaldırılabilir.
  • Uygulanması daha kolaydır: birkaç bit kümesini birleştirmek yerine bir bit kümesini kontrol edin.
  • Daha az işlem yapıldığından, bir dosyanın izinlerini analiz etmek daha kolaydır.

Set Bir setuid veya setgid işlemi yürütüldüğünde değişebilirler . Bu konudaki sorunla ilgili değil.


iyi ... "çöken" ile Ben aynı şey, bir OR operasyon demekti :)
alex

zaman ayırdığınız için teşekkürler; Çok ayrıntılı ve oldukça teknik cevap için +1
alex

Mükemmel cevap. Ama son mermi puanlarınız hakkında bir sorum var: Uygulamak ve analiz etmek gerçekten daha mı basit? İzinleri denetlemek, OP'nin söz konusu olduğu gibi izinleri birlikte ORING'e gelmez miydi?
gardenhead

Bu uç durum hala bana aptalca geliyor: (groupX içinde userX) + (groupX içinde userZ). Bir dosyanız varXXX: groupX --- rwx ----. Şimdi orijinal klasör yaratıcısı userX fileX'e erişemiyor .. ancak userZ erişebiliyor Ve ikisi de aynı grubun bir parçası. Gerçekten sezgisel değil.
alexfvolk

4

Daha spesifik izinler, daha az spesifik olanlara göre önceliklidir.

grupX'deki userX

fileX userX: grupX - rwx ----

Dosyanın sahibi olduğunuz için size yalnızca sahip izinleri verilir. Sahibin izni yok. Böylece hiçbir şey yapamazsınız. Dosyanın sahibi ve bir grup üyesi olmasaydınız grup izinleri geçerli olurdu.

Lütfen wiki sayfasının bu bölümünü okuyun

https://en.wikipedia.org/wiki/File_system_permissions#Classes


2

-rwxrw---- sahibinin okuma, yazma ve yürütme izinleri, grubun okuma ve yazma ve diğerlerinin izinleri olmadığı anlamına gelir.

Verdiğiniz izinler, gruba 'groupX' dosyasını okumak, yazmak ve yürütmek için izin verir. "GroupX" grubunun üyesiyseniz ancak dosyanın sahibi değilseniz bu izinler sizin için geçerli olacaktır.

Bu durumda, dosyanın gerçekten sahibi olduğunuzu varsayıyorum. Yalnızca sahip için ayarlanan izinler sizin için geçerli olur. Elbette dosya sahibi izinleri geçersiz kılabilir veya değiştirebilir. Ancak grup bunu yapamaz. Örneğin, vim sizden yazma izniniz olmayan, ancak sahibinin sahibi olduğunuz bir dosyaya yazıp yazmadığınızı onaylamanızı ister.

Genellikle soldan sağa izinleri okurum. Ben sahibi miyim? Evetse, sahip izinleri geçerlidir. Değilse; grubun bir üyesi miyim? Evetse, grup izinleri uygulanır. Değilse, "Diğer" izinleri benim için geçerlidir.

Bazı durumlarda bir dosyanın sahibi olmak, ancak yazma izinlerine sahip olmamanız yararlı olabilir. Sizi dosyayı yanlışlıkla silmenize veya değiştirmenize karşı korur. Şahsen, tüm şablon dosyalarımda izin 400'ü ayarladım, sadece onları yanlışlıkla değiştirmediğimden emin olmak için. Aynı şey yürütme izinleri için de geçerlidir.


1
Soruyu yanlış anladığınıza inanıyorum. OP izinleri Diğerleri-> Grup-> Kullanıcı olarak "çöktüğünü" söylediğinde, eyleminize izin verilip verilmediğini belirlerken önce "Diğerleri" izinlerinin, ardından "Grup" izinlerinin ve son olarak (başkalarının tümü varsa) "Kullanıcı" olanlar.
Joseph R.

@JosephR. Evet, demek istediğim buydu :)
alex

Özür dilerim. O parçayı çıkaracağım. Cevapta faydalı bir şey var mı?
arnefm

Not: Cevabınızı biraz düzenlemelisiniz ve ikinci paragrafı bir tür "belirsiz" olduğu için kaldırmalısınız (veya yeniden ifade etmelisiniz) (yeterince açık değil, tarif ettiğim davranışla çelişiyor)
alex

İkinci düşüncede, cevabı hızlı bir şekilde kabul edebilirdim. Bunun için üzgünüm. Yani bazen bazı önemli dosyaları yanlışlıkla değiştirmemek için yazma iznine sahip olmamanın yararlı olduğunu söylüyorsunuz; ancak başkalarının tam izinleri olması iyi olur? (yani ... sen hatalar ancak yapmaktan durdurulacak diğerleri )
alex

0

Bir gruba kullanıcı ekleyebildim, gruba bir dizine grup izinleri verebildim (070) ve ardından YENİDEN BAŞLATMA klasöre erişebildi.

Grup oluştur: sudo groupadd grup adı

Gruba kullanıcı ekle: sudo gpasswd -a kullanıcı adı grup adı

Dizinin tamamının doğru grup sahipliği altında olduğundan emin olun (gerçekleştirilecek grup adının şu anki üyesi olmalıdır): sudo chgrp -R groupname directory_path /

Klasör için yalnızca rwx grubunu verin (sadece rw olabilir, gerektiği gibi ayarlayın): sudo chmod -R 070 directory_path

Yukarıdakileri yaptıktan sonra oturumu kapatıp tekrar açtığınızdan emin olun. Bu işe yaramazsa, makineyi yeniden başlatın. Bunu yapmak benim için çalıştı.

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.