Gnu / linux'da dosya izinlerini vb. Ayarlamanın farklı yolları nelerdir?


19

Unix'te uzun zaman önce öğrendim chmod: Unix'te izinleri ayarlamanın geleneksel yolu (ve programların setuid, setgid kullanarak ayrıcalık kazanmasına izin vermek).

Son zamanlarda GNU / Linux üzerinde bazı yeni komutlar keşfettim:

  • setfaclGeleneksel uzanır ugo:rwxbit ve tbit chmod.
  • setcapug:sbitlerinden daha fazla yüzgeç-tane kontrolü sağlar chmod.
  • chattr Dosyanın diğer bazı denetimlerine (biraz karışımı) izin verir.

Başka var mı?


daha fazla ayrıntı için ayrıca bkz. unix.stackexchange.com/q/183994/4778chmod
ctrl-alt-delor

ayrıca bkz unix.stackexchange.com/q/246606/4778 genişletilmiş ACL (richACLs) için.
ctrl-alt-delor

Yanıtlar:


28

chmod: dosya modu bitlerini değiştir

Kullanım (sekizli mod):

    chmod <octal-mode> files...

Kullanım (sembolik mod):

    chmod <references><operator><modes> files..

references, ugoakullanıcının hangi kullanıcıya erişimin değiştirileceğini belirten harflerin birleşimidir files:

  • u sahibi olan kullanıcı
  • gfilegrubundaki diğer kullanıcılar
  • o dosya grubunda olmayan diğer kullanıcılar
  • a tüm kullanıcılar

    Atlanırsa, varsayılan olarak tüm kullanıcılar için geçerlidir, ancak yalnızca izin verilen izinler umaskdeğiştirilir.

    operatorkarakterlerden biri +-=:

    • + belirtilen dosya modu bitlerini her birinin mevcut dosya modu bitlerine ekleyin file
    • - belirtilen dosya modu bitlerini her birinin mevcut dosya modu bitlerine kaldırır file
    • =belirtilen bitleri ekler ve açıkça belirtilmedikçe, dizinler için ayarlanan setuidve setgidbitleri dışında belirtilen belirtilmemiş bitleri kaldırır .

    moderwxXsthangi izin bitinin değiştirileceğini belirten harflerin birleşiminden oluşur :

    • r okumak
    • w yazmak
    • x yürütme (veya dizinleri arama)
    • X yalnızca dosya bir dizinse veya zaten bazı kullanıcılar için yürütme biti ayarlanmışsa yürüt / ara
    • ssetuid veya setgid (belirtilene bağlı olarak references)
    • t kısıtlı silme bayrağı veya yapışkan bit

    Alternatif olarak, modeharflerden birini içerebilir, ugobu durumda mod şu anda sahibine ( u), filegrubunun üyesine ( ) üye olan gizinlere veya önceki kategorilerden hiçbirindeki ( ) kullanıcı izinlerine karşılık gelir o.

Açıklamanın çeşitli bitleri chmod:

  • Erişim kontrolü (ayrıca bkz. setfacl)
    • rwx - okuma (r), yazma (w) ve yürütme / çapraz (x) izinleri.
      • Okuma (r) bir dosyanın okunup okunamayacağını veya bir dizinin listelenip listelenemeyeceğini etkiler.
      • Write (w), bir dosyanın yazılabileceğini veya bir dizinin düzenlenip düzenlenemeyeceğini (eklenen dosyalar, silinen, yeniden adlandırılan) etkiler.
      • Execute (x), bir dosyanın çalıştırılıp çalıştırılamayacağını, komut dosyaları (bkz. #!) Ve diğer yürütülebilir dosyalar için kullanıp kullanamayacağını etkiler .
      • Cross (x), bir dizinin çaprazlanıp taşınamayacağını etkiler.
    • s ve t - dizinlerdeki yapışkan bit (t) ve setgid (ler)
      • Yapışkan bit sadece dizinleri etkiler. Dosya sahibi ve kök dışında herhangi birinin dizindeki dosyaları silmesini önler.
      • dizinlerdeki setgid biti, yeni dosyaların ve dizinlerin grubun aynı gruba ayarlanmasına ve yeni dizinlerin setgid bitinin ayarlanmasına neden olur (ayrıca setfacl'deki varsayılanlara bakın).
    • s - setuid, setgid, yürütülebilir dosyalarda.
      • Ne yaptığınızı bilmiyorsanız, bu güvenliği kötü bir şekilde etkileyebilir.
      • Bir yürütülebilir dosya çalıştırıldığında, bu bitlerden biri ayarlanırsa, yürütülebilir dosyanın etkin kullanıcı / grubu dosyanınkine dönüşür. Böylece program bu kullanıcı olarak çalışır. bkz setcapBunu yapmak için daha modern bir yol.

chown chgrp:


chattr: dosya özniteliklerini değiştir

Kullanımı:

    chattr <operator><attribute> files...

operatorkarakterlerden biridir +-=: * +Varolan için olmak üzere seçilen özelliklerini ekler attributesarasında files * -Seçilen kaldırır attributes * =dosyaları belirtilen ile olan niteliklerin güncel dizi üzerine yazar attributes.

attribute, acdeijstuADSTniteliklere karşılık gelen harflerin birleşimidir :

  • a sadece ekle
  • c sıkıştırılmış
  • d boşaltma yok
  • e kapsam biçimi
  • i değişmez
  • j veri günlüğü
  • s güvenli silme
  • t kuyruk birleşmesi yok
  • u undeletable
  • Aatimegüncelleme yok
  • D senkronize dizin güncellemeleri
  • S senkron güncellemeler
  • T dizin hiyerarşisinin başı

setfattr: genişletilmiş dosya özelliklerini değiştirme

Kullanım (set özelliği):

    setfattr -n <name> -v <value> files...

Kullanımı (kaldır):

    setfattr -x <name> files...

name ayarlanacak veya kaldırılacak genişletilmiş özelliğin adıdır

value genişletilmiş özelliğin yeni değeridir


setfacl: dosya erişim kontrol listelerini değiştirme

Kullanımı:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option aşağıdakilerden birini içermelidir:

  • --set önceki ACL'yi değiştirerek bir dosyanın veya dizinin ACL'sini ayarlama
  • -m| --modifybir dosya veya dizinin ACL'sini değiştirme
  • -x| --remove bir dosya veya dizinin ACL girişlerini kaldırma

    targetharflerden biri ugmo(veya aşağıda gösterilen daha uzun form):

  • u, userstarafından belirtilen bir kullanıcının izni param, varsayılan olarak uidatlanırsa dosya sahibinin izni

  • g, grouptarafından tanımlanmış bir grubun izni param, varsayılan uidatlanırsa sahip olan gruba
  • m, masketkili haklar maskesi
  • o, otherbaşkalarının izinleri

    permsrwxXizinlere karşılık gelen harflerin birleşimidir :

  • r okumak

  • w yazmak
  • x gerçekleştirmek
  • X yalnızca dosya bir dizinse veya zaten bazı kullanıcılar için yürütme iznine sahipse çalıştır

    Alternatif olarak, izin kümesini gösteren permsbir sekizli basamak ( 0- 7) olabilir .


setcap: dosya özelliklerini değiştirme

Kullanımı:

    setcap <capability-clause> file 

A capability-clause, virgülle ayrılmış bir yetenek adları listesinden ve ardından işleç-bayrak çiftlerinin bir listesinden oluşur.

Kullanılabilir işleçler =, +ve -. Mevcut bayrakları e, ive phangi tekabül Etkili , kalıtımsal ve izin verilen yetenek setleri.

=Operatör belirtilen yetenek setlerini yükseltmek ve başkalarını sıfırlayacak. =Operatörle birlikte bayrak verilmezse, tüm kapasite setleri sıfırlanacaktır. +Ve -operatörler sırasıyla bir veya daha fazla belirtilen yetenek setlerini yükseltmek ya düşürecektir.


chcon: SELinux güvenlik içeriğini değiştir

Kullanımı:

    chcon [-u <user>] [-r <role>] [-t <type>] files...

kullanıcıuser_u , system_uveya gibi SELinux kullanıcısıdır root.

rolü SELinux rolüdür (her zaman object_rdosyalar için)

tipi SELinux konu tipidir


chsmack: SMACK genişletilmiş özelliklerini değiştirme

Kullanımı:

    chsmack -a <value> file

valueSMACK64genişletilmiş dosya özelliği için ayarlanacak SMACK etiketi


setrichacl : zengin erişim kontrol listesini değiştirir.

richacl s, daha gelişmiş ACL'ler ekleyecek bir özelliktir.

Şu anda devam eden bir çalışma, bu yüzden size onlar hakkında çok şey söyleyemem. Onları ben kullanmadım.

Ayrıca bu soruya bakın Geleneksel 'rwx' ve POSIX ACL'nin ötesinde daha gelişmiş dosya sistemi EKL'leri var mı? ve adam sayfası


5
+1 Her bir cmd kullanımıyla ilgili örnekler eklediyseniz, bu cevap son derece yararlı olacaktır, kanonik bir cevap olarak yolda referans verebiliriz!
slm

1
@slm Öneri için teşekkürler. Her komut için kısa bir kullanım açıklaması ekledim.
Thomas Nyman

Yetenekleri burada gösterilenden daha ileri götürmek isteyenlere bir uyarı. Burada belirtildiği gibi yetenek kullandım. Ancak onları (faydalı bir şekilde) çatal ve yürütme üzerine miras almaya çalışmak imkansız görünüyor. Bence bir hata var, bkz. Unix.stackexchange.com/questions/196483/…
ctrl-alt-delor

Önceki yazımda bahsettiğim hata, bir tasarım hatasıydı
ctrl-alt-delor

1
Tüm bunların kanonik bir cevap olacağına dair örnekler görmek isterim!
yürürlüğe girme

1

yüksek bir seviyeden:

  • tarafından desteklenen temel dosya sistemi izinleri tüm linux ve tüm dosya sistemi olan -rwxrwxrwxtarafından ele chmodtarafından ele dosya sistemi her dosya veya klasör bağlı sahibi ve grubu kimlikleri ile birlikte chownve chgrp; herkes temelde bu parçayı biliyor.
  • Xattr tarafından kısaltılmış veya bilinen Genişletilmiş Dosya Öznitelikleri . Bunlar, kullanıcıların bilgisayar dosyalarını dosya sistemi tarafından yorumlanmayan meta verilerle ilişkilendirmelerini sağlayan dosya sistemi özellikleridir, oysa düzenli özniteliklerin dosya sistemi tarafından kesin olarak tanımlanmış bir amacı vardır; öznitelikler, bir işlemle ilişkili ortam dizelerine benzer şekilde, dosya ve dizinlerle kalıcı olarak ilişkilendirilmiş ad: değer çiftleridir. Bu meta verileri çeşitli dosyalara / klasörlere ayarlamakla ilgili belirli linux komutları vardır.
  • SELINUX güvenli linux olarak bilinir . Üzerinde geçmişte web'de arama yapabilirsiniz. Ayrıca AppArmor gibi SELINUX'a alternatifler olduğunu ve muhtemelen başkalarının da olduğunu bilin. Bu noktada bunlar , xattr kullanarak MAC (zorunlu erişim kontrolü) yapmak için işlevsellik ve mekanizmalar sağlayan çekirdek modülleridir ; selinux dosya güvenlik etiketlerini xattrs içinde saklar . Ve selinux ile ilgili özel komutlar var.

diğer önemli noktalar:

  • mevcut olan ve işlevsel olan için xattr ve selinux ile ilgili gnu / linux dönemi ve sürümü .
  • tüm dosya sistemlerinin xattr'i desteklemediği rapor edilmiştir; kullanılan linux'un dağılımına ve sürümüne dayanan bireysel araştırmalara en iyi şekilde bırakılmıştır (rhel / suse / debian, irix, solaris, aix, 1960'lardan unix)
  • gerçekten sadece her şeyi mümkün kılan uid's / gid's artı xattr's ile temel dosya / klasör izinleri; SELinux, dosya / klasör güvenlik etiketlerini saklamak için xattr'leri kullanır ... selinux ile tüm düşük seviyeli legwork, xattr'larda kullanmanız için biraz yapılır / tanımlanır. Eski dosya sisteminiz xattr'i desteklemiyorsa, selinux kullanmayacaksınız.
  • selinux'u (veya apparmor veya başka bir çekirdek modülünü) etkinleştirebilir veya devre dışı bırakabilirsiniz
  • linux sürümünüze bağlı olarak, belirli bir bağlı dosya sistemi için xattr'leri etkinleştirebilir veya devre dışı bırakabilir; SLES 11'de fstab bağlama seçeneğini hatırlıyorum user_xattrve yükleme sırasında kök dosya sisteminde xattr bulunmamayı seçebilirim; Şimdi RHEL / CentOS 7 ile xattr varsayılan olarak orada olduğunu ve o olamaz olamaz düşünüyorum.
  • Bir yaparken lsgörürseniz -rwxrwxrwx+o +uzun dosya özniteliği bu bulunduğunu gösteri nesne .
  • Erişim Kontrol Listesi (ACL): bir nesneye bağlı izinlerin listesidir. ACL, hangi kullanıcılara veya sistem işlemlerine nesnelere erişim izni verileceğini ve belirli nesnelerde hangi işlemlere izin verileceğini belirtir.
  • centos wiki selinux'dan: selinux çekirdeğe uygulanan bir MAC güvenlik mekanizmasıdır; SELinux etkinleştirilmeden, kullanıcıların dosya erişimini kontrol etmek için yalnızca dosya izinleri veya erişim kontrol listeleri (ACL) gibi geleneksel isteğe bağlı erişim kontrolü (DAC) yöntemleri kullanılır; Kullanıcıların ve programların başkalarına güvenli olmayan dosya izinleri vermesine veya tersine sistemin normal çalışma için gerekli olmaması gereken kısımlarına erişmesine izin verilir; Esasen geleneksel DAC modeli altında, kök ve kullanıcı olmak üzere iki ayrıcalık düzeyi vardır ve en az ayrıcalıklı bir modeli uygulamak için kolay bir yol yoktur. Kök tarafından başlatılan birçok işlem, kısıtlı kullanıcı olarak çalışma haklarını bırakır
  • xattr ve ACL'lerin kullanımını perspektife koymak için okumaya değer, çünkü linux [kernel] her şeyi bir dosya olarak (blok cihazları veya ağ bağlantı noktaları) ele alır, neredeyse her şeyi bir xattr ile etiketleyebilir ve selinux aracılığıyla bir tür erişim kontrolünü uygulayabilirsiniz, sadece dosyalar / klasörler değil. https://wiki.centos.org/HowTos/SELinux
  • xattr, sistemler ve dosya sistemleri ile NFS arasında veri taşıma ile ilgili sorunlara neden olabilir. Burada, daha yeni xattr sistemleri xattr'a karşı daha eski bir sisteme sahiptir. tarXattr ile ilgili şeyleri kullanmaya dikkat edin , eğer bu sistemde kalırsa sorun değil, ancak başka bir yere giderse xattr'ler önemliyse sorunlu olabilir (örn. Samba ve win10 ntfs ile linux ext3 / 4, btrfs, xfs arasında kopyalama veya geri ağa bağlı depolama aygıtları arasında gidip gelme)
  • eğer ACL'leri xattrs'de tanımlandığı şekilde zorlayan bir selinux veya başka bir mekanizma yoksa , o xattrzaman teorik olarak hiçbir şey ifade etmeyebilir ve düşebilir veya soyulabilir, çünkü bu noktada sadece ekstra bagajdır.
  • selinux'u şimdi rhel / centos 7'de devre dışı bırakmaya dikkat edin , çünkü xattr yoluyla etiketli dosya sistemi kaybolursa, selinux'u zorunlu veya izinli olarak değiştirirken sorunlara neden olur ; yine linux sürümünüze ve selinux üzerinden xattr'i nasıl kullandığına bağlıdır.

Temel Samba paylaşımı RHEL / CentOS 7'de çalışmıyor ... çünkü selinux varsayılan olarak zorlama olarak ayarlanmış; selinux siz selinux'u (kötü) devre dışı bırakana veya izin verecek şekilde ayarlayana kadar her şeyi reddetti. Selinux'u zorlama olarak bırakırsanız, samba'yı paylaşmak istediğiniz klasörü genişletilmiş bir öznitelikle etiketlemeniz gerekir, böylece selinux paylaşımı tanır ve izin verir. Bu nedenle selinux zorlamadan ayrılırsanız, tüm selinux komutlarıyla (daha sonra gerekli olanları ayarlayacaktır xattr):

# from centos 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

# this is an selinux command, not 
setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it with      samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the  rule in selinux (when enforced) will prevent access via samba to the folder.

chcon -t samba_share_t /mydatashare

ayrıca bu samba paylaşımının altındaki dosya / klasörlerde (genişletilmiş öznitelikleri kullanarak) kısıtlamaları uygulamak için bu samba paylaşımına sahip linux sistemindeki selinux'u kullanırsınız. Bu dosyalar / klasörler paylaşıldığından, bir kullanıcı meşru bir şekilde win10 bilgisayarına bazılarını kopyalar ve daha sonra geri kopyalayarak genişletilmiş özniteliğini kaybeder. Şimdi bu ileri geri kopyadan sonra, bu linux sistem selinux söz konusu dosyalara erişimi kısıtlayacaktır, çünkü gerekli xattr artık mevcut değildir ve kullanıcılar / yöneticiler, şimdi neden işlerin neden işe yaradığını merak ederek kafaları vuruyor ... selinux'u ayarla kayıp sorununa izin vermek ve bunu tanımakxattr Denetim günlüklerinde ancak bunun xattr'i kaybeden ileri geri kopyanın bir sonucu olduğunu doğrudan göstermez. Ayrıca veri yedekleme ve geri yüklemeyi ve hatırlanması gereken potansiyel işleri de göz önünde bulundurunxattru s / u ek olarak doğru güvenlik dayalı güvenlik uygulamak istiyorsanız xattrs.


Bu yazıda çok başıboş bir apostrophes fark ettim: UID nerede olması gerektiğini. ( bununla ilgili daha fazla bilgi için ctrlaltdelor.wordpress.com/2014/01/09/… adresine bakın .)
ctrl-alt-delor
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.