Jakie są różne sposoby ustawiania uprawnień do plików itp. W GNU / Linux?

19

Na Unixie, dawno temu, dowiedziałem się o chmod: tradycyjnym sposobie ustawiania uprawnień, na Unixie (i pozwalaniu programom na uzyskiwanie uprawnień za pomocą setuid, setgid).

Niedawno odkryłem kilka nowszych poleceń na GNU / Linux:

  • setfaclrozszerza tradycyjne ugo:rwxbity i todrobinę chmod.
  • setcapdaje większą kontrolę nad płetwą niż ug:skawałki chmod.
  • chattr Pozwala na inne kontrolki (trochę mieszanki) pliku.

Czy są jeszcze jakieś?

ctrl-alt-delor
źródło
zobacz także unix.stackexchange.com/q/183994/4778, aby uzyskać więcej informacji na tematchmod
ctrl-alt-delor
zobacz także unix.stackexchange.com/q/246606/4778, aby uzyskać informacje na temat rozszerzonych list ACL (richACL).
ctrl-alt-delor

Odpowiedzi:

28

chmod: zmień bity trybu pliku

Użycie (tryb ósemkowy):

    chmod <octal-mode> files...

Zastosowanie (tryb symboliczny):

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

referencesjest kombinacją liter ugoa, które określają dostęp użytkownika do fileszmodyfikowanego:

  • u użytkownik, który jest jego właścicielem
  • ginni użytkownicy w filegrupie
  • o inni użytkownicy spoza grupy plików
  • a wszyscy użytkownicy

    Jeśli pominięty, domyślnie przyjmowany jest dla wszystkich użytkowników, ale umaskmodyfikowane są tylko uprawnienia dozwolone przez .

    operatorjest jedną z postaci +-=:

    • + dodaj określone bity trybu pliku do istniejących bitów trybu pliku każdego file
    • - usuwa określone bity trybu pliku z istniejących bitów trybu pliku każdego z nich file
    • =dodaje określone bity i usuwa nieokreślone bity, z wyjątkiem bitów setuidi setgidustawionych dla katalogów, chyba że wyraźnie zaznaczono.

    modeskłada się z kombinacji liter rwxXstokreślających, który bit uprawnień ma zostać zmodyfikowany:

    • r czytać
    • w pisać
    • x wykonać (lub wyszukać katalogi)
    • X wykonaj / szukaj tylko, jeśli plik jest katalogiem lub bit został już ustawiony dla niektórych użytkowników
    • ssetuid lub setgid (w zależności od podanego references)
    • t flaga ograniczonego usuwania lub lepki bit

    Alternatywnie, modemoże składać się z jednej z liter ugo, w którym to przypadku tryb odpowiada uprawnieniom obecnie przyznawanym właścicielowi ( u), członkowi filegrupy ( g) lub uprawnieniom użytkowników w żadnej z poprzednich kategorii ( o).

Różne części chmodwyjaśnione:

  • Kontrola dostępu (patrz także setfacl)
    • rwx - odczytaj (r), napisz (w) i wykonaj / cross (x) uprawnienia.
      • Odczyt (r) wpływa na to, czy plik można odczytać, czy katalog może zostać wymieniony.
      • Zapis (w) wpływa na to, czy plik można zapisać lub czy katalog może być edytowany (pliki dodawane, usuwane, zmieniane nazwy).
      • Wykonanie (x) wpływa na to, czy plik można uruchomić, użyj go w skryptach (patrz #!) i innych plikach wykonywalnych.
      • Krzyż (x) wpływa na to, czy katalog może być przechodzony.
    • soraz t- lepki bit (t) i setgid (s) w katalogach
      • Lepki bit wpływa tylko na katalogi. Zapobiegnie usunięciu plików z katalogu przez właściciela pliku i użytkownika root.
      • bit setgid w katalogach spowoduje, że nowe pliki i katalogi będą miały ustawione grupy na tę samą grupę, a nowe katalogi będą miały ustawiony bit setgid (patrz także domyślne w setfacl).
    • s - setuid, setgid, w plikach wykonywalnych.
      • Może to źle wpłynąć na bezpieczeństwo, jeśli nie wiesz, co robisz.
      • Po uruchomieniu pliku wykonywalnego, jeśli ustawiony jest jeden z tych bitów, efektywny użytkownik / grupa pliku wykonywalnego stanie się plikiem pliku. W ten sposób program działa jako ten użytkownik. sprawdź setcapbardziej nowoczesny sposób na zrobienie tego.

chown chgrp:


chattr: zmiana atrybutów pliku

Stosowanie:

    chattr <operator><attribute> files...

operatorjest jednym ze znaków +-=: * +dodaje wybrane atrybuty, aby być istniejąca attributesod files * -usuwa wybrany attributes * =zastępuje bieżący zestaw atrybutów plików z określonym attributes.

attributeto kombinacja liter acdeijstuADST, które odpowiadają atrybutom:

  • a dołącz tylko
  • c sprężony
  • d bez zrzutu
  • e format zasięgu
  • i niezmienny
  • j rejestrowanie danych
  • s bezpieczne usuwanie
  • t bez łączenia ogonów
  • u nieusuwalny
  • Abrak atimeaktualizacji
  • D synchroniczne aktualizacje katalogu
  • S aktualizacje synchroniczne
  • T początek hierarchii katalogów

setfattr: zmień atrybuty pliku rozszerzonego

Użycie (ustaw atrybut):

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

Użycie (usuń):

    setfattr -x <name> files...

name to nazwa rozszerzonego atrybutu do ustawienia lub usunięcia

value to nowa wartość atrybutu rozszerzonego


setfacl: zmiana list kontroli dostępu do plików

Stosowanie:

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

option musi zawierać jedno z poniższych:

  • --set ustaw ACL pliku lub katalogu, zastępując poprzednią ACL
  • -m| --modifyzmodyfikuj listę ACL pliku lub katalogu
  • -x| --remove usuń wpisy ACL pliku lub katalogu

    targetto jedna z liter ugmo(lub dłuższa forma pokazana poniżej):

  • u, userspozwolenie określonego użytkownika określonego przez param, domyślnie właściciela pliku, uidjeśli zostanie pominięte

  • g, grouppozwolenie na nazwaną grupę zidentyfikowane przez param, domyślnie jest właścicielem grupy, uidjeśli zostanie pominięte
  • m, maskskuteczna maska ​​uprawnień
  • o, otheruprawnienia innych osób

    permsto kombinacja liter rwxX, które odpowiadają uprawnieniom:

  • r czytać

  • w pisać
  • x wykonać
  • X wykonać tylko wtedy, gdy plik jest katalogiem lub ma już uprawnienia do wykonywania dla niektórych użytkowników

    Alternatywnie permsmoże być liczbą ósemkową ( 0- 7) wskazującą na zestaw uprawnień.


setcap: zmień możliwości pliku

Stosowanie:

    setcap <capability-clause> file 

capability-clauseZawiera listę rozdzielonych przecinkami zdolności nazwami następuje lista par operatora flag.

Dostępne są operatorzy =, +a -. Flagi są dostępne e, ia pktóre odpowiadają Skuteczne , dziedziczne i dopuszczalnych zestawów zdolności.

=Operator podniesie określone zestawy zdolności i zresetować innych. Jeśli żadne flagi nie zostaną podane w połączeniu z =operatorem, wszystkie zestawy możliwości zostaną zresetowane. +I -operatorzy będą podnosić lub obniżać jednego lub więcej określonych zestawów zdolności odpowiednio.


chcon: zmień kontekst bezpieczeństwa pliku SELinux

Stosowanie:

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

użytkownik jest użytkownikiem SELinuxa, jak user_u, system_ulub root.

rola jest rolą SELinuksa (zawsze object_rdla plików)

typ jest typem przedmiotu SELinuksa


chsmack: zmień atrybuty rozszerzone SMACK

Stosowanie:

    chsmack -a <value> file

valueto etykieta SMACK, którą należy ustawić dla SMACK64atrybutu pliku rozszerzonego


setrichacl : zmiana bogatej listy kontroli dostępu.

richacl to funkcja, która doda bardziej zaawansowane listy ACL.

Obecnie trwają prace, więc nie mogę ci wiele o nich powiedzieć. Nie korzystałem z nich.

Zobacz także to pytanie Czy istnieją bardziej zaawansowane listy ACL systemu plików poza tradycyjnymi listami ACR „rwx” i POSIX? i strona man

Thomas Nyman
źródło
5
+1 Jeśli dodałeś przykłady użycia każdego cmd, ta odpowiedź byłaby niezwykle przydatna, jako odpowiedź kanoniczną możemy odwołać się w dół drogi!
slm
1
@slm Dzięki za sugestię. Dodałem krótkie objaśnienie użycia dla każdego polecenia.
Thomas Nyman
Ostrzeżenie dla każdego, kto chce posunąć się dalej niż pokazano tutaj. Korzystałem z możliwości opisanych tutaj. Jednak próba dziedziczenia ich (pożytecznie) przez fork i exec wydaje się niemożliwa. Myślę, że jest błąd, patrz unix.stackexchange.com/questions/196483/…
ctrl-alt-delor
Błąd, o którym wspomniałem w poprzednim komentarzu, był to błąd projektowy i został naprawiony w jądrze 4.3 z dodatkiem funkcji otoczenia, patrz man7.org/linux/man-pages/man7/capabilities.7.html
ctrl-alt-delor
1
Chciałbym zobaczyć przykłady na ten temat, to stanie się kanoniczną odpowiedzią!
statquant 30.04.17
1

z wysokiego poziomu:

  • podstawowe uprawnienia systemu plików obsługiwanych przez wszystkich Linux oraz wszystkich plików , które jest -rwxrwxrwxobsługiwane przez chmod, wraz z właściciela i grupę identyfikatorów przywiązane do każdego pliku lub folderu w systemie plików obsługiwanym przez chowna chgrp; wszyscy w zasadzie znają ten utwór.
  • Rozszerzone atrybuty pliku, które są skrócone lub znane przez xattr . Są to funkcje systemu plików, które pozwalają użytkownikom kojarzyć pliki komputerowe z metadanymi nieinterpretowanymi przez system plików, podczas gdy zwykłe atrybuty mają ściśle określony przez system plików cel; atrybutami są nazwy: pary wartości powiązane na stałe z plikami i katalogami, podobne do łańcuchów środowiska powiązanych z procesem. Istnieją specyficzne polecenia linuksowe związane z prostym ustawieniem tych metadanych do różnych plików / folderów.
  • SELINUX znany jako bezpieczny linux . Możesz przeszukać na niej historię. Wiem też, że istnieją alternatywy dla SELINUX, takie jak AppArmor, i prawdopodobnie są też inne. W tym momencie są to moduły jądra, które zapewniają funkcjonalność i mechanizmy do wykonywania MAC (obowiązkowa kontrola dostępu) przy użyciu xattr; selinux przechowuje etykiety bezpieczeństwa plików w xattrs . I są specyficzne polecenia związane z selinux.

inne kluczowe punkty:

  • era i wersja gnu / linux ma znaczenie dla xattr i selinux dla tego, co jest dostępne, a co funkcjonalne.
  • zgłaszane jest, że nie wszystkie systemy plików obsługują xattr; najlepiej pozostawić do indywidualnych badań w oparciu o dystrybucję i używaną wersję Linuksa (rhel / suse / debian, irix, solaris, aix, unix od 1960)
  • tak naprawdę to tylko nieodłączne podstawowe uprawnienia do plików / folderów z uid / gid i xattr, które umożliwiają wszystko; SELinux używa xattr do przechowywania etykiet bezpieczeństwa plików / folderów ... w selinuxie wszystkie prace nisko-poziomowe są nieco wykonane / zdefiniowane w xattr, abyś mógł z nich skorzystać. Więc jeśli twój starożytny system plików nie obsługuje Xattr, nie będziesz używać selinux.
  • możesz włączyć lub wyłączyć selinux (lub apparmor lub dowolny inny moduł jądra)
  • w zależności od wersji linuxa, może być w stanie włączyć lub wyłączyć xattr dla danego zamontowanego systemu plików; Pamiętam w SLES 11 opcję montowania fstab user_xattri mogłem zdecydować, że xattr nie będzie dostępny w systemie plików root podczas instalacji; myślę teraz z RHEL / CentOS 7, że xattr jest tam domyślnie i nie możesz go nie mieć.
  • podczas wykonywania, lsjeśli widzisz, -rwxrwxrwx+że +wskazuje to na atrybut obiektu rozszerzonego pliku .
  • Lista kontroli dostępu (ACL): to lista uprawnień dołączonych do obiektu. Lista ACL określa, którzy użytkownicy lub procesy systemowe mają dostęp do obiektów, a także jakie operacje są dozwolone na danych obiektach.
  • z centos wiki selinux: selinux jest mechanizmem bezpieczeństwa MAC zaimplementowanym w jądrze; bez włączonego SELinux jedynie tradycyjne metody uznaniowej kontroli dostępu (DAC), takie jak uprawnienia do plików lub listy kontroli dostępu (ACL), są używane do kontrolowania dostępu użytkowników do plików; Użytkownicy i programy mogą udzielać innym użytkownikom niepewnych uprawnień do plików lub, przeciwnie, uzyskiwać dostęp do części systemu, które w innym przypadku nie byłyby konieczne do normalnego działania; Zasadniczo w tradycyjnym modelu DAC istnieją dwa poziomy uprawnień, root i użytkownik, i nie ma łatwego sposobu na egzekwowanie modelu najmniejszych uprawnień. Wiele procesów uruchamianych przez root'a później upuszcza swoje uprawnienia do działania jako użytkownik z ograniczonym dostępem
  • warto przeczytać, aby spojrzeć na użycie xattr i ACL w perspektywie, ponieważ linux [jądro] traktuje wszystko jako plik (urządzenia blokowe lub porty sieciowe), możesz otagować prawie wszystko za pomocą xattr i wymusić jakąś kontrolę dostępu poprzez selinux, to jest nie tylko pliki / foldery. https://wiki.centos.org/HowTos/SELinux
  • xattr może powodować problemy z przenoszeniem danych między systemami i systemami plików oraz NFS, gdzie [nowsze] systemy mają pełniejsze wsparcie dla xattr w porównaniu ze starszymi systemami, które mogą nie rozpoznawać wszystkich tych rozszerzonych atrybutów [jeśli w ogóle]. Pamiętaj, aby używać tarna urządzeniach z Xattr, jeśli pozostanie w tym systemie, nie ma problemu, ale jeśli pójdzie gdzie indziej, może być problematyczne, jeśli Xattr są ważne (tj. Samba i kopiowanie między Win10 NTFS i Linux Ext3 / 4, btrfs, XFS; lub wstecz i dalej między urządzeniami pamięci masowej podłączonymi do sieci)
  • jeśli nie ma selinuxu lub innego mechanizmu egzekwującego ACL przez to, co jest zdefiniowane w xattrs, to xattrteoretycznie nic nie może znaczyć i może zostać zrzucone lub rozebrane, ponieważ w tym momencie jest to po prostu dodatkowy bagaż.
  • bądź ostrożny wyłączając selinux teraz w rhel / centos 7, ponieważ jeśli system plików przestanie działać przez xattr, spowoduje to problemy przy zmianie selinux z powrotem na wymuszanie lub zezwolenie ; znowu zależy to od twojej wersji Linuksa i tego, jak korzysta z xattr przez selinux.

Podstawowy udział Samby nie działa w RHEL / CentOS 7 ... ponieważ selinux domyślnie jest ustawiony na wymuszanie; selinux odrzucił wszystko, dopóki na to nie pozwolisz, więc albo wyłącz selinux (zły), albo ustaw na permissive. Jeśli pozostawisz selinux jako wymuszający, musisz oznaczyć folder, który chcesz udostępnić samba, rozszerzonym atrybutem, aby selinux rozpoznał i zezwolił na udostępnienie. Więc jeśli pozostawisz egzekwowanie selinux, to za pomocą wszystkich poleceń selinux (które następnie ustawią niezbędne xattrs):

# 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

dalej używasz selinux, w systemie linux z tym udziałem samby, aby wymusić ograniczenia plików / folderów w tym udziale samby (używając dowolnego rozszerzonego atrybutu). Ponieważ te pliki / foldery są udostępniane, użytkownik zgodnie z prawem kopiuje niektóre z nich na swój komputer z systemem win10, a następnie kopiuje z powrotem, tracąc atrybut rozszerzony. Teraz, po tej kopii tam i z powrotem, na tym systemie linuksowym selinux ograniczy dostęp do wspomnianych plików, ponieważ niezbędny xattr nie jest już obecny, a użytkownicy / administratorzy uderzają tam głowami, zastanawiając się, dlaczego teraz to działa, nie działa ... ustawić selinux aby zezwolić i rozpoznać problem zagubionych xattrs pojawiających się w dziennikach kontroli, ale nie oznacza to bezpośrednio, że był to wynik utraty kopii xattr w obie strony. Weź również pod uwagę tworzenie kopii zapasowych i przywracanie danych oraz potencjalną pracę potrzebną do zapamiętaniaxattrs oprócz uid / gid, jeśli chcesz egzekwować bezpieczeństwo w oparciu o prawidłowe xattrs.

Ron
źródło