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