2010-10-08 48 views
7

Quelqu'un peut-il me dire comment définir le umask pour un seul utilisateur sftp? Est particulièrement intéressante: un IBM AIX ...Définir umask pour un compte sftp?

Ajout umask 002 que l'utilisateur .profile ne fonctionne pas ... (le but est que ces fichiers utilisateur sont accesible aux personnes du même groupe).

J'ai vu quelque part comment modifier les config sftpd, bien que je veuille le définir pour un seul utilisateur, donc je m'attendais à trouver quelque chose qui n'avait pas besoin d'un accès root.

merci!

f.

Répondre

3

L'utilisateur peut régler cela eux-mêmes sans l'implication de la racine, au niveau du client (par connexion) ou sur le serveur (par clé publique).

À partir du client, nous pouvons passer outre la commande à distance utilisée pour gérer l'interaction sftp avec l'option -s:

sftp -s 'umask 0777; env PATH=${PATH}:/usr/libexec/openssh:/usr/lib/ssh:/usr/sbin sftp-server' [email protected] 

(Si votre sftp-server n'est pas installé dans l'un des endroits mentionnés ci-dessus, ajouter que le chemin aussi). A partir du serveur, nous pouvons forcer l'exécution d'une commande particulière chaque fois qu'une connexion est établie à l'aide d'une clé publique particulière. Cela sera exécuté pour toutes les connexions, pas seulement celles pour SFTP, mais nous pouvons inspecter la variable d'environnement $SSH_ORIGINAL_COMMAND pour décider de la ligne de conduite à suivre. Ajouter quelque chose comme ce qui suit à authorized_keys est probablement suffisant pour vos besoins:

command="umask 0777; if [[ -n $SSH_ORIGINAL_COMMAND ]]; then eval $SSH_ORIGINAL_COMMAND; else exec bash --login; fi" ssh-rsa AAAAB3NzaC1yc2EA... 

(selon le remplacement de votre shell favori pour gérer toutes les connexions interactives, et en notant que si vous utilisez tcsh vous devrez modifier ce en fonction la syntaxe de ce shell).

3

Je ne connais pas AIX, mais vous devriez être capable de le faire avec OpenSSH, mais cela nécessitera des permissions root. Vous devrez écrire un script wrapper pour le composant serveur de sftp. Le wrapper devra modifier de manière sélective le umask pour l'utilisateur, puis exec le serveur sftp. Pour sélectionner un utilisateur, je suis partie à:

id --user 

Si vous deviez créer un tel script /usr/local/sbin/sftp-wrapper, alors vous changez la configuration du sous-système sftp en /etc/ssh/sshd_config de:

Subsystem sftp /usr/libexec/openssh/sftp-server 

à:

Subsystem sftp /usr/local/sbin/sftp-wrapper 

Au-delà de l'écriture du script wrapper, chaque étape nécessite des autorisations root. Commentaire: Je crois que le serveur sftp est démarré par root lorsque vous vous connectez via sftp. Ainsi, l'umask par défaut dérive de l'umask de la racine. Je ne crois pas qu'il existe un moyen de modifier cela pour un utilisateur particulier à partir de la configuration de cet utilisateur. Si vous voulez changer le umask sftp pour tous les utilisateurs, vous pouvez faire une modification plus simple à la configuration du sous-système sftp:

Subsystem sftp /bin/bash -c ‘umask 002; /usr/libexec/openssh/sftp-server’ 
1

Un umask de 111 en octal va céder 73 en décimal, que nous utiliserons dans ce Exemple.

#vi /etc/ssh/sshd_config 

Ajoutez les deux lignes à la fin du fichier pour configurer le sftp umask pour un groupe d'utilisateurs suivants. Ou, ajoutez les deux lignes suivantes à la fin du fichier pour configurer le umask sftp pour un seul utilisateur.

Match User <user name> 
ForceCommand internal-sftp -u 73 

Redémarrez le démon sshd.

#stopsrc -s sshd 

#startsrc -s sshd 

cela contribuera à: Aamod chandra

22

J'ai bien travaillé pour moi. Cependant, besoin d'un peu de recherche parce que ce que vous avez fourni est un extrait de docs. Un exemple précis dans mon cas serait de mettre deux lignes consécutives à la fin de/etc/ssh/sshd_config

Match Group www-data 
ForceCommand internal-sftp -u 2 

Dans mon cas, ce que je voulais faire est de définir umask à « 002 » (2 en décimal) si quelqu'un dans le groupe 'www-data' se connecte.

Il existe également une option pour utiliser env. variable SSH_ORIGINAL_COMMAND au lieu de 'internal-sftp', mais je n'ai pas eu le temps de poursuivre.

+2

Attention lorsque vous faites cela. Dans l'exemple ci-dessus, l'ensemble du groupe 'www-data' ne pourra pas faire de SSH via la console. Je reçois l'erreur 'Ce service permet seulement les connexions sftp.Connexion pour prospérer fermé. '. – dominikz

+0

Cela a fonctionné pour moi aussi (sur Amazon Linux). J'avais précédemment utilisé la méthode SSH_ORIGINAL_COMMAND décrite ci-dessus. Pour une raison quelconque, lorsque je suis passé à sftp-internal et que j'ai créé le répertoire Chroot, l'umask de authorized_keys a cessé d'avoir un effet. Merci! – mikeabout

+0

Pour la plupart d'entre nous concernés par la sécurité des utilisateurs sftp, chroot est la solution. Et cette réponse m'a aidé à résoudre les problèmes de umask pour ces utilisateurs sans accès shell ou répertoire personnel. +1 Cependant, cela ne s'est pas révélé rapidement dans la recherche. – nightgaunt

0

Je ne sais pas pourquoi les lignes ci-dessous ne fonctionnent pas pour moi:

* Groupe match

ForceCommand internal-sftp -u 73 

Enfin ajouter '-u 0002' du sous-système fonctionne très bien sur SUSE 11.3:

*Subsystem sftp /usr/lib64/ssh/sftp-server **-u 0002*** 

et maintenant utilisateur specifiled ne peut se connecter avec la clé publique:

Match User nappcpr, Group iwcopy 

    PasswordAuthentication no 

    PubkeyAuthentication yes 

    **KbdInteractiveAuthentication no**