Sono stato alla ricerca di un modo per impostare di OpenSSH umask a 0027
in modo coerente in tutti i tipi di connessione.
Per tipi di connessione mi riferisco a:
- sftp
- SCP
- nome host ssh
- programma hostname ssh
La differenza tra 3. e 4. è che il primo avvia una shell che di solito legge le /etc/profile
informazioni mentre il secondo no.
Inoltre leggendo questo post mi sono reso conto dell'opzione -u presente nelle versioni più recenti di OpenSSH. Tuttavia questo non funziona.
Devo anche aggiungere che /etc/profile
ora include umask 0027
.
Andando punto per punto:
- sftp - Impostazione
-u 0027
insshd_config
come detto qui , non è sufficiente.
Se non imposto questo parametro, sftp usa di default umask 0022
. Ciò significa che se ho i due file:
-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
Quando uso sftp per inserirli nella macchina di destinazione ottengo effettivamente:
-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
Tuttavia quando accendo -u 0027
il sshd_config
computer di destinazione ottengo effettivamente:
-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
che non è previsto, dal momento che dovrebbe essere effettivamente:
-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
Qualcuno capisce perché questo accade?
scp : indipendentemente dalle impostazioni di sftp , le autorizzazioni sono sempre
umask 0022
. Al momento non ho idea di come modificare questo.nome host ssh - nessun problema qui poiché la shell legge
/etc/profile
per impostazione predefinita, il che significa cheumask 0027
nella configurazione corrente.programma hostname ssh - stessa situazione di scp .
In breve, l'impostazione di umask su sftp
altera il risultato ma non come dovrebbe, ssh hostname
funziona come la lettura prevista /etc/profile
ed entrambi scp
e ssh hostname program
sembra aver umask 0022
codificato da qualche parte.
Qualsiasi approfondimento su uno dei punti di cui sopra è il benvenuto.
EDIT: Vorrei evitare le patch che richiedono la compilazione manuale di openssh. Il sistema esegue Ubuntu Server 10.04.01 (lucido) LTS con openssh
pacchetti di Maverick.
Risposta: Come indicato da Poige, usare pam_umask ha fatto il trucco.
Le modifiche esatte sono state:
Linee aggiunte a /etc/pam.d/sshd
:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
Inoltre, al fine di influire su tutte le shell di login indipendentemente dal fatto che siano di origine /etc/profile
o meno, sono state aggiunte anche le stesse linee /etc/pam.d/login
.
EDIT : dopo alcuni dei commenti ho riprovato questo problema.
Almeno in Ubuntu (dove ho testato) sembra che se l'utente ha un set di umask diverso nei file init della sua shell (.bashrc, .zshrc, ...), l'umask PAM viene ignorato e viene usato l'utente definito dall'utente. Le modifiche apportate /etc/profile
non hanno influito sul risultato a meno che l'utente non abbia esplicitamente fornito tali modifiche nei file init.
Non è chiaro a questo punto se questo comportamento si verifica in tutte le distro.
UsePAM yes
nel tuo sshd_config?
/etc/profile
. Qualcosa del generealias umask=/bin/true