Jak udzielić uprawnień do odczytu zapisu, ale nie usuwać pliku

12

Chcę dać użytkownikom możliwość tworzenia plików do odczytu i odczytu w innym katalogu użytkownika, ale nie mieć opcji usuwania pliku po utworzeniu (lepki bit nie będzie tu działał ...), na przykład:

Mam użytkownika manager z katalogiem repository
Mam użytkownika, worker1który musi zapisywać pliki, /manager/repositoryale nie może ich usunąć
Mam użytkownika, worker2który musi zapisywać pliki, /manager/repository ale nie może usunąć plików
Mam użytkownika, worker3który musi zapisywać pliki, /manager/repository ale nie może usuń pliki

ale worker 1-2-3nie może usunąć plików tylko po utworzeniu manageri rootmoże usunąć worker 1-2-3utworzone pliki .

Próbowałem kilka chowni chmodsztuczki ze stosowaniem sticky bit bez powodzenia.

użytkownik63898
źródło
1
Czy worker*użytkownicy piszą do katalogu w określony sposób? Wspomniałeś w komentarzu, że pliki dziennika idą tutaj, więc czy to oznacza, że ​​jakiś plik wykonywalny jest uruchamiany w celu utworzenia plików tutaj? Jeśli tak, możesz dać workergrupie sudopozwolenie na uruchomienie pliku wykonywalnego jako manager. Następnie plik wykonywalny tworzyłby dzienniki jako managerużytkownik, które mogłyby być odczytywane przez pracowników.
Centimane
Jeśli użytkownik może zmodyfikować plik, może również usunąć jego zawartość, skutecznie „usuwając” go. Wygląda na to, że potrzebujesz jakiegoś interfejsu „przesyłania”, a nie systemów plików. E-maile byłyby najprostsze.
ybungalobill

Odpowiedzi:

8

W przeciwieństwie do systemu Windows nie ma wyraźnego pozwolenia na usuwanie w systemach Unix / Linux. Prawo do usunięcia (lub utworzenia lub zmiany nazwy) pliku jest powiązane z zawartym katalogiem. Usuń uprawnienia do zapisu dla pracowników /manager/repository/, aby uniemożliwić im tworzenie, usuwanie i zmianę nazw plików.

Pamiętaj, że nie można zezwolić na tworzenie plików, ale odmówić ich usunięcia.

przeciwdziałanie
źródło
jak można usunąć uprawnienie do zapisu, ponieważ plik będzie zapisywany przez cały czas, gdy jest to plik dziennika
user63898
. Mimo, że kiedyś prawda, wiele nowoczesnych systemów wsparcia rozszerzone ACL (NFSv4 ACL jako obsługiwany przez FreeBSD, Solaris lub Linux (Richacl plastra), które dają podobne możliwości jak Windows NT ACL Twój Grafika dystrybucja Linux może nie mieć go jednak.
Stéphane Chazelas
@ user63898 usuwasz uprawnienia do zapisu z katalogu, w którym znajduje się plik, a nie z samego pliku.
GnP
6

Przede wszystkim upewnij się, że ACL jest włączony w twoim systemie, a następnie uruchom to polecenie

setfacl -d -R -m user::rwx,user:worker1:---,user:worker2:---,user:worker3:--- \
/manager/repository

Jak to działa

  • Ta komenda da uprawnienia do odczytu, zapisu i wykonywania właścicielowi katalogu /manager/repository. Będzie on odwołać wszystkie uprawnienia worker1, worker2i worker3.

  • Zapewni to innym użytkownikom dostęp do odczytu i zapisu, ale odmówi dostępu do usunięcia.


Od man setfacl:

-d, --default
       All  operations  apply to the Default ACL.

-R, --recursive
       Apply operations to all files and directories recursively.

-m, --modify
       Options to modify the ACL of a file or directory.
Rahul
źródło
dzięki, ale problem polega na tym, że użytkownicy są cały czas tworzeni. a niektóre są usuwane przez administratora. więc to oznacza, że ​​muszę za każdym razem aktualizować katalog za pomocą setfacl? czy jest jakieś bardziej ogólne rozwiązanie?
user63898,
tak, gdy próbuję utworzyć plik z pracownikiem1 dotknij /manager/repository/x.txt im otrzymuję: dotknij: nie mogę dotknąć `/manager/repository/x.txt ': Odmowa
dostępu
wciąż otrzymuję odmowę dostępu, gdy robię ls -ld repozytorium im otrzymuję: drwxrwxr-t 2 użytkowników menedżera 4096 7 września 11:30 repozytorium /
user63898
podczas wykonywania setfacl -d -R -m użytkownik :: rwx, użytkownik: pracownik1: --- repozytorium /, a następnie próba utworzenia pliku z pracownikiem1 dotknij /manager/repository/x.txt otrzymuję: dotyk: nie mogę dotknąć `/ manager /repository/x.txt ': Odmowa
dostępu
5
czy to nie pozwoliłoby komuś tutaj napisać pustego pliku? Podobnie jak echo " " > $filespychanie zawartości pliku za pomocą „”, co technicznie jest zapisem, ale skutecznie usuwa zawartość. Wygląda na to, że najlepszym repo jak svn byłby najlepszy zakład tutaj.
Centimane,
3

Aby to zrobić z uprawnieniami, potrzebujesz systemu z obsługą list ACL podobnych do list ACL NFSv4. Na przykład we FreeBSD, jeśli system plików jest zamontowany z nfsv4aclsflagą, możesz:

mkdir testdir
chown manager:worker-group testdir
chmod 775 testdir
setfacl -m group@:D::deny testdir

Jawnie zaprzecza się delete_childuprawnienia do członków worker-groupgrupy.

Należy jednak pamiętać, że ponieważ pracownicy byliby właścicielami tworzonych przez siebie plików, nadal mogliby modyfikować na nich listy ACL i przyznając sobie deleteuprawnienia, które miałyby pierwszeństwo przed delete_childzezwoleniem katalogu nadrzędnego, a ja nie jestem na pewno jest na to sposób (przynajmniej w systemach plików UFS na FreeBSD). Na przykład mogliby zrobić:

$ touch file
$ rm -f file
rm: file: Operation not permitted
$ setfacl -m owner@:d::allow file
$ rm -f file
$
Stéphane Chazelas
źródło
0

Aby pobrać uprawnienia do zapisu z /manager/repositoryfolderu. Tak więc wszyscy użytkownicy, którzy nie są rootami, będą mogli zapisywać lub usuwać pliki znajdujące się w nim /manager/repository, ale nie mogą usuwać żadnych plików z tego katalogu.

chmod 755 /manager/repository
Josef Klimuk
źródło
0

możemy modyfikować pliki i foldery, ale nie możemy ich usunąć.

Aby usunąć atrybuty, uruchom następujące polecenia:

Dla plików:

$ sudo chattr -R -a file.txt

W przypadku katalogów:

$ sudo chattr -R -a dir1/
Ankitsrivasta
źródło
(1) Zgodnie z dokumentacją aatrybut oznacza tylko dołączanie. Czy użytkownicy mogą edytować te pliki? (2) Jaki jest wpływ ustawienia aatrybutu na katalog?
Scott