Czy mogę zastąpić moją umask za pomocą list ACL, aby wszystkie pliki utworzone w danym świecie katalogów były czytelne?

12

Załóżmy, że mój umask to 0077.

Mam katalog, foow którym chcę mieć do niego specjalne uprawnienia. Wszystkie pliki, które tworzę, foopowinny być czytelne dla świata, a wszystkie katalogi powinny być czytelne dla świata i wykonywalne.

Obecnie, jeśli utworzę plik, będzie to 0600, a katalog to 0700:

$ cd foo/
$ touch file
$ mkdir directory
$ ls -l
drwx------ 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw------- 1 nfm nfm    0 2012-01-12 16:15 file

Chcę, aby plik to 0644, a katalog 0755, niezależnie od mojego umask:

drwxr-xr-x 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw-r--r-- 1 nfm nfm    0 2012-01-12 16:15 file

Jak mogę to osiągnąć?

stickmangumby
źródło
Nie próbowałeś googlować „umask na katalog”, prawda? Gdybym miał uprawnienia, ja downvote cię za to, bo trzeci hitem jest bash włamać zrobić dokładnie to, co chcesz (przyznane, tylko dla ciebie, a nie dla innych użytkowników.)
Brett Dikeman
3
@BeeDee Widziałem to. Interesuję się innymi sposobami, mam nadzieję, że używam list ACL. Wolałbym nie sprawdzać / zmieniać mojego umask na każdym cd, ani zastępować funkcji bash.
stickmangumby

Odpowiedzi:

15

Tak, acl's mogą to zrobić.

  1. Upewnij się, że system plików jest podłączony przy użyciu acl. Aby to sprawdzić, wpisz mount. Powinieneś zobaczyć „acl” na liście innych uprawnień, np .:

    /dev/sda1 on / type ext4 (rw,errors=remount-ro,acl)
    

    Jeśli nie jest zamontowany z acl, otwórz / etc / fstab i dodaj „acl” do listy opcji:

    # /etc/fstab: static file system information.
    #
    # <file system> <mount point>   <type>   <options>       <dump>  <pass>
    /dev/sda1       /          ext3     noatime,errors=remount-ro,acl 0       1
    

    Teraz ponownie zainstaluj działający system plików, korzystając z nowych opcji:

    mount -v -o remount /
    
  2. Zainstaluj narzędzia acl. W Ubuntu / Debian jest to:

    sudo apt-get install acl
    
  3. Twoimi nowymi przyjaciółmi są setfacli getfacl. Użyj, setfaclaby zmienić domyślny acl dla katalogu:

    setfacl -d -m o:r foo
    

    -dustawia wartość domyślną, -mmodyfikuje acl i o:rprzyznaje „innym” prawo do czytania. Ustawienie domyślne w katalogu jest mniej więcej równoważne ustawieniu setgid w katalogu, ale zamiast nowo utworzonych plików dziedziczących grupę, dziedziczą acl. Razem setgid i acl mogą być potężne, ponieważ możesz udzielać domyślnych uprawnień grupie i uzyskiwać nowo utworzone pliki, aby należały do ​​tej grupy, w celu uzyskania skutecznego umask opartego na grupie na katalog.

  4. Sprawdź swoją pracę: ls -lpowinien teraz wyświetlać dodatkowe „+” wskazujące na obecność acl oprócz standardowych uprawnień do plików.

    % ls -la foo/
    drwxr--r--+
    

    Możesz uzyskać szczegółowe informacje na temat acl za pomocą getfacl.

    % getfacl foo
    # file: foo
    # owner: you
    # group: you
    user::rwx
    group::r--
    other::r--
    default:user::rwx
    default:group::---
    default:other::r--
    
użytkownik67641
źródło
1
To chyba nie działa dla mnie. setfacli getfaclzwracają oczekiwane dane wyjściowe, ale tylko katalogi (nie pliki) w katalogu nadrzędnym dziedziczą acl, a nawet wtedy moja umask ma pierwszeństwo przed domyślną (jeśli nie są czytelne dla całego świata, default:other::r--nie pozwala innemu użytkownikowi dostęp do nich). Czy przegapiłem coś oczywistego?
stickmangumby
Jedną rzecz, którą znalazłem (być może jest to problem): facl wydaje się używać pierwszej (użytkownika, grupy, innej), którą pasuje bieżący użytkownik. Oznacza to, że jeśli należysz do grupy dla pliku, acl dla grupy zostanie przetworzony, a nie acl dla innych. Acl powinien być nadal dziedziczony, jeśli zastosowałeś katalog z
opcją
1
Hm, po prostu spróbowałem jeszcze raz i wszystko działało dobrze. Przepraszamy, nie jestem pewien, co zrobiłem źle za pierwszym razem! Dzięki :)
stickmangumby
3

Możesz także wymusić umask dla katalogu, ustawiając właściwość maski ACL w następujący sposób:

setfacl -d -m mask:07 .
Saustrup
źródło
-4

Po prostu zainstaluj OnDir i skonfiguruj go odpowiednio do swoich potrzeb. Odpowiedziałem na podobny problem znajdujący się tutaj .

Bintut
źródło
Pytanie nie wspomina o przeszukiwaniu katalogów z terminalem, do czego służy OnDir.
Yarin