Comment mettre umask souhaité avec SFTP?

23

J'ai un serveur SFTP (openssh / sftp-server) et je voudrais paramétrer umask 002 pour les utilisateurs utilisant ce service. J'ai essayé de définir PAM (pam.d / common-session) et .profile pour chaque utilisateur, mais pas de chance.

Avec la connexion SSH, tout va bien, mais lorsque j'essaie avec SFTP (avec gFTP), j'ai le jeu umask 022.

J'ai déjà essayé d'utiliser un wrapper pour sftp-server qui change le umask avant d'appeler le sftp-server, pas de chance.

De l'aide? Merci beaucoup!

mat_jack1
la source

Réponses:

25

Depuis OpenSSH 5.4p1 je pense, vous pouvez utiliser l'option "-u", par exemple:

Subsystem sftp /usr/lib/openssh/sftp-server -u 022

Depuis la page de manuel:

 -u umask
         Sets an explicit umask(2) to be applied to newly-created files
         and directories, instead of the user's default mask.
Weboide
la source
c'est bien!! Je vais jeter un coup d'œil dès que possible et signaler mes conclusions :)
mat_jack1
5
Pour ceux sans l'option -u, cela fonctionne:Subsystem sftp /bin/sh -c 'umask 0002; /usr/lib/openssh/sftp-server'
Steve Clay
1
Bonne solution. Il résout le problème avec les shells et applications client, tels que CyberDuck, qui définissent leurs autorisations par défaut indépendamment du umask système. J'ai trouvé utile de m'assurer que chaque application cliente définira les bonnes autorisations pour permettre à mes utilisateurs de travailler ensemble sur les fichiers de groupe. Il peut être utile d'ajouter également que ce paramètre n'empêchera pas les utilisateurs de personnaliser les autorisations de fichiers s'ils le souhaitent.
gerlos
Une dernière chose à ajouter: si vous n'avez besoin que de la fonctionnalité sftp et n'avez pas besoin de donner à vos utilisateurs un accès shell, vous pouvez également envisager d'utiliser rssh au lieu de bash pour leurs shells, et de définir umask par défaut pour eux dans /etc/rssh.conf . Cela peut rendre votre serveur plus sécurisé
gerlos
7

J'espère que cela peut sauver des heures de frustration à quelqu'un d'autre ...

Si vous utilisez une application SFTP GUI, vérifiez ses préférences pour définir les autorisations lors du téléchargement.

J'avais essayé toutes les solutions ci-dessus, et il s'avère que l'application les remplaçait.

Malcolm
la source
^^ Oui, depuis longtemps j'ai mis le umask sur la connexion sftp en créant un script similaire à la solution de Weboide. Récemment, je me grattais la tête pour savoir pourquoi cela ne semblait pas fonctionner aussi bien que par le passé. Eh bien apparemment, à un moment donné, une mise à jour de mon client SFTP a explicitement défini le umask après la connexion avec ssh, alors allez comprendre.
Jared Kipe
Ce ne sont pas seulement des interfaces graphiques. Pas même des clients. Il m'a fallu beaucoup trop de temps pour constater que le fichier de test que j'ai téléchargé avait 0600 que le client (OpenSSH sftp) a copié du côté distant.
xebeche
Merci! J'ai passé tellement de temps à jouer avec des autorisations pour rien.
Tania Rascia
2

Après plusieurs heures à essayer d'appliquer divers hacks et correctifs, j'ai trouvé une bonne solution!

Il y a un patch pour SSH qui vous permet de choisir le umask que vous voulez pour SFTP. Vous pouvez le télécharger ici: http://sftpfilecontrol.sourceforge.net/

Pour moi (OpenSSH_5.2p1 + sftpfilecontrol-v1.3, OpenSSL 0.9.8g 19 oct 2007) ça marche parfaitement!

mat_jack1
la source
2
Juste pour noter que l'option '-u' pour définir le umask est disponible dans OpenSSH depuis 5.4p1, voir ma réponse plus bas.
Weboide
2

Dans le fichier de configuration ssh, vous pouvez également l'utiliser pour définir le mode du fichier spécifiquement (en remplaçant tout chmod que le client peut essayer de définir). Ici, j'utilise internal-sftp mais je suppose que ce serait la même chose pour sftp-server:

ForceCommand internal-sftp -u 0022   
cloudranger
la source
0

Pour citer ce message :

J'ai obtenu que cela fonctionne bien en ajoutant une ligne "umask 007" dans /etc/init.d/ssh.

Bash utilise les .profileshells de connexion interactifs. Je ne pense pas que ça sftpcompte comme un. Vous pourriez être en mesure de définir le umask /etc/bash.bashrcou ~/.bashrcsi la pointe ci-dessus ne fonctionne pas ou si vous souhaitez un contrôle plus fin.

En pause jusqu'à nouvel ordre.
la source
2
merci pour la réponse, mais j'avais déjà dans ssh umask 002 (j'ai aussi essayé 0002) et ça ne marche pas :( aussi le bashrc n'est pas pris en considération, comme avec un client SFTP externe je ne pense pas que bash soit utilisé. Si je me connecte directement avec ssh, tout va bien. Mon problème ne concerne que les clients SFTP. Merci!
mat_jack1
Oups, tu as raison. Je ne sais pas pourquoi je pensais à l'implication de Bash.
pause jusqu'à nouvel ordre.
0

Référez-vous à cette question pour trouver une solution simple qui ne nécessite pas de versions OpenShsh spécifiques ni de correctifs personnalisés.

Unode
la source