Je ne veux pas simplement chmod et courir tant que je n'ai pas la bonne réponse, et je ne veux pas non plus lancer GnuPG en tant que root. La solution facile serait simplement de le configurer de sorte que seul mon utilisateur puisse le lire, mais je ne pense pas que ce soit la meilleure façon.
Je reçois le message d'erreur suivant lorsque j'essaie d'utiliser gpg:
gpg: WARNING: unsafe enclosing directory permissions on configuration file `/home/nb/.gnupg/gpg.conf'
gpg: external program calls are disabled due to unsafe options file permissions
gpg: keyserver communications error: general error
gpg: keyserver receive failed: general error
État actuel de ~/.gnupg/
de GnuPG:
% stat .gnupg
File: ‘.gnupg’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 1bh/27d Inode: 20578751 Links: 3
Access: (0775/drwxrwxr-x) Uid: ( 1000/ nb) Gid: ( 1000/ XXXX)
Access: 2015-08-09 18:14:45.937760752 -0700
Modify: 2015-08-05 20:54:32.860883569 -0700
Change: 2015-08-05 20:54:32.860883569 -0700
Birth: -
La réponse au lien suivant indique 600 autorisations pour le fichier ~/gnupg/gpg.conf
, mais le dossier qui les contient a-t-il également besoin de ces autorisations?
Oui, vous devrez également corriger les autorisations du répertoire englobant ~/.gnupg
Car un attaquant disposant de suffisamment de droits sur le dossier pourrait manipuler le contenu du dossier.
Exécutez les commandes suivantes:
Assurez-vous que le dossier et le contenu vous appartiennent:chown -R $(whoami) ~/.gnupg/
Droits d'accès corrects pour .gnupg
et les sous-dossiers:find ~/.gnupg -type f -exec chmod 600 {} \;
find ~/.gnupg -type d -exec chmod 700 {} \;
Explication sur 600
, 700
:
Commençons par l'arrière: '00' signifie AUCUN droit AT ALL pour tous ceux qui ne sont pas propriétaires des fichiers/répertoires.
Cela signifie que le processus qui lit ces fichiers (gnupg) doit s’exécuter en tant que propriétaire de ces fichiers/répertoires.
~/.gnupg/
est un dossier, le processus de lecture du contenu doit pouvoir "entrer" (= exécuter) ce dossier. C'est le "x" Bit. Il a la valeur "1". 7 - 6 = 1
~/.gnupg/
et ~/.gnupg/*
que vous voulez pouvoir lire et écrire, c'est 4 + 2 = 6
.
==> Seul le propriétaire des fichiers peut maintenant les lire/écrire (= 600). Lui seul peut également entrer dans le répertoire (= 700)
==> Ces droits sur les fichiers ne "nécessitent" pas d'être documentés, ils peuvent être dérivés de l'utilisation prévue.
Plus d'infos sur la notation d'autorisation: https://en.wikipedia.org/wiki/File_system_permissions#Notation_of_traditional_Unix_permissions
GnuPG applique par défaut les privilèges d'accès sécurisé, ce qui signifie que personne d'autre (à l'exception de vous) ne peut accéder à votre répertoire personnel GnuPG ~/.gnupg
. Ces privilèges d'accès ne sont souvent pas assez stricts après la copie du répertoire principal de GnuPG à partir d'un autre ordinateur, et très souvent, la raison d'un tel message est une erreur de propriétaire.
# Set ownership to your own user and primary group
chown -R "$USER:$(id -gn)" ~/.gnupg
# Set permissions to read, write, execute for only yourself, no others
chmod 700 ~/.gnupg
# Set permissions to read, write for only yourself, no others
chmod 600 ~/.gnupg/*
Si vous avez (pour quelque raison que ce soit) créé vos propres dossiers dans ~/.gnupg
, vous devez également appliquer des autorisations d'exécution à ce dossier. Les dossiers nécessitent l’ouverture de privilèges d’exécution.
Bien que Jens Erat l'ait déjà mentionné dans sa dernière phrase, je pense qu'il convient de souligner que tous les dossiers contenus dans ~/.gnupg doivent également être exécutables (mode 700). Cela est particulièrement vrai pour le dossier private-keys * créé par gpg lui-même. J'ai été coincé avec des problèmes de permission pendant un moment avant de m'en rendre compte.
Ces deux lignes définiront les autorisations séparément et correctement pour les répertoires et les fichiers:
find ~/.gnupg -type d -exec chmod 700 {} \;
find ~/.gnupg -type f -exec chmod 600 {} \;
en supposant que la propriété est déjà définie correctement.
Notez que cela ne modifie pas les autorisations sur les sockets S.gpg-agent*
. (Seul le nouveau gpg v2 implique des sockets, pas l'ancien gpg v1).