Czy serwer OpenSSH SFTP używa umask lub zachowuje uprawnienia po stronie klienta po komendzie put (środowisko chrootowane)?


13

Wiem, że to pytanie zostało już omówione, ale czytając posty, nie mogłem znaleźć odpowiedzi, ponieważ niektórzy powiedzieli „tak umask może działać”, a inni mówią „polecenie wstawienia OpenSSH zawsze zachowuje uprawnienia”

Przede wszystkim tylko precyzyjnie:

  • Używam OpenSSH 5.9 na RHEL 6.2
  • Skonfigurowałem chrootowany serwer SFTP, używając internal-sftppodsystemu, -u 0002dla dla umask
  • Dokładnie nie używam opcji -plub-P

Z tego, co przeczytałem z jednej strony: istnieje wiele sposobów definiowania umask dla przelewów SFTP:

  • Opcja -uz internal-sftp(lub sftp-server), ponieważ OpenSSH 5.4
  • utwórz opakowanie do sftp-server(w którym jawnie ustawiamy umask - to nie pasuje do chrootowanego środowiska btw)
  • dodaj określoną konfigurację do pam.d/sshdpliku

Z drugiej strony przeczytałem:

Klient i serwer OpenSSH SFTP przenoszą uprawnienia (jako rozszerzenie) i tworzą zdalny plik z uprawnieniami po stronie lokalnej. AFAICT, nie ma sposobu, aby wyłączyć to zachowanie.

Zrobiłem więc następujący test:

Na moim kliencie utworzyłem plik MYFILEi katalog MYDIRz uprawnieniami 600 i 700.

Następnie za pomocą sftppoleceń:

mkdir => the new directory has permissions following the umask (OK)
put MYFILE => MYFILE has same permissions as on client (KO)
put -r MYDIR => MYDIR has same permissions as on client (KO)

Jeśli zmienić uprawnienia MYFILEi MYDIRpo stronie klienta, a następnie przesłać ponownie uzyskać nowe uprawnienia po stronie serwera.

Próbowałem też pam.drozwiązania, ale nic to nie zmieniło.

Więc teraz jestem zdezorientowany:

Z tego, co przetestowałem i część tego, co przeczytałem, powiedziałbym, że OpenSSH zawsze zachowuje uprawnienia. Ale ponieważ jest wiele postów mówiących, że można zdefiniować umask, mogę sobie wyobrazić, że robię coś złego w moich konfiguracjach testowych.

Byłbym wdzięczny za niektóre doświadczone opinie.

Dziękuję Ci.

Odpowiedzi:


12

Po pierwsze, umask dotyczy serwera, a nie klienta. Pytanie więc, czy putpolecenie klienta OpenSSH korzysta z umask jest błędne. Powinieneś zapytać, czy serwer OpenSSH używa umask podczas tworzenia pliku w wyniku przesyłania SFTP.

W każdym razie, co robi klient OpenSSH SFTP:

  • putbez -Pflagi prosi serwer o utworzenie pliku z tymi samymi uprawnieniami, co plik lokalny. Serwer OpenSSH następnie (domyślnie według reguł * nix) stosuje umask.

  • putz -Pflagą zaczyna się tak samo, ale po zakończeniu przesyłania klient prosi serwer, aby jawnie (ponownie) ustawił uprawnienia na takie same, jakie ma plik lokalny (żądanie „chmod”). W przypadku „chmod” umask nie ma zastosowania.

  • mkdir, prosi serwer o utworzenie katalogu z uprawnieniami 0777. Umask domyślnie ma zastosowanie.

W każdym razie uważam, że umask 0002 nie ma wpływu na plik z uprawnieniami 0600, ponieważ wykluczają się one wzajemnie. Powinieneś wypróbować swój umask przeciwko plikowi z uprawnieniami takimi jak 0644.

Tak właściwie to powinno działać, jeśli masz skonfigurowany system zgodnie z opisem. Zobacz dowody z mojego urządzenia (Ubuntu z OpenSSH 6.2p2)

Match user user2
  ChrootDirectory /home/user2/chroot
  ForceCommand internal-sftp -u 0077
  AllowTcpForwarding no
  PermitTunnel no
  X11Forwarding no

Zobaczyć różnicę w uprawnieniach po putvs. put -P:

user1:~$ touch file.txt
user1:~$ ls -l
total 0
-rw-r--r-- 1 user1 ftpuser    0 Oct 23 15:34 file.txt
user1:~$ sftp user2@localhost
user2@localhost's password: 
Connected to localhost.
sftp> cd somefolder 
sftp> put file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-------    1 1003 1001    0 Oct 23 15:35 file.txt
sftp> put -P file.txt
Uploading file.txt to /somefolder/file.txt
file.txt                                         100%     0    0.0KB/s    0:00
sftp> ls -l
-rw-r--r--    1 1003 1001    0 Oct 23 15:34 file.txt

Btw, najnowsza specyfikacja SFTP określa zachowanie klienta i serwera w odniesieniu do umask. Jak widać, OpenSSH faktycznie to narusza, chociaż OpenSSH implementuje SFTP w wersji 3, w której jeszcze nie wspomniano o umask.

7.6 Uprawnienia

...

Serwer NIE POWINIEN stosować „umask” do bitów trybu; ale powinien ustawić bity trybu określone przez klienta. Klient MUSI zastosować odpowiedni „umask” do bitów trybu przed ich wysłaniem.


Próbowałem już z wieloma różnymi uprawnieniami, na samym początku miałem 755 dla mojego katalogu po stronie klienta i chciałem zamiast tego dostać 775. Ale to nie zadziałało. Zgadzam się z tobą w sprawie -P, czytając dokumentację, ale nawet bez tej flagi zawsze otrzymuję na serwerze te same uprawnienia niż klient (bez względu na uprawnienia)
drkzs

dzięki za uwagę, starałem się poprawić tytuł i poprawić termin
drkzs

Powinno działać, zobacz moją aktualizację.
Martin Prikryl

Tak, twój przykład działa ... ale jeśli zmienisz umask na 0002, to już nie będzie. Może ten post dotyczy tego samego problemu? poza tym, że jestem w openssh5.9 i ta opcja umask powinna działać. Różnica pomiędzy twoją konfiguracją SSHD a moją polega na tym, że nie używam ForceCommand, więc określam umask w linii podsystemu. (Spróbuję opublikować config i wynik, ale test sieci nie jest łatwo osiągalny)
drkzs

1
Żeby było jasne w tej kwestii: The server SHOULD NOT apply a 'umask' ma zastosowanie tylko wtedy, gdy klient wysyła informacje o zezwoleniu . Gdy klient nie wysyła informacji o zezwoleniu, zamierzeniem jest zastosowanie umask!
heiglandreas
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.