Szukałem sposobu na instalacyjnego OpenSSH umask aby 0027
w sposób spójny we wszystkich typów połączeń.
Przez typy połączeń mam na myśli:
- sftp
- scp
- nazwa hosta ssh
- program nazwa hosta ssh
Różnica między 3. a 4. polega na tym, że pierwszy uruchamia powłokę, która zwykle odczytuje /etc/profile
informacje, a druga nie.
Ponadto, czytając ten post , dowiedziałem się o opcji -u, która jest obecna w nowszych wersjach OpenSSH. Jednak to nie działa.
Muszę również dodać, że /etc/profile
teraz obejmuje umask 0027
.
Przechodzenie punkt po punkcie:
- sftp - Ustawienie
-u 0027
wsshd_config
jak wspomniano tutaj , nie jest wystarczające.
Jeśli nie ustawię tego parametru, sftp używa domyślnie umask 0022
. Oznacza to, że jeśli mam dwa pliki:
-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write
Kiedy używam sftp do umieszczenia ich na maszynie docelowej, faktycznie otrzymuję:
-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
Jednakże kiedy ustawić -u 0027
na sshd_config
urządzenia docelowego I rzeczywiście otrzymujemy:
-rwxr--r-- 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
co nie jest spodziewane, ponieważ tak naprawdę powinno być:
-rwxr-x--- 1 user user 0 2011-01-29 02:04 execute
-rw-r----- 1 user user 0 2011-01-29 02:04 read-write
Czy ktoś rozumie, dlaczego tak się dzieje?
scp - Niezależnie od ustawień sftp , uprawnienia są zawsze
umask 0022
. Obecnie nie mam pojęcia, jak to zmienić.nazwa hosta ssh - nie ma tutaj problemu, ponieważ powłoka
/etc/profile
domyślnie czyta , co oznaczaumask 0027
w bieżącej instalacji.program nazwa hosta ssh - taka sama sytuacja jak scp .
W sumie, na ustawienie umask sftp
zmienia wynik, ale nie tak jak powinno, ssh hostname
działa zgodnie z oczekiwaniami czytania /etc/profile
i oba scp
i ssh hostname program
wydaje się, że umask 0022
ustalony gdzieś.
Wszelkie informacje na temat powyższych punktów są mile widziane.
EDYCJA: Chciałbym uniknąć poprawek wymagających ręcznej kompilacji openssh. W systemie działa Ubuntu Server 10.04.01 (lucid) LTS z openssh
pakietami indywidualnymi.
Odpowiedź: Jak wskazał poige, użycie pam_umask załatwiło sprawę.
Dokładne zmiany to:
Linie dodane do /etc/pam.d/sshd
:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
Ponadto, aby wpłynąć na wszystkie powłoki logowania, niezależnie od tego, czy pochodzą, /etc/profile
czy też nie, dodano te same linie /etc/pam.d/login
.
EDYCJA : Po niektórych komentarzach ponownie przetestowałem ten problem.
Przynajmniej w Ubuntu (gdzie testowałem) wydaje się, że jeśli użytkownik ma inny zestaw umask w plikach inicjujących powłoki (.bashrc, .zshrc, ...), umask PAM jest ignorowany, a zamiast niego używany jest umask zdefiniowany przez użytkownika. Zmiany w nie /etc/profile
wpłynęły na wynik, chyba że użytkownik jawnie pozyska te zmiany w plikach init.
W tym momencie nie jest jasne, czy takie zachowanie występuje we wszystkich dystrybucjach.
UsePAM yes
w swoim sshd_config?/etc/profile
. Coś w stylualias umask=/bin/true
Odpowiedzi:
Mogę zasugerować wypróbowanie 2 rzeczy:
źródło
sudo
lubsudo su
tym podobne.Oto rozwiązanie, które pozwoli Ci robić to, co chcesz dla poszczególnych użytkowników. Używa tylko natywnych
sshd
funkcji i nie wymaga chowania z lokalnie obsługiwanymi łatami. To rozwiązanie wykorzystujeForceCommand
zachowanie sshd do wstawienia skryptu konfiguracji środowiska do każdego połączenia ssh, a następnie uruchomienia oryginalnej komendy.Najpierw utwórz skrypt w systemie z następującą zawartością:
Na potrzeby tego przykładu założę, że to nazwałeś
/usr/bin/umask-wrapper
.Teraz masz kilka opcji konfiguracji. Jeśli chcesz, aby była to obowiązkowa konfiguracja dla wszystkich użytkowników (co wydaje się mało prawdopodobne), możesz zmodyfikować konfigurację sshd, aby uwzględnić:
Jeśli chcesz, aby dotyczyło to tylko niektórych użytkowników, możesz użyć
Match
bloku (na końcu Twojegosshd_config
):Jeśli chcesz, aby było to zachowanie kontrolowane przez użytkownika, możesz użyć
command=
opcji wauthorized_key
pliku, aby wybrać to zachowanie dla określonych kluczy. Na przykład podczas testowania tego dodałem wpis do mojegoauthorized_keys
pliku, który wygląda mniej więcej tak:A oto niektóre wyniki mojego testu:
Używanie
ssh
bez polecenia:Używanie
ssh
z poleceniem:Używanie
scp
:Używanie
sftp
:I masz to. Wierzę, że takiego zachowania się szukałeś. Jeśli masz pytania dotyczące tego rozwiązania, chętnie udzielę dodatkowych informacji.
źródło
command=
jest rzeczywiście fajną cechą ssh.Przyjęłam nieco inne podejście do scentralizowania tego ustawienia.
Zostało to dodane do
/etc/pam.d/common-session
:Zostało to zmodyfikowane w
/etc/login.defs
:źródło
Mam pam_umask do pracy z ssh, ale nie z scp lub sftp.
Metoda otoki również nie robi nic dla sftp ani scp. Nie jestem pewien, czy 027 jest dobrym przykładem, ponieważ większość dystrybucji ma już ustawione na to umask. Spróbuj z 002 i sprawdź, czy to działa.
źródło
Programy, które nie ustawiają własnego umask, dziedziczą umask aplikacji, która go uruchomiła. Zatrzymaj sshd całkowicie, ustaw swój umask na 0027, a następnie uruchom go ponownie. (Możesz dodać komendę umask w skrypcie init do przyszłych restartów.)
Testowany do pracy z scp.
źródło
umask 0027
(jeśli czytają/etc/profile
), ale ponowne uruchomienie ssh nie wpływa na scp ani ssh.Jeśli
pam_umask
wydaje się, że nie wpływa to na sesje SFTP, sprawdź, czy w plikuUsePam
jest ustawiona opcjaYes
na/etc/ssh/sshd_config
.Jeśli wyłączyłeś uwierzytelnianie hasłem i
UsePam
zostało ustawione lub ustawione domyślnie naNo
. Możesz ustawićChallengeResponseAuthentication No
wsshd_config
pliku, ponieważ w przeciwnym razie może przypadkowo włączyć uwierzytelnianie haseł za pomocą tego systemu.źródło
Dodano uwagę do powyższej odpowiedzi user188737:
To może być oczywiste, ale jeśli nie używasz pakietu openssh-server i ręcznie skompilowałeś OpenSSH, upewnij się, że „Włącz obsługę PAM”, przekazując
--with-pam
flagę konfiguracji.W przeciwnym razie
UsePAM=yes
w sshd_config plus wszelkie zmiany/etc/pam.d/*
zostaną skutecznie zignorowane przezsshd
.W końcu dotarło do mnie, dlaczego żadne z zalecanych rozwiązań PAM nie miało żadnego wpływu na testowanie za pośrednictwem nieinteraktywnych połączeń SFTP ...
źródło
Ponieważ umask jest dziedziczony z procesu nadrzędnego, w systemie Slackware, który używa
/etc/rc.d/rc.sshd
do uruchamiania / zatrzymywania / restartowania sshd, możesz po prostu umieścićumask 0027
sam wiersz bezpośrednio nad „sshd_start” lub „sshd_restart” lub alternatywnie w dowolnym momencie przed rozpoczyna się główna sekcja wykonawcza w/etc/rc.d/rc.sshd
:Lub alternatywnie na górze pliku:
źródło
Właśnie przetestowałem możliwe ulepszenie opcji sshd_config larsks na solaris 11
Skonfiguruj grupę z użytkownikami do zarządzania i przenieś skrypt do samego pliku konfiguracyjnego, w moim przypadku chciałem ustawić umask na 0002.
wynikowa konfiguracja staje się ....
źródło
Walczyłem z tym problemem, w szczególności z uprawnieniami do pliku po skopiowaniu pliku za pomocą scp , i w końcu przyszło mi do głowy, aby po prostu użyć ssh do zmiany uprawnień po skopiowaniu.
Oto rozwiązanie:
localhost$ scp filename remotehost:umask-test/filename
localhost$ ssh remotehost "chmod go+r umask-test/filename"
Najlepsze jest to, że nie jest wymagany dostęp do konta root, aby zastosować to rozwiązanie.
źródło