Comment obtenir le contrôle total des autorisations umask / PAM /?

11

// Mise à jour le 8 février - Questions en suspens en bref:

  • Comment masquer les répertoires différemment des fichiers?
  • Comment umask sur Nautilus copier / coller?
  • Comment configurer umask pour SSHFS?

NOTRE SITUATION

Plusieurs personnes de notre entreprise se connectent à un serveur et téléchargent des fichiers. Ils doivent tous pouvoir télécharger et écraser les mêmes fichiers. Ils ont des noms d'utilisateur différents, mais font tous partie du même groupe. Cependant, il s'agit d'un serveur Internet, donc les "autres" utilisateurs devraient avoir (en général) un accès en lecture seule. Donc, ce que je veux, c'est ces autorisations standard:

fichiers: 664
répertoires: 771

Mon objectif est que tous les utilisateurs n'aient pas à se soucier des autorisations. Le serveur doit être configuré de telle manière que ces autorisations s'appliquent à tous les fichiers et répertoires, nouvellement créés, copiés ou écrasés. Ce n'est que lorsque nous avons besoin de certaines autorisations spéciales que nous le modifierons manuellement.

Nous téléchargeons des fichiers sur le serveur par SFTP-ing dans Nautilus, en montant le serveur à l'aide de sshfs et en y accédant comme s'il s'agissait d'un dossier local, et par SCP-ing dans la ligne de commande. Cela couvre essentiellement notre situation et ce que nous voulons faire.

Maintenant, j'ai lu beaucoup de choses sur la belle fonctionnalité umask. D'après ce que je comprends, umask (avec PAM) devrait me permettre de faire exactement ce que je veux: définir des autorisations standard pour les nouveaux fichiers et répertoires. Cependant, après de nombreuses heures de lecture et d'essais et d'erreurs, je n'arrive toujours pas à faire fonctionner cela. J'obtiens de nombreux résultats inattendus. J'aime vraiment bien saisir umask et avoir de nombreuses questions sans réponse. Je posterai ces questions ci-dessous, avec mes résultats et une explication de mes essais qui ont conduit à ces questions. Étant donné que beaucoup de choses semblent mal tourner, je pense que je fais mal plusieurs choses. Donc, il y a donc beaucoup de questions.

REMARQUE: j'utilise Ubuntu 9.10 et je ne peux donc pas modifier sshd_config pour définir le umask du serveur SFTP. Installé SSH OpenSSH_5.1p1 Debian-6ubuntu2 <requis OpenSSH 5.4p1. Voici donc les questions.

1. AI-JE BESOIN DE REDÉMARRER POUR LES CHANGEMENTS PAM POUR PRENDRE EFFET?

Commençons par ça. Il y avait tellement de fichiers impliqués et je ne pouvais pas comprendre ce qui affectait et ce qui n'affectait pas les choses, également parce que je ne savais pas si je devais redémarrer tout le système pour que les modifications PAM prennent effet. Je l'ai fait après ne pas avoir vu les résultats attendus, mais est-ce vraiment nécessaire? Ou puis-je simplement me déconnecter du serveur et me reconnecter, et les nouvelles stratégies PAM devraient-elles être efficaces? Ou existe-t-il un programme 'PAM' à recharger?

2. Y A-T-IL UN SEUL FICHIER À MODIFIER QUI AFFECTE TOUS LES UTILISATEURS POUR TOUTES LES SESSIONS?

J'ai donc fini par changer BEAUCOUP de fichiers, en lisant BEAUCOUP de choses différentes. J'ai fini par définir l'umask dans les fichiers suivants:

~/.profile -> umask=0002
~/.bashrc -> umask=0002
/etc/profile -> umask=0002
/etc/pam.d/common-session -> umask=0002
/etc/pam.d/sshd -> umask=0002
/etc/pam.d/login -> umask=0002

Je veux que ce changement s'applique à tous les utilisateurs, donc une sorte de changement à l'échelle du système serait préférable. Peut-il être réalisé?

3. APRÈS TOUT, CETTE CHOSE D'UMASK, ÇA MARCHE?

Donc, après avoir changé umask en 0002 à chaque endroit possible, je lance des tests.

------------ SCP -----------

TEST 1:

scp testfile (which has 777 permissions for testing purposes) server:/home/
testfile                                      100%    4     0.0KB/s   00:00   

Vérifions les autorisations:

user@server:/home$ ls -l
total 4
-rwx--x--x 1 user uploaders 4 2011-02-05 17:59 testfile (711)

MISE À JOUR: corrigé en définissant UNIQUEMENT umask dans pam.d / common-sessions (voir les commentaires)

--------- SSH ------------

TEST 2:

ssh server
user@server:/home$ touch anotherfile
user@server:/home$ ls -l
total 4
-rw-rw-r-- 1 user uploaders 0 2011-02-05 18:03 anotherfile (664)

-------- SFTP -----------

Nautilus: sftp: // serveur / home /

Copiez et collez le nouveau fichier du client vers le serveur (777 sur le client)

TEST 3:

user@server:/home$ ls -l
total 4
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 newfile (777)

Créez un nouveau fichier via Nautilus. Vérifiez les autorisations de fichier dans le terminal:

TEST 4:

user@server:/home$ ls -l
total 4
-rw------- 1 user uploaders    0 2011-02-05 18:06 newfile (600)

Je veux dire ... QUE s'est-il passé ici?! Nous devrions obtenir 644 à chaque fois. Au lieu de cela, j'obtiens 711, 777, 600, puis une fois 644. Et le 644 n'est atteint que lors de la création d'un nouveau fichier vierge via SSH, ce qui est le scénario le moins probable.

Je demande donc, umask / pam fonctionne-t-il après tout?

MISE À JOUR: correction du test 4 en définissant UNIQUEMENT umask dans pam.d / common-sessions (voir les commentaires)

4. QUE SIGNIFIE UMASK SSHFS?

Parfois, nous montons un serveur localement, en utilisant sshfs. Très utile. Mais encore une fois, nous avons des problèmes d'autorisations.

Voici comment nous montons:

sshfs -o idmap=user -o umask=0113 user@server:/home/ /mnt

REMARQUE: nous utilisons umask = 113 car apparemment, sshfs commence à partir de 777 au lieu de 666, donc avec 113 nous obtenons 664 qui est l'autorisation de fichier souhaitée.

Mais ce qui se passe maintenant, c'est que nous voyons tous les fichiers et répertoires comme s'ils étaient 664. Nous naviguons dans Nautilus vers / mnt et:

  • Clic droit -> Nouveau fichier (nouveau fichier) --- TEST 5
  • Clic droit -> Nouveau dossier (nouveau dossier) --- TEST 6
  • Copiez et collez un fichier 777 de notre client local --- TEST 7

Vérifions donc sur la ligne de commande:

user@client:/mnt$ ls -l
total 8
-rw-rw-r-- 1 user 1007    3 Feb  5 18:05 copyfile (664)
-rw-rw-r-- 1 user 1007    0 Feb  5 18:15 newfile (664)
drw-rw-r-- 1 user 1007 4096 Feb  5 18:15 newfolder (664)

Mais bon, vérifions ce même dossier côté serveur:

user@server:/home$ ls -l
total 8
-rwxrwxrwx 1 user uploaders    3 2011-02-05 18:05 copyfile (777)
-rw------- 1 user uploaders    0 2011-02-05 18:15 newfile (600)
drwx--x--x 2 user uploaders 4096 2011-02-05 18:15 newfolder (711)

Quoi?! Les autorisations de fichier REAL sont très différentes de celles que nous voyons dans Nautilus. Donc, ce umask sur sshfs crée-t-il simplement un «filtre» qui montre les autorisations de fichiers irréelles? Et j'ai essayé d'ouvrir un fichier d'un autre utilisateur mais du même groupe qui avait de vraies 600 autorisations mais 644 «fausses» autorisations, et je ne pouvais toujours pas lire ceci, alors à quoi bon ce filtre ??

5. UMASK EST TOUT SUR LES FICHIERS. MAIS QU'EN EST-IL DES RÉPERTOIRES?

D'après mes tests, je peux voir que le umask qui est appliqué influence également en quelque sorte les autorisations du répertoire. Cependant, je veux que mes fichiers soient 664 (002) et mes répertoires 771 (006). Est-il donc possible d'avoir un umask différent pour les répertoires?

6. PEUT-ÊTRE UMASK / PAM EST VRAIMENT FRAIS, MAIS UBUNTU EST JUSTE BUGGY?

D'une part, j'ai lu des sujets de personnes qui ont eu du succès avec PAM / UMASK et Ubuntu. D'un autre côté, j'ai trouvé de nombreux bugs plus anciens et plus récents concernant umask / PAM / fuse sur Ubuntu:

Donc je ne sais plus quoi croire. Dois-je abandonner? Would ACL résoudre tous mes problèmes? Ou ai-je encore des problèmes avec Ubuntu?

Un mot de prudence avec les sauvegardes utilisant tar. Les distributions Red Hat / Centos prennent en charge acls dans le programme tar mais Ubuntu ne prend pas en charge acls lors de la sauvegarde. Cela signifie que tous les acls seront perdus lorsque vous créez une sauvegarde.

Je suis très disposé à passer à Ubuntu 10.04 si cela résout également mes problèmes, mais je veux d'abord comprendre ce qui se passe.

Communauté
la source

Réponses:

3

Beaucoup de choses pourraient se passer ici.

Premières réflexions:

  • oui, les modifications pam.d prennent effet immédiatement
  • /etc/pam.d/common-session est le meilleur endroit pour définir une valeur par défaut umask
  • n'importe quel pam.d umask serait écrasé par n'importe quelle entrée dans .bashrc,
    mais .bashrcn'est lu que dans certaines circonstances (shell interactif sans connexion)
  • testfile (711) est très étrange
    • comment est /homemonté, et utilisez-vous des ACL?
      (par exemple, que faire ls -ld /homeet getfacl /homeimprimer?)
    • fait testfiledéjà exister avant que vous avez fait la copie, car scpne changera pas les permissions sur un fichier qui existait déjà (sauf si vous utilisez le -pdrapeau)
  • Nautilus est connu pour créer des fichiers d'une manière différente, je ne sais pas pourquoi ni quelles sont les règles
  • umask=0113 causera probablement des problèmes
  • le serveur et le client exécutent-ils le même système d'exploitation?
    par exemple, si le client a activé les ACL ou est Cygwin, le comportement peut être différent
  • la meilleure façon de forcer des autorisations saines est d'utiliser des listes de contrôle d'accès par défaut, exactement parce que, comme vous l'avez découvert, l'utilisateur umaskpeut les remplacer dans .bashrcet .bash_profile.

Mise à jour:

  • umask=0113 pour sshfs est faux.
    1. Essayez de monter sans spécifier de umask
    2. Créez un nouveau fichier à l'intérieur du point de montage à l'aide de touch.
    3. Vous devriez le voir obtient seulement par exemple -rw-r--r--, sans les xbits
    4. En masquant les xbits, vous risquez de casser des répertoires
      et les compilateurs peuvent être incapables de créer correctement des fichiers exécutables

Solution de contournement:

Si nous ne pouvons pas penser à quelque chose de mieux, vous pouvez utiliser famou gaminsurveiller les nouveaux fichiers en cours de création et corriger les autorisations sur eux, ou même simplement un script qui s'exécute périodiquement et définit les autorisations sur tous les fichiers.

Mikel
la source
Merci! OK, j'ai donc supprimé TOUS les paramètres umask à l'exception de pam.d / common-sessions. Cela a résolu plusieurs problèmes! Les tests 1 (SCP) et 4 (nouveau fichier dans Nautilus) fonctionnent désormais correctement. Les obstacles copient maintenant un fichier avec toutes les autorisations dans Nautilus sur le serveur (Test 3 - toujours 777 au lieu de 664). Et les problèmes de répertoire. Le serveur et le client sont Ubuntu (9.10 vs 10.10 cependant), et aucune liste de contrôle d'accès supplémentaire n'est activée.
On dirait que la copie avec Nautilus préserve les autorisations comme cp -pou le scp -pferait.
Mikel
Une idée comment changer cela ??
Quel comportement voulez-vous? Vous pouvez définir des autorisations par défaut pour les nouveaux fichiers à l'aide des listes de contrôle d'accès par défaut. Nautilus honorera l'ACL par défaut. Voir vanemery.com/Linux/ACL/linux-acl.html pour un aperçu et suse.de/~agruen/acl/linux-acls/online pour tous les détails.
Mikel
Notez que les ACL par défaut n'appliquent pas un ensemble maximal d'autorisations, elles font simplement de ces autorisations la valeur par défaut. cp -p, scp -pet la copie via Nautilus essaiera toujours de rendre les autorisations de copie identiques à celles du fichier copié.
Mikel
0

Ce n'est pas lié à PAM / umask, mais cela pourrait vous être utile.

Si vous définissez un répertoire, tous les fichiers et répertoires créés à l'intérieur sont automatiquement affectés à son groupe.

root@ricarda ~ # mkdir hello      
root@ricarda ~ # chown :users hello 
root@ricarda ~ # chmod g+s hello
root@ricarda ~ # ls -l |grep hello 
drwxr-sr-x. 2 root users  4096 Feb  7 04:05 hello
root@ricarda ~ # touch hello/some_file
root@ricarda ~ # mkdir hello/some_dir
root@ricarda ~ # ls -l hello/       
total 4
drwxr-sr-x. 2 root users 4096 Feb  7 04:16 some_dir
-rw-r--r--. 1 root users    0 Feb  7 04:06 some_file
k0001
la source
Merci! Je ne savais pas. Cela ne résout pas les problèmes d'autorisation, mais c'est utile en effet!
0

Les listes de contrôle d'accès devraient bien fonctionner pour vous.

Définissez une ACL par défaut sur tous les dossiers du groupe, qui sera ensuite héritée par tous les futurs fichiers et répertoires.

Quelque chose comme ça setfacl -m d:g:uploaders:rwxdevrait marcher.

Pour corriger vos autorisations existantes:

find /shared/folder -type d -exec setfacl -m d:g:uploaders:rwx {} \;
find /shared/folder -type f -exec setfacl -m g:uploaders:rw {} \;

Il semble que si "préserver" est défini lors de la copie d'un fichier, l'ACL par défaut ne fonctionne pas. Dans ce cas, je ne peux que suggérer d'exécuter les commandes find dans cron ou de surveiller les modifications du système de fichiers.

Steven
la source