Gardez à l'esprit que le fait de cacher des fichiers (obscurcissement) ne remplace pas la sécurité (restriction d'accès)
uSlackr
Réponses:
26
Vous ne pouvez pas. Il existe une différence fondamentale dans la façon dont les systèmes de fichiers gèrent les paramètres masqués. Sous Windows, le système de fichiers stocke plusieurs attributs pour le fichier dans les métadonnées, y compris les attributs "caché" et "système" (qui sont tous deux des types de fichiers cachés). Dans les systèmes de fichiers communs * nix, aucun de ces attributs n'est stocké. Au lieu de cela, les informations doivent être placées ailleurs, comme dans le nom de fichier. La convention est donc que les fichiers commençant par. (et selon votre système, peut-être que certains autres comme _) ne seront pas affichés par la plupart des outils par défaut.
C'est uniquement pour des raisons de commodité, a. commencer un nom de fichier ne signifie absolument rien mais "l'utilisateur ne veut probablement pas voir ça tout le temps". Pour vous assurer que vous le savez, exécuter par exemple ls -aaffichera tous les fichiers.
Si vous ne voulez pas qu'un fichier encombre vos listes sous Linux, vous devez le renommer pour commencer par un point (Bonus: cela fonctionnera aussi pour OS X, si nous parlons d'un appareil portable). Si vous ne voulez pas que les utilisateurs puissent trouver un fichier, vous le faites mal - c'est à cela que servent les autorisations.
Les autorisations Unix car elles se rapportent aux répertoires confondent souvent les gens, et peut-être que mieux le comprendre vous aidera. Les autorisations "lire" et "exécuter" ( ret x) signifient quelque chose de différent pour les répertoires que pour les fichiers. Pour les répertoires, l' xautorisation d' exécution détermine si vous accédez ou non aux inodes du répertoire. L' rautorisation de lecture détermine si vous pouvez ou non accéder à la liste du répertoire. Fonctionnellement, xpermet à l'utilisateur de faire des choses dans un répertoire, tandis que l' rautorisation lui permet de voir ce qu'il contient. Ce sont différents, et la différence peut être déroutante. Regardons un exemple:
jeanluc@login64: ~ $ mkdir example
jeanluc@login64: ~ $ echo "you can read it" > example/file
jeanluc@login64: ~ $ ls example/
file
jeanluc@login64: ~ $ cat example/file
you can read it
jeanluc@login64: ~ $ chmod -x example/
jeanluc@login64: ~ $ ls example/
ls: cannot access example/file: Permission denied
file
jeanluc@login64: ~ $ cat example/file
cat: example/file: Permission denied
jeanluc@login64: ~ $ cd example/
-bash: cd: example/: Permission denied
jeanluc@login64: ~ $ chmod +x example/
jeanluc@login64: ~ $ chmod -r example/
jeanluc@login64: ~ $ ls example/
ls: cannot open directory example/: Permission denied
jeanluc@login64: ~ $ cat example/file
you can read it
jeanluc@login64: ~ $ cd example/
jeanluc@login64: ~/example $ ls
ls: cannot open directory .: Permission denied
jeanluc@login64: ~/example $ cd ..
Donc, notez que sans exécuter, je peux toujours lister les fichiers (bien que ls affiche une erreur car il ne peut pas obtenir les propriétés du fichier), mais je ne peux pas changer dans le répertoire ou lire les fichiers qu'il contient. Sans lecture, je ne peux pas lister les fichiers, mais je peux toujours me déplacer dans le répertoire et si je connais le nom d'un fichier, je peux toujours y accéder.
Notez cependant que la suppression de l'autorisation de lecture ne vous donne que la sécurité par l'obscurité. Si l'utilisateur devine le nom du fichier, il pourra lire son contenu.
Cela n'a peut-être pas vraiment été pertinent pour votre question, je voulais juste m'assurer que vous compreniez les autorisations de répertoire.
Créez un fichier .hiddendans le répertoire avec les noms des fichiers à masquer (un nom par ligne).
Ajoutez ensuite ce qui suit à votre ~/.bashrc:
ls () {
if [ -f .hidden ]; then
declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
ls "$@"
fi
}
Maintenant, votre lscommande ne répertorie pas ces fichiers.
J'utilise cette technique pour masquer mes fichiers __pycache__et __init__.py.
EDIT: selon un autre commentaire, cela les cache également dans au moins un (Nautilus), mais probablement plusieurs navigateurs de fichiers GUI également.
Vous pouvez réellement masquer des fichiers sous Linux sans ajouter de point. Cela les cache en fait dans Nautilus; un à lspartir de la ligne de commande répertorie toujours les fichiers.
Créez un fichier texte nommé .hiddendans le dossier dans lequel vous souhaitez masquer les fichiers.
Ajoutez les noms des fichiers ou dossiers que vous souhaitez masquer, un par ligne, au fichier.
ne fonctionne pas ici avec "ls" dans debian 5.0. Est-ce spécifique au nautile ou au dauphin ou ...?
Tim Haegele
2
Les fichiers sont cachés dans Nautilus; pas dans les lslistes.
À faire le
1
solution juste génial! :)
Merianos Nikos
4
Un point est utilisé pour masquer les fichiers sous Linux, et cela ne peut pas être modifié.
Cependant, vous pouvez jouer avec les autorisations de fichier pour empêcher les utilisateurs d'avoir accès au dossier / fichier donné. Essayez d'expérimenter avec la chmodcommande.
Essayez-vous uniquement de masquer les fichiers du gestionnaire de fichiers et / ou de l'environnement de bureau de votre interface utilisateur graphique? Si c'est le cas, il pourrait y avoir des options au-delà du simple préfixage du nom de fichier par un point.
Je crois que les fichiers ne supplémentaires cachés par un gestionnaire de fichiers Linux sont des fichiers de sauvegarde, à savoir ceux qui se terminent dans un tilde ~ou .bakou tout ce qu'ils croient est l'extension de sauvegarde. Dans tous les cas, vous avez probablement de la chance si tout ce que vous souhaitez faire est de cacher les fichiers de sauvegarde du gestionnaire de fichiers.
Ne donnez pas à vos fichiers une extension de sauvegarde pour les cacher ou ils pourraient être supprimés accidentellement !!
En passant, vous pouvez masquer des fichiers du Finder dans Mac OS X à l'aide de la commande SetFile -a V [file]ou de la modification, /.hiddenmais cela ne masquera évidemment pas le fichier du programme de la ligne de commande ls.
Sous OS X, vous pouvez également masquer les fichiers par chflags hidden filename.
slhck
2
Si vous avez des compétences en programmation et si seulement ce dont vous avez besoin est de cacher les noms de fichiers pour que l'utilisateur convienne de ne pas encombrer l'espace visuel, vous pouvez le pirater!
Je ne considérerai que les outils de ligne de commande, car ils sont assez uniformes et sont les seuls outils constamment utilisés par moi.
Il existe de nombreuses façons de stocker ces informations:
Vous pouvez stocker l'attribut étendu "caché" dans les fichiers sélectionnés. Voirman attr
attr -s hidden -V true your_file
Ou comme mentionné ci-dessus, vous pouvez stocker la liste des noms de fichiers dans un .hiddenfichier
Important: Cela ne fonctionnera pas hors de la boîte que vous devez implémenter la logique, les systèmes propres ignoreront simplement les .hiddenfichiers et hiddenles attributs étendus!
Il existe également plusieurs implémentations possibles:
Si vous n'avez que peu de fichiers, écrivez votre .bashrcfichier
alias ls='ls -I filename_1 -I filename_2'
man ls pour plus d'informations.
Écrivez un function lstel qu'il gère toute la logique derrière la reconnaissance des fichiers cachés et l'assemblage de la liste de toutes les -Ientrées, puis l'exécution
/bin/lsavec les indicateurs d'ignorance appropriés. Tâche très laborieuse, car vous devez gérer tous les lsparamètres correctement.
Obtenez des sources de coreutils
git clone git://git.sv.gnu.org/coreutils
ou
git clone git://git.suckless.org/sbase
Appliquez-le comme vous le souhaitez pour gérer votre implémentation de fichiers cachés. Et placez-le dans votrePATH
Je l'ai piraté en moins de 5 minutes en utilisant des sources sans succion et le diff est comme ceci:
diff --git a/ls.c b/ls.c
index cdfce4d..8197409 100644
--- a/ls.c
+++ b/ls.c
@@ -214,6 +214,17 @@ lsdir(const char *path)
first = 0;
while ((d = readdir(dp))) {
+///////////////////////////////////////////////
+// Dirty hack to implement hidden files
+// FIXME: Make proper(!) subroutine
+ char attr_command[1024] = "attr -Lqg hidden "; // Oh, dear. That's bad
+ int attr_code;
+ strcat(attr_command, d->d_name);
+ strcat(attr_command, " >/dev/null 2>&1");
+ attr_code = system(attr_command);
+ if (!attr_code)
+ continue;
+///////////////////////////////////////////////
if (d->d_name[0] == '.' && !aflag && !Aflag)
continue;
else if (Aflag)
Cela va conduire à une chaîne très, très longue si plus de quelques fichiers doivent être cachés. Pour plusieurs fichiers, il existe des moyens plus efficaces de le faire, mais pour quelques fichiers, une bonne solution néanmoins.
JW0914
2
De nos jours, vous pouvez écrire FUSE qui cache les fichiers en fonction de la configuration donnée.
Cet article me fait croire que vous devez modifier la getdirfonction:
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Cela lit le contenu d'un répertoire. Cette opération est opendir(), readdir()..., closedir()séquence dans un appel. Pour chaque entrée de répertoire, la filldir()fonction doit être appelée.
Je ne suis pas programmeur mais j'imagine qu'on pourrait faire getdiromettre tous les fichiers listés dans (par exemple) un .hiddenfichier. Si vous l'implémentez correctement, tous les outils (GUI ou non) seront affectés.
Vous pouvez « cacher » le contenu d'un répertoire en enlevant « x » perms pour le groupe, ou autre: chmod go-x directoryname. Vous ne pouvez plus répertorier les fichiers, mais vous pouvez accéder à un fichier si vous connaissez le chemin exact. Cela ne ressemble pas à ce que vous voulez.
Gardez à l'esprit que la chose dotfile est une commodité, pas vraiment pour cacher le fichier pour des raisons de sécurité, mais pour réduire l'encombrement des fichiers lors de la liste des fichiers. Il est intégré dans lsles autres outils.
Et c'est également faux. Bien que la suppression des autorisations de lecture d'un répertoire vous empêche de répertorier son contenu, la suppression de la permission d'exécution refusera tout accès au répertoire. Lorsque vous n'êtes pas autorisé à exécuter un répertoire, vous n'aurez accès à rien au-delà. Pas même s'il y a un sous-répertoire avec tous les droits et que vous connaissez son chemin.
Réponses:
Vous ne pouvez pas. Il existe une différence fondamentale dans la façon dont les systèmes de fichiers gèrent les paramètres masqués. Sous Windows, le système de fichiers stocke plusieurs attributs pour le fichier dans les métadonnées, y compris les attributs "caché" et "système" (qui sont tous deux des types de fichiers cachés). Dans les systèmes de fichiers communs * nix, aucun de ces attributs n'est stocké. Au lieu de cela, les informations doivent être placées ailleurs, comme dans le nom de fichier. La convention est donc que les fichiers commençant par. (et selon votre système, peut-être que certains autres comme _) ne seront pas affichés par la plupart des outils par défaut.
C'est uniquement pour des raisons de commodité, a. commencer un nom de fichier ne signifie absolument rien mais "l'utilisateur ne veut probablement pas voir ça tout le temps". Pour vous assurer que vous le savez, exécuter par exemple
ls -a
affichera tous les fichiers.Si vous ne voulez pas qu'un fichier encombre vos listes sous Linux, vous devez le renommer pour commencer par un point (Bonus: cela fonctionnera aussi pour OS X, si nous parlons d'un appareil portable). Si vous ne voulez pas que les utilisateurs puissent trouver un fichier, vous le faites mal - c'est à cela que servent les autorisations.
Les autorisations Unix car elles se rapportent aux répertoires confondent souvent les gens, et peut-être que mieux le comprendre vous aidera. Les autorisations "lire" et "exécuter" (
r
etx
) signifient quelque chose de différent pour les répertoires que pour les fichiers. Pour les répertoires, l'x
autorisation d' exécution détermine si vous accédez ou non aux inodes du répertoire. L'r
autorisation de lecture détermine si vous pouvez ou non accéder à la liste du répertoire. Fonctionnellement,x
permet à l'utilisateur de faire des choses dans un répertoire, tandis que l'r
autorisation lui permet de voir ce qu'il contient. Ce sont différents, et la différence peut être déroutante. Regardons un exemple:Donc, notez que sans exécuter, je peux toujours lister les fichiers (bien que ls affiche une erreur car il ne peut pas obtenir les propriétés du fichier), mais je ne peux pas changer dans le répertoire ou lire les fichiers qu'il contient. Sans lecture, je ne peux pas lister les fichiers, mais je peux toujours me déplacer dans le répertoire et si je connais le nom d'un fichier, je peux toujours y accéder.
Notez cependant que la suppression de l'autorisation de lecture ne vous donne que la sécurité par l'obscurité. Si l'utilisateur devine le nom du fichier, il pourra lire son contenu.
Cela n'a peut-être pas vraiment été pertinent pour votre question, je voulais juste m'assurer que vous compreniez les autorisations de répertoire.
la source
Créez un fichier
.hidden
dans le répertoire avec les noms des fichiers à masquer (un nom par ligne).Ajoutez ensuite ce qui suit à votre
~/.bashrc
:Maintenant, votre
ls
commande ne répertorie pas ces fichiers.J'utilise cette technique pour masquer mes fichiers
__pycache__
et__init__.py
.EDIT: selon un autre commentaire, cela les cache également dans au moins un (Nautilus), mais probablement plusieurs navigateurs de fichiers GUI également.
la source
ls -al
?Vous pouvez réellement masquer des fichiers sous Linux sans ajouter de point. Cela les cache en fait dans Nautilus; un à
ls
partir de la ligne de commande répertorie toujours les fichiers..hidden
dans le dossier dans lequel vous souhaitez masquer les fichiers.la source
ls
listes.Un point est utilisé pour masquer les fichiers sous Linux, et cela ne peut pas être modifié.
Cependant, vous pouvez jouer avec les autorisations de fichier pour empêcher les utilisateurs d'avoir accès au dossier / fichier donné. Essayez d'expérimenter avec la
chmod
commande.la source
Essayez-vous uniquement de masquer les fichiers du gestionnaire de fichiers et / ou de l'environnement de bureau de votre interface utilisateur graphique? Si c'est le cas, il pourrait y avoir des options au-delà du simple préfixage du nom de fichier par un point.
Je crois que les fichiers ne supplémentaires cachés par un gestionnaire de fichiers Linux sont des fichiers de sauvegarde, à savoir ceux qui se terminent dans un tilde
~
ou.bak
ou tout ce qu'ils croient est l'extension de sauvegarde. Dans tous les cas, vous avez probablement de la chance si tout ce que vous souhaitez faire est de cacher les fichiers de sauvegarde du gestionnaire de fichiers.Ne donnez pas à vos fichiers une extension de sauvegarde pour les cacher ou ils pourraient être supprimés accidentellement !!
En passant, vous pouvez masquer des fichiers du Finder dans Mac OS X à l'aide de la commande
SetFile -a V [file]
ou de la modification,/.hidden
mais cela ne masquera évidemment pas le fichier du programme de la ligne de commandels
.la source
chflags hidden filename
.Si vous avez des compétences en programmation et si seulement ce dont vous avez besoin est de cacher les noms de fichiers pour que l'utilisateur convienne de ne pas encombrer l'espace visuel, vous pouvez le pirater!
Je ne considérerai que les outils de ligne de commande, car ils sont assez uniformes et sont les seuls outils constamment utilisés par moi.
Il existe de nombreuses façons de stocker ces informations:
Vous pouvez stocker l'attribut étendu "caché" dans les fichiers sélectionnés. Voir
man attr
Ou comme mentionné ci-dessus, vous pouvez stocker la liste des noms de fichiers dans un
.hidden
fichierImportant: Cela ne fonctionnera pas hors de la boîte que vous devez implémenter la logique, les systèmes propres ignoreront simplement les
.hidden
fichiers ethidden
les attributs étendus!Il existe également plusieurs implémentations possibles:
Si vous n'avez que peu de fichiers, écrivez votre
.bashrc
fichierman ls
pour plus d'informations.Écrivez un
function ls
tel qu'il gère toute la logique derrière la reconnaissance des fichiers cachés et l'assemblage de la liste de toutes les-I
entrées, puis l'exécution/bin/ls
avec les indicateurs d'ignorance appropriés. Tâche très laborieuse, car vous devez gérer tous lesls
paramètres correctement.Obtenez des sources de coreutils
ou
Appliquez-le comme vous le souhaitez pour gérer votre implémentation de fichiers cachés. Et placez-le dans votre
PATH
Je l'ai piraté en moins de 5 minutes en utilisant des sources sans succion et le diff est comme ceci:
la source
ls.c
réside danssrc
, pas le répertoire racine, et il n'y a pas de fonctionlsdir
dansls.c
.C'est la meilleure solution que j'ai trouvée, ajoutez à votre profil :
Si vous avez besoin de plus de modèles, ajoutez simplement plus de
--ignore
drapeaux.la source
De nos jours, vous pouvez écrire FUSE qui cache les fichiers en fonction de la configuration donnée.
Cet article me fait croire que vous devez modifier la
getdir
fonction:Je ne suis pas programmeur mais j'imagine qu'on pourrait faire
getdir
omettre tous les fichiers listés dans (par exemple) un.hidden
fichier. Si vous l'implémentez correctement, tous les outils (GUI ou non) seront affectés.la source
Vous pouvez « cacher » le contenu d'un répertoire en enlevant « x » perms pour le groupe, ou autre:
chmod go-x directoryname
. Vous ne pouvez plus répertorier les fichiers, mais vous pouvez accéder à un fichier si vous connaissez le chemin exact. Cela ne ressemble pas à ce que vous voulez.Gardez à l'esprit que la chose dotfile est une commodité, pas vraiment pour cacher le fichier pour des raisons de sécurité, mais pour réduire l'encombrement des fichiers lors de la liste des fichiers. Il est intégré dans
ls
les autres outils.la source