Je cherchais un moyen de configurer umask d' OpenSSH de 0027manière cohérente pour tous les types de connexion.
Par types de connexion, je fais référence à:
- sftp
- scp
- ssh nom d'hôte
- programme ssh hostname
La différence entre 3. et 4. est que le premier démarre un shell qui lit généralement les /etc/profileinformations alors que le second ne le fait pas.
De plus, en lisant cet article, j'ai pris connaissance de l'option -u présente dans les nouvelles versions d'OpenSSH. Cependant cela ne fonctionne pas.
Je dois aussi ajouter que /etc/profilecomprend maintenant umask 0027.
Aller point par point:
- sftp - Mettre
-u 0027en placesshd_configcomme mentionné ici , ne suffit pas.
Si je ne définit pas ce paramètre, sftp utilise par défaut umask 0022. Cela signifie que si j'ai les deux fichiers:
-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
Lorsque j'utilise sftp pour les mettre dans la machine de destination, je reçois réellement:
-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
Cependant, lorsque je définis -u 0027sur sshd_configla machine de destination, je reçois réellement:
-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
ce qui n'est pas prévu, puisqu'il devrait en réalité être:
-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
Quelqu'un comprend pourquoi cela se produit?
scp - Indépendamment de ce qui est configuré pour sftp , les autorisations sont toujours
umask 0022. Je n'ai actuellement aucune idée de comment modifier cela.ssh hostname - pas de problème ici car le shell lit
/etc/profilepar défaut ce qui signifieumask 0027dans la configuration actuelle.programme ssh hostname - même situation que scp .
En résumé, activer umask sftpmodifie le résultat, mais pas comme il se doit, ssh hostnamefonctionne comme prévu /etc/profileet les deux scpet ssh hostname programsemble avoir umask 0022codé en dur quelque part.
Toute idée sur l'un des points ci-dessus est la bienvenue.
EDIT: je voudrais éviter les correctifs nécessitant une compilation manuelle de openssh. Le système exécute Ubuntu Server 10.04.01 (lucid) LTS avec les opensshpackages de maverick.
Réponse: Comme indiqué par poige, l'utilisation de pam_umask a été efficace.
Les changements exacts étaient:
Lignes ajoutées à /etc/pam.d/sshd:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
De même, afin d’affecter tous les shells de connexion, qu’ils soient source /etc/profileou non, les mêmes lignes ont également été ajoutées /etc/pam.d/login.
EDIT : Après certains des commentaires, j'ai retesté ce problème.
Au moins dans Ubuntu (où j’ai testé), il semble que si l’utilisateur a un autre umask défini dans les fichiers init de son shell (.bashrc, .zshrc, ...), le umask PAM est ignoré et l’utilisateur umask utilisé est utilisé à la place. Les modifications apportées /etc/profilen'affectent pas le résultat, à moins que l'utilisateur ne les identifie explicitement dans les fichiers init.
À ce stade, il n’est pas clair si ce comportement se produit dans toutes les distributions.
UsePAM yesdans votre sshd_config?
/etc/profile. Quelque chose commealias umask=/bin/true