Globalna zmiana praw plików za pomocą find

Erewhon

Nowy użytkownik
Noobie
1 Październik 2008
4
0
1
Tarnowskie Góry
blog.kompromis.net
QNAP TS-509 Pro:
  • utworzony udział sieciowy
  • utworzona grupa z pełnym dostępem do tego udziału
  • kilkunastu użytkowników przyporządkowanych do tej grupy

Skopiowałem do nowego udziału sieciowego dokumenty z innego serwera plików (działającego na win 2000).

Po skopiowaniu użytkownicy zaczęli mi zgłaszać, że nie potrafią w niektórych kartotekach tworzyć nowych dokumentów, ani zapisywać zmian w plikach znajdujących się w tych kartotekach.

Zalogowałem się poprzez SSH na QNAP-a i wylistowałem zbiory, okazało się, że niektóre katalogi i pliki mają prawa tylko do odczytu. To postanowiłem globalnie ustawić prawa 777 dla kartotek i 666 dla zbiorów.

uruchamiam find-a:
Kod:
[/share/MD0_DATA/dane] # find ./ -type d
widzę, że wylistowało mi wszystkie katalogi, to uruchamiam teraz z parametrem -perm jak podpowiada help do find-a:
Kod:
[/share/MD0_DATA/dane] # find ./ -type d -perm 777
niestety nie zmienia to wszystkich katalogów (zwłaszcza zagnieżdżanych).

Jakaś podpowiedź, jak sobie poradzić z globalną zmianą praw dostępu do plików/katalogów ?
 
Od tej komendy rozpocząłem próbę zmiany praw, ale niestety find na QNAPie nie przyjmuje parametru --exec


A co do parametru -param to przyznaję się, to fakt on wyszukuje zbiory o ustawionych prawach - tutaj mój bład, który mogę wytłumaczyć tylko porannym roztargnieniem :)


czy w związku z tym jakiś inny pomysł na zmianę globalną praw ?
 
Można użyć takiego skryptu, tylko ma on jeden problem, nie akceptuje zbiorów/katalogów ze spacjami:

Kod:
#!/bin/bash                                                                                                                  
for DIR_FROM_FIND in `find ./ -type d`                                                                                       
 do                                                                                                                       
    chmod 777 $DIR_FROM_FIND                                                                                       
 done

próba podpięcia do wyników find-a, awk:

Kod:
find ./ -type d | awk ' {gsub( / / , "\ "); print $0}'

nie poprawia na qnapie spacji na "\ ", wszystko wskazuje na to, że ten awk nie akceptuje gsub :(
 
Niestety ale to nie pomogło :(

ale obszedłem ten problem trochę na około:
  • udostępniłem zasób sieciowy po NFS-ie z pełnym dostępem.
  • na innym komputerze z linuxem podmontowałem ten zasób:
    Kod:
    mount -t nfs IP_QNAPA:/UDOSTEPNIONY_ZASOB /mnt/QNAP
  • a następnie:
    Kod:
    cd /mnt/QNAP; 
    find ./ -type d -exec chmod 777 {} \;
    find ./ -type f -exec chmod 666 {} \;

Zauważyłem dodatkowo, że jeżeli zbiór ma prawa 777 to użytkownicy nie widzą tego pliku, czyli gdy wszystkie pliki w kartotece mają ustawione 777 to dla użytkownika ta kartoteka jest pusta.

QNAP TS-509 Pro
2.0.0 Build 0725T
 
Nie wiem jak ma się to do modelu 509 ale u mnie na 209 rozwiązaniem była instalacja z ipkg nowszego busybox.
Po prostu nowszy busybox ma find z opcja --exec i po kłopocie.
Mam teraz 2 busy boxy. Jeden normalny, drugi w /opt/bin

odpalasz /opt/bin/busybox find składnia_find i po sprawie.