Unix: Comment puis-je autoriser une seule personne à voir mon dossier dans le même fs?

9

Je veux donner accès à un dir à un ami. Il a accès au système de fichiers, où se trouve le répertoire. Je ne veux pas définir les autorisations pour tous les utilisateurs. Comment puis-je autoriser seulement une personne à voir le répertoire? Aucun de nous n'est superutilisateur.

[BOUNTY CHALLENGE] Aucune des réponses ne fonctionne, en utilisant Ubuntu:

1. L'approche de jamuraa ne fonctionne pas

$ setfacl -m user:friend:rwx classroom.xml 
setfacl: classroom.xml: Operation not supported

2. L'approche de Nik ne fonctionne pas: impossible d'accéder à un fichier inexistant

3. L'approche de ba ne fonctionne pas: je ne peux pas créer de groupes, pas une racine.

4. L'approche de ToK ne fonctionne pas, les utilisateurs sont répartis en deux groupes: "utilisateurs" et "terrain"

chown -R myFriend:users ~/TEST
chown: changing ownership of `/u/myFriend/TEST/you_see_it': Operation not permitted
chown: changing ownership of `/u/myFriend/TEST': Operation not permitted

la source
1
Il serait utile que vous donniez une ligne unique sur la façon dont ces réponses vous posent un problème - donnerait une meilleure définition du problème pour former d'autres options.
nik
nik: Ajout de profils d'erreur.

Réponses:

12

Avec des autorisations UNIX normales (utilisateur, groupe, tout le monde), vous ne pouvez pas le faire facilement. Si vous n'avez plus besoin d'accéder au répertoire, vous pouvez éventuellement changer le propriétaire du répertoire en votre ami, ce qui est valide sur certains Unices, mais la plupart d'entre eux ne le sont pas.

Cependant - si vous avez activé les ACL sous Linux, vous pouvez le faire si vous êtes le propriétaire du fichier. Exécutez simplement la commande setfacl -m user:friend:rwx filenameami est le nom de compte de votre ami et le nom de fichier est le fichier. Vous pouvez vérifier qu'il est entré en vigueur en exécutant getfacl filename, vous devriez voir la triade user:friend:rwxdans la liste. Je n'ai cependant pas vu trop de systèmes Linux sur lesquels les ACL sont activées.

jamuraa
la source
Les listes de contrôle d'accès sont la solution standard à ce problème, en supposant que votre système de fichiers les a activées.
Ryan C. Thompson,
HHH semble dire que cela ne fonctionnera pas. Je pense que oui, à moins que pour une raison étrange, les ACL ne soient pas activées. HHH, qu'est-ce qui donne?
pboin
pboin: cette méthode ne fonctionne pas, donc apparemment, la raison peut être que les ACL ne sont pas activées ou s / autre chose, pas sûr.
11

C'est quelque chose dont nous avions discuté à l'école.
Va à peu près comme ça,

  1. Créer un répertoire (nommé data, pour référence ici)
    • modifier les autorisations en " chmod 711 data"
    • groupe et autres ont seulement x- accès pour entrer dans le répertoire
    • ils ne peuvent pas lister le répertoire
    • Maintenant, créez un répertoire difficult-name-here(cela pourrait être une chaîne de hachage)
    • modifier les autorisations en " chmod a+rx difficult-name-here"
    • le contenu de ce répertoire est sécurisé tandis que le répertoire externe ne peut pas être répertorié
    • les gens qui connaissent le "nom difficile" peuvent sauter dans ce deuxième répertoire
      • " cd path/to/data/difficult-name-here"
      • d'autres ne peuvent pas voir le nom et ne peuvent pas accéder au contenu du répertoire
      • Cependant, le rootpeut toujours accéder à tout (ce qui n'est pas un problème ici)
    • partager difficult-name-hereavec les personnes que vous souhaitez donner ces données
    • Gardez les fichiers partagés dans ce deuxième répertoire

Assez grossier, mais si cela peut être cassé sans la rupture du contrôle d'accès unix, je voudrais savoir.


Mise à jour sur le commentaire de dmckee,
C'est exactement la conclusion à laquelle nous sommes arrivés!
«la sécurité par l'obscurité» a une sécurité limitée .

Cela dit, lors de la conception de la protection des données,
il est important d'identifier leur valeur.

Vous devez cibler,

  • Un coût de rupture de la sécurité plus élevé que
  • Le coût du contenu sécurisé,
  • Par un facteur proportionnel à votre paranoïa

Dans ce cas, si le rootdécide d'énumérer l'arborescence des répertoires quelque part en accès public,
votre secret est sorti! Mais, protégez-vous de la racine ou de leur irresponsabilité potentielle?
Si tel est le cas, vous avez bien plus à vous soucier des fichiers partagés.


Mise à jour sur la note de non-travail dans la question .
Je l'ai utilisé dans les premiers jours de Linux pour savoir que cela fonctionne.
Si vous obtenez « cannot access non-existant file» au lieu de 'permissions denied«vous avez très probablement fait une erreur dans la séquence. Ce que vous voulez devrait ressembler à ça,

 755711755 peu importe - === Autorisations d'accès

 BasePath / CoverDir / Obscure / protectedFile.txt
          | | ^^^^^^^^^^^^^^^^^^ Ne peut pas être vu sans
          | ^^^^^^^^ Nom du répertoire accès en lecture à
          ^^^^^ Public partagé avec un ami. Répertoire obscur.
                accessible 
                annuaire.
  1. Si vous définissez « CoverDiraccès en tant que 'rwx--x--x», le
    groupe et les autres utilisateurs peuvent uniquement entrer dans le répertoire mais ne peuvent pas lire son contenu.
  2. Maintenant, si vous utilisez un nom de répertoire obscur,
    " Obscure", à l'intérieur et que vous donnez un accès complet en lecture avec " rwxr-xr-x",
    toute personne connaissant ce nom peut répertorier son contenu.
  3. Cet accès devra se faire de l'extérieur avec un ' ls BasePath/CoverDir/Obscure'
    Parce que les gens de votre groupe et les autres ne pourront pas ' ls BasePath/CoverDir'.
nik
la source
7
"si cela peut être brisé [...], comme savoir" Eh bien, c'est l'exemple même de la sécurité par l'obscurité, et donc fragile. Ne comptez pas sur le long terme. Bien, cependant.
dmckee --- chaton ex-modérateur
Si votre contrôle d'accès Unix est implémenté en toute sécurité, cela est presque aussi sûr qu'une base de données de mots de passe masqués (ou sshclé privée).
nik
5

Ryan avait en fait 100% raison, juste en arrière. Étant donné que votre ami a (probablement) un groupe unique associé à son nom d'utilisateur, changez la propriété du groupe du répertoire en question en ce groupe, probablement le nom d'utilisateur de l'ami. Afin de pouvoir partager le contenu entre vous deux, vous devez conserver la propriété en tant qu'utilisateur:

chown -R youruser:friendgroup ~/foo/bar

Attribuez ensuite les autorisations appropriées au répertoire, en fonction de l'accès que vous souhaitez que l'autre utilisateur ait:

chmod -R 770 ~/foo/bar

vous accorderait tous les deux un accès rwx complet au répertoire et à son contenu entier.

Veuillez noter que cela suppose qu'aucun autre utilisateur n'a été ajouté au groupe de vos amis. Le système n'aurait probablement pas effectué cette affectation, cependant, comme cela a été mentionné précédemment, l'utilisateur root peut faire ce qu'il choisit. Vous pouvez utiliser la commande groups pour voir chaque groupe auquel appartient votre ami ou utilisateur arbitraire. En outre, sauf si les autorisations ont été modifiées pour une raison quelconque, vous devriez pouvoir afficher le fichier / etc / group qui contient les affectations de groupe pour chaque groupe sur le système.

Tok
la source
4

Je créerais un nouveau groupe pour vous et votre ami et définirais les autorisations de dossier sur full pour le propriétaire et le groupe avec le bit setgid pour le répertoire.

Mais en fonction de vos besoins, vous devrez peut-être également envisager de changer vous et vos amis umask afin qu'il configure automatiquement le groupe pour pouvoir modifier de nouveaux fichiers.

# groupadd bestfriends
# chmod 2770 dir
# chgrp bestfriends dir
# usermod -G bestfriends FRIENDLOGIN
gaqzi
la source
3
Cela peut nécessiter des privilèges de superutilisateur qu'il n'a pas.
Keck
1
Oh, j'ai complètement raté cette ligne: x Alors je suis perdu. Je suppose que je vais simplement l'envoyer par courrier local - pas la meilleure solution, mais au moins le fichier parvient à l'autre gars.
gaqzi le
2

Les listes de contrôle d'accès sont le moyen idéal pour ce faire.

Cependant (si je me souviens bien), le système de fichiers doit être initialisé avec des ACL (par exemple "/ dev / sda6 / home ext3 par défaut, acl "), via / etc / fstab, et c'est quelque chose que seul le superutilisateur peut faire. ..


la source
2

RBACS comme grsec / selinux est requis.

kagali-san
la source
Je ne sais pas si c'est le problème, pouvez-vous ajouter une citation?
2

Par défaut, chaque utilisateur d'un système Ubuntu a également un groupe associé du même nom. Donc, si vous pouvez ajouter votre ami à votre groupe, puis marquer le dossier en question comme g+rwx, vous serez prêt. Je me souviens vaguement de ce cas d'utilisation cité comme la raison de créer un groupe pour chaque utilisateur.

Ryan C. Thompson
la source
L'ajout d'utilisateurs à des groupes nécessite un accès root, ce que OP a déclaré ne pas avoir.
Dave Sherohman
2

Je n'ai pas essayé cela, mais que diriez-vous d'un répertoire public lisible avec un FS d'espace utilisateur chiffré à l'intérieur (par exemple encfs). Ensuite, vous pouvez partager ce mot de passe avec votre ami et personne d'autre ne peut utiliser ces données (enfin, je suppose qu'ils pourraient obtenir les données et exécuter un pirate de mot de passe hors ligne?).

Arun
la source
2

Pour donner à Linux la même finesse que Windows dans les privilèges de fichier, vous devez imbriquer des groupes. Créez un groupe qui a accès à votre dossier comme vous le souhaitez pour votre ami. Ajoutez-le à ce groupe ou au groupe dans lequel il réside dans ce groupe. Par exemple

/ foo est le dossier que vous souhaitez partager. Créez un groupe FooGroup qui a l'accès souhaité au dossier. Ajoutez des groupes et des utilisateurs à ce groupe dont vous souhaitez autoriser l'accès à ce dossier.

C'est un gros problème d'avoir un groupe pour chaque dossier ou fichier mais c'est le meilleur moyen de restreindre l'accès au même niveau que Windows.

Ge3ng
la source
1

Vous pouvez crypter le répertoire avec gpg. Et puis essayez d'obscurcir l'emplacement comme le suggère nik.

kzh
la source