Sono stato alla ricerca di un modo per impostare di OpenSSH umask a 0027in 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/profileinformazioni 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/profileora include umask 0027.
Andando punto per punto:
- sftp - Impostazione
-u 0027insshd_configcome 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 0027il sshd_configcomputer 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/profileper impostazione predefinita, il che significa cheumask 0027nella configurazione corrente.programma hostname ssh - stessa situazione di scp .
In breve, l'impostazione di umask su sftpaltera il risultato ma non come dovrebbe, ssh hostnamefunziona come la lettura prevista /etc/profileed entrambi scpe ssh hostname programsembra aver umask 0022codificato 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 opensshpacchetti 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/profileo 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/profilenon 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 yesnel tuo sshd_config?
/etc/profile. Qualcosa del generealias umask=/bin/true