Dlaczego root na jednej maszynie nie może zmienić zawartości zamontowanej przez nfs z innej maszyny?

14

Na moim serwerze NFS mam zdefiniowany następujący eksport:

#NFS exports Database
/shared -alldirs -network=192.168.1 -mask=255.255.255.0

Na moim kliencie NFS:

192.168.1.7:/shared /shared nfs rw 0 0

Oczywiście jako root na serwerze mogę robić co tylko zechcę. Jednak na kliencie mój zwykły użytkownik „gabe” może dokonywać zmian w montażu nfs (zakładając, że mam uprawnienia), ale root nie może.

Jako mój zwykły użytkownik:

gabe@client$ cd /shared
gabe@client$ ls -l
total 8
drwxrwxrwx  4 gabe  wheel   512 Mar 20 19:20 tmp
gabe@client$ cd tmp
gabe@client$ touch test.txt
gabe@client$ rm test.txt

Jako root:

# cd /shared/tmp
# touch test.txt
touch: test.txt: Permission denied

Ponownie, wszystko to jest po stronie klienta NFS i podejrzewam, że może ma to coś wspólnego z opcją -maproot. Po raz pierwszy konfiguruję NFS i właśnie zauważyłem tę osobliwość. Zrobię teraz lekturę, aby sprawdzić, czy uda mi się to rozgryźć, ale jeśli ktokolwiek ma wgląd, doceniłbym to.

Gabe.
źródło

Odpowiedzi:

18

NFS został zaprojektowany z myślą, że identyfikatory użytkowników i grup będą takie same na wszystkich komputerach w sieci. Dla zwykłych użytkowników to działa dobrze. Ale identyfikator użytkownika root to zawsze 0, i tylko dlatego, że masz root na jednym urządzeniu, nie oznacza to, że powinieneś mieć dostęp roota do każdej maszyny w sieci.

Dlatego NFS traktuje root szczególnie. Domyślnie root jest mapowany na nobodyużytkownika, który zwykle nie ma dostępu do zapisu. Ta -maprootopcja pozwala zmienić sposób obsługi roota. BSD -maproot=rootodpowiada no_root_squashopcji Linuksa .

cjm
źródło
W rzeczy samej. To naprawiło mój problem. Strona podręcznika, którą czytałam, była nieco tajemnicza (lub moje zrozumienie było) w odniesieniu do tego, co dokładnie zrobił maproot. Dzięki!
Gabe.
Kolejny noob tutaj. Zastanawiałem się, czy moglibyście wiedzieć, jak sprawdzić, czy dysk NFS został skonfigurowany do korzystania z tej -maprootopcji bez dostępu do serwera NFS.
John
@John, to na tyle inne, że powinieneś zadać nowe pytanie zamiast dodawać komentarz.
cjm
5

To typowe zachowanie w przypadku tradycyjnych implementacji NFS. Odwzorowania użytkowników NFS są wykonywane niezależnie od kontekstu, więc wszystkie dostępy użytkownika root muszą być mapowane na konkretnego użytkownika (zazwyczaj nobodydomyślnie). Stąd to dziwne zachowanie, w którym klient root nie może uzyskać dostępu do twoich plików bezpośrednio, ale może su gabeuzyskać do nich dostęp.

(„Najnowsze” wersje NFS, tj. NFSv4 i być może NFSv3, pozwalają na bardziej rozsądne zachowanie, jeśli są obsługiwane po obu stronach, ale nie znam szczegółów.)

Gilles „SO- przestań być zły”
źródło