3 votes

Comment verrouiller des fichiers avec des mots de passe spécifiques sur mac, idéalement via le terminal ?

Je veux verrouiller mon fichier /etc/hosts de manière à ce qu'il faille un mot de passe pour y écrire. Je sais que l'on peut crypter des fichiers avec l'Utilitaire de disque, mais dans ce cas, le fichier doit être lu par l'ordinateur et le chemin/extension ne peut pas changer. Je ne veux pas simplement verrouiller le contenu, je veux verrouiller ce fichier de manière très spécifique.

Si je cours sudo vim /etc/hosts Je dois saisir mon mot de passe de connexion, mais je peux ensuite faire ce que je veux.

Je veux une solution qui me permette d'exécuter sudo vim /etc/hosts Je dois taper un mot de passe personnalisé/spécifique pour écrire dans le fichier.

4voto

Jose Chavez Points 645

Le fichier /etc/hosts doit pouvoir être lu par d'autres programmes pour remplir sa fonction. Si vous cryptez le fichier de quelque manière que ce soit, ces autres programmes ne pourront pas le lire - et il cessera de fonctionner.

En bref, il n'est pas possible d'effectuer cette opération (c'est-à-dire le cryptage) de manière significative.

Cependant, vous pouvez vous assurer que d'autres personnes n'ont pas de mots de passe pour les comptes administratifs de votre Mac. S'ils ont besoin de plus de privilèges pour quelque chose, faites en sorte de leur attribuer un accès à cette ressource spécifique (par exemple via un accès sudo limité à un programme spécifique) - et assurez-vous de ne pas leur donner un accès administratif complet.

Un exemple d'utilisation de sudo pour donner l'accès à la modification d'un fichier est l'utilisation de l'option "sudoedit" dans sudo. Cela vous permet de donner à une autre personne l'accès à l'édition d'un fichier sans laisser son éditeur s'exécuter en tant qu'utilisateur privilégié (ce qui est voué à lui permettre de "s'échapper" et de faire d'autres choses en tant qu'utilisateur privilégié). Pour ce faire, il suffit de copier le fichier privilégié dans un emplacement distinct, de laisser l'utilisateur exécuter son éditeur habituel sous son propre nom d'utilisateur pour éditer ce fichier, puis de copier son contenu sur le fichier privilégié.

Dans sudoers, vous devez spécifier quelque chose comme :

username  sudoedit /etc/hosts

Par défaut, cela permet à "nom d'utilisateur" de modifier ce fichier, et lui demande d'entrer son propre mot de passe de connexion avant de le faire.

Si vous souhaitez que l'utilisateur saisisse un mot de passe différent, qui ne soit pas son mot de passe de connexion, vous avez essentiellement deux façons de procéder.

Une solution consiste à ne pas utiliser "sudoedit" : Créez plutôt un programme personnalisé (qui peut être un script) qui entre simplement une chaîne de caractères et vérifie qu'elle correspond au mot de passe que vous voulez, puis imite simplement ce que fait sudoedit. Il peut aussi être très simple et se contenter d'une commande "cp" pour copier un chemin spécifique du dossier personnel de l'utilisateur vers /etc/hosts.

L'autre solution consiste à modifier les mots de passe que sudo acceptera comme valides. Cela se fait en éditant /etc/pam.d/sudo et en décommentant les lignes standard commençant par "auth". A la place, indiquez le module d'authentification et les options que vous souhaitez approuver.

Si vous voulez faire quelque chose de complètement personnalisé, vous pouvez compiler votre propre module PAM qui demande simplement un mot de passe et vérifie qu'il s'agit d'une chaîne de caractères spécifique. Vous pouvez commencer par le code source du module PAM pam_opendirectory par défaut et supprimer les parties relatives à OpenDirectory pour les remplacer par une simple fonction strcmp(). Le code source d'un tel module personnalisé ne comporte que quelques lignes de code.

Vous pouvez trouver le code source du module PAM pam_opendirectory ici :

https://opensource.apple.com/source/pam_modules/pam_modules-76/pam_opendirectory/pam_opendirectory.c.auto.html

1voto

Geoff Nixon Points 3143

Voici donc une réponse toute nouvelle, qui n'est pas une "demi-solution".

C'est à vous de me dire si c'est ce que vous recherchez.
Mais pour renforcer les réponses ci-dessus :

  1. Changez votre compte par défaut pour un compte non-administrateur.
  2. Créez un nouveau compte administrateur, avec un mot de passe unique ; ce compte ne sera utilisé que pour modifier les données de la base de données. /etc/hosts .
  3. Ecrire un wrapper script/fonction shell pour envelopper/superséder sudo en vérifiant également les arguments dans $@ ici pour garantir /etc/hosts est le fichier en question.
  4. read le mot de passe de l'utilisateur admin unique dans une variable shell.
  5. Utilisez le reste du script pour su à l'utilisateur admin en utilisant ce mot de passe, puis à nouveau à /usr/bin/sudo vi /etc/hosts .

Vous aurez alors une solution où lorsque vous "exécutez sudo vim /etc/hosts, [vous] devez taper un mot de passe personnalisé/spécifique pour écrire dans le fichier".

0voto

Geoff Nixon Points 3143

En supposant que votre compte soit un compte d'administrateur, je pense que votre meilleure solution serait de Activer l'utilisateur racine (avec son propre mot de passe, et supprimer le admin du groupe de la sudoers fichier.

  1. Utilitaire Open Directory. Il pourrait y avoir un moyen de le faire à partir du Terminal, mais l'utilitaire d'ouverture de répertoire.app est accessible par l'intermédiaire de

    • Préférences système > Options de connexion > Serveur de comptes réseau > Joindre...

    • open -a "Directory Utility"

    • etc... (il se trouve dans /System/Library/CoreServices/Applications)

  2. Cliquez sur le cadenas, puis dans le menu Edition, sélectionnez "Activer l'utilisateur racine".

  3. Fixer un unique mot de passe.

  4. Assurez-vous que cela fonctionne. Dans votre terminal, tapez su root et entrez votre nouveau root mot de passe. Vous devriez être en mesure d'éditer votre fichier hosts.

  5. Dans votre terminal (en tant qu'utilisateur par défaut), tapez sudo visudo , (saisir votre mot de passe).

  6. Commentez la ligne :

%admin ALL = (ALL) ALL

à

## %admin ALL = (ALL) ALL

  1. Enregistrer le fichier.

Réessayez. Vous devriez maintenant obtenir une erreur du type :

  1. [User] is not in the sudoers file. This incident will be reported.

Ce n'est pas exactement un fichier spécifique, mais il semble que cela corresponde à ce que vous vouliez ?

(Pour restaurer, utiliser su root (pas une fonction liée au sudo).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X