Denken Sie daran, das Verbergen von Dateien (Verschleierung) ersetzt nicht die Sicherheit (Zugriffsbeschränkung)
uSlackr
Antworten:
26
Du kannst nicht. Es gibt einen grundlegenden Unterschied in der Art und Weise, wie die Dateisysteme mit versteckten Einstellungen umgehen. In Windows speichert das Dateisystem mehrere Attribute für die Datei in Metadaten, einschließlich der Attribute "hidden" und "system" (beide Arten von versteckten Dateien). In gängigen * nix-Dateisystemen wird kein solches Attribut gespeichert. Stattdessen müssen die Informationen an einer anderen Stelle abgelegt werden, beispielsweise im Dateinamen. Die Konvention ist also, dass Dateien mit beginnen. (und abhängig von Ihrem System werden möglicherweise einige andere wie _) von den meisten Tools standardmäßig nicht angezeigt.
Dies dient lediglich der Bequemlichkeit. Der Anfang eines Dateinamens bedeutet absolut nichts, aber "der Benutzer möchte dies wahrscheinlich nicht die ganze Zeit sehen." Um sicherzustellen, dass Sie es wissen, werden beim Ausführen von zB ls -aalle Dateien angezeigt.
Wenn Sie nicht möchten, dass Ihre Einträge in Linux durch eine Datei unübersichtlich werden, sollten Sie diese umbenennen, um mit einem Punkt zu beginnen (Bonus: Dies funktioniert auch für OS X, wenn es sich um ein tragbares Gerät handelt). Wenn Sie nicht möchten, dass Benutzer eine Datei finden, machen Sie es falsch - dafür sind Berechtigungen vorgesehen.
Unix-Berechtigungen, wie sie sich auf Verzeichnisse beziehen, verwirren die Leute oft, und vielleicht hilft es Ihnen, sie besser zu verstehen. Die Berechtigungen "Lesen" und "Ausführen" ( rund x) bedeuten für Verzeichnisse etwas anderes als für Dateien. Für Verzeichnisse bestimmt die Ausführungsberechtigung x, ob Sie auf die Inodes im Verzeichnis zugreifen oder nicht. Die Leseberechtigung bestimmt, rob Sie auf die Auflistung des Verzeichnisses zugreifen können oder nicht. Funktionell xermöglicht es dem Benutzer, Dinge in einem Verzeichnis zu tun, während die rBerechtigung es ihm ermöglicht, zu sehen, was sich darin befindet. Diese sind unterschiedlich und der Unterschied kann verwirrend sein. Schauen wir uns ein Beispiel an:
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 ..
Beachten Sie also, dass ich die Dateien auch ohne execute auflisten kann (obwohl ls einen Fehler anzeigt, weil die Dateieigenschaften nicht abgerufen werden können), aber ich kann nicht in das Verzeichnis wechseln oder die Dateien darin lesen. Ohne Lesen kann ich die Dateien nicht auflisten, aber ich kann trotzdem in das Verzeichnis wechseln, und wenn ich den Namen einer Datei kenne, kann ich trotzdem darauf zugreifen.
Beachten Sie jedoch, dass das Entfernen der Leseberechtigung Ihnen nur Sicherheit durch Unbekanntheit gibt. Wenn der Benutzer den Dateinamen errät, kann er dessen Inhalt lesen.
Dies war möglicherweise nicht wirklich relevant für Ihre Frage. Ich wollte nur sicherstellen, dass Sie die Verzeichnisberechtigungen verstanden haben.
Erstellen Sie .hiddenim Verzeichnis eine Datei mit den Namen der Dateien, die ausgeblendet werden sollen (ein Name pro Zeile).
Fügen Sie dann Folgendes hinzu ~/.bashrc:
ls () {
if [ -f .hidden ]; then
declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
ls "$@"
fi
}
Jetzt lslistet Ihr Befehl diese Dateien nicht mehr auf.
Ich verwende diese Technik, um meine __pycache__und __init__.pyDateien zu verstecken .
BEARBEITEN: Laut einem anderen Kommentar werden sie auch in mindestens einem (Nautilus), wahrscheinlich aber auch in mehreren GUI-Dateibrowsern versteckt.
es ist interessant. Funktioniert es auch im Nautilus oder anderen GUI-Tools? Können Sie die Dateien mit sehen ls -al?
Jakuje,
1
Code fehlt ein "" am Ende. (und falls Sie sich fragen, wo die Upvotes herkommen: askubuntu.com/a/713591/15811 ) ;-)
Rinzwind
14
Sie können Dateien in Linux tatsächlich ausblenden, ohne einen Punkt hinzuzufügen. Dies verbirgt sie tatsächlich in Nautilus; In lsder Befehlszeile werden die Dateien weiterhin aufgelistet.
Erstellen Sie eine Textdatei mit dem Namen .hiddenin dem Ordner, in dem Sie die Dateien ausblenden möchten.
Fügen Sie der Datei die Namen der Dateien oder Ordner hinzu, die Sie ausblenden möchten (eine pro Zeile).
funktioniert hier nicht mit "ls" in debian 5.0. Ist es spezifisch für Nautilus oder Delphin oder ...?
Tim Haegele
2
Dateien sind in Nautilus versteckt. nicht in lsListen.
zu tun
1
einfach super lösung! :)
Merianos Nikos
4
Ein Punkt wird verwendet, um Dateien unter Linux auszublenden. Dies kann nicht geändert werden.
Sie können jedoch mit den Dateiberechtigungen spielen, um zu verhindern, dass Benutzer auf bestimmte Ordner / Dateien zugreifen können. Versuchen Sie, mit dem chmodBefehl zu experimentieren .
Versuchen Sie nur, Dateien aus dem Dateimanager und / oder der Desktop-Umgebung Ihrer grafischen Benutzeroberfläche auszublenden? In diesem Fall gibt es möglicherweise Optionen, die über das einfache Präfixieren des Dateinamens mit einem Punkt hinausgehen.
Ich glaube , die nur zusätzliche Dateien von jedem Linux - Dateimanager versteckt sind Backup - Dateien, dh diejenigen , die in einer Tilde enden ~oder .bakoder was auch immer sie glauben , dass die Backup - Erweiterung. In jedem Fall haben Sie wahrscheinlich Glück, wenn Sie Sicherungsdateien nur vor dem Dateimanager verstecken möchten.
Geben Sie Ihren Dateien keine Backup-Erweiterung, um sie zu verbergen, da sie sonst versehentlich gelöscht werden könnten!
Abgesehen davon können Sie Dateien mit dem Befehl SetFile -a V [file]oder durch Bearbeiten im Finder von Mac OS X /.hiddenausblenden, aber dies wird die Datei natürlich nicht aus dem Kommandozeilenprogramm ausblenden ls.
In OS X können Sie Dateien auch durch verstecken chflags hidden filename.
Slhck
2
Wenn Sie einige Programmierkenntnisse haben und nur Dateinamen für die Benutzerfreundlichkeit verbergen müssen, um den visuellen Raum nicht zu überladen, können Sie ihn hacken!
Ich werde nur Kommandozeilen-Tools betrachten, da sie ziemlich einheitlich sind und die einzigen Werkzeuge sind, die ständig von mir benutzt werden.
Es gibt viele Möglichkeiten, diese Informationen zu speichern:
Sie können "versteckte" erweiterte Attribute in ausgewählten Dateien speichern. Sehenman attr
attr -s hidden -V true your_file
Oder wie oben erwähnt, können Sie die Liste der Dateinamen in der .hiddenDatei speichern
Wichtig: Dies funktioniert nicht ohne weiteres, Sie müssen die Logik implementieren, saubere Systeme ignorieren einfach .hiddenDateien und hiddenerweiterte Attribute!
Es gibt auch mehrere mögliche Implementierungen:
Wenn Sie nur wenige Dateien haben, schreiben Sie diese in Ihre .bashrcDatei
alias ls='ls -I filename_1 -I filename_2'
man ls für mehr Informationen.
Schreiben Sie ein function lssolches, das die gesamte Logik zum Erkennen versteckter Dateien und Zusammenstellen der Liste aller -IEinträge verarbeitet und dann /bin/lsmit den richtigen Ignorierflags ausführt
. Sehr mühsame Aufgabe, da man alle lsParameter richtig handhaben muss .
Holen Sie sich Quellen von Coreutils
git clone git://git.sv.gnu.org/coreutils
oder
git clone git://git.suckless.org/sbase
Patche es so, wie du es brauchst, um versteckte Dateien zu implementieren. Und platziere es in deinemPATH
Ich habe es in weniger als 5 Minuten mit sauglosen Quellen gehackt und diff sieht so aus:
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)
Dies führt zu einer sehr, sehr langen Zeichenfolge, wenn mehr als einige Dateien ausgeblendet werden müssen. Für mehrere Dateien gibt es effizientere Möglichkeiten, aber für einige Dateien ist dies dennoch eine gute Lösung.
JW0914,
2
Heutzutage können Sie FUSE schreiben , das Dateien entsprechend der gegebenen Konfiguration versteckt.
Dieser Artikel lässt mich glauben, dass Sie die getdirFunktion optimieren müssen:
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Dies liest den Inhalt eines Verzeichnisses. Diese Operation ist die opendir(), readdir(), ..., closedir()Sequenz in einem Aufruf. Für jeden Verzeichniseintrag sollte die filldir()Funktion aufgerufen werden.
Ich bin kein Programmierer, aber ich stelle mir vor, man könnte getdiralle in (zB) .hiddenDatei aufgelisteten Dateien weglassen . Wenn Sie dies korrekt implementieren, ist jedes Tool (GUI oder nicht) betroffen.
Sie können ‚verstecken‘ der Inhalt eines Verzeichnisses durch Wegnehmen ‚x‘ perms für die Gruppe oder andere: chmod go-x directoryname. Sie können keine Dateien mehr auflisten, obwohl Sie auf eine Datei zugreifen können, wenn Sie den genauen Pfad kennen. Das hört sich nicht so an, wie Sie es wollen.
Denken Sie daran, dass die Funktion dotfile praktisch ist, um die Datei aus Sicherheitsgründen nicht wirklich auszublenden, sondern um die Unordnung bei der Dateiauflistung zu verringern. Es ist in lsund die anderen Werkzeuge eingebrannt .
Und es ist auch falsch. Während das Entfernen von Leseberechtigungen aus einem Verzeichnis Sie daran hindert, seinen Inhalt aufzulisten, verweigert das Entfernen der Ausführungsberechtigung jeglichen Zugriff auf das Verzeichnis. Wenn Sie keine Berechtigung zum Ausführen eines Verzeichnisses haben, haben Sie über dieses hinaus keinen Zugriff. Nicht einmal, wenn es ein Unterverzeichnis mit vollen Rechten gibt und Sie den Pfad kennen.
Antworten:
Du kannst nicht. Es gibt einen grundlegenden Unterschied in der Art und Weise, wie die Dateisysteme mit versteckten Einstellungen umgehen. In Windows speichert das Dateisystem mehrere Attribute für die Datei in Metadaten, einschließlich der Attribute "hidden" und "system" (beide Arten von versteckten Dateien). In gängigen * nix-Dateisystemen wird kein solches Attribut gespeichert. Stattdessen müssen die Informationen an einer anderen Stelle abgelegt werden, beispielsweise im Dateinamen. Die Konvention ist also, dass Dateien mit beginnen. (und abhängig von Ihrem System werden möglicherweise einige andere wie _) von den meisten Tools standardmäßig nicht angezeigt.
Dies dient lediglich der Bequemlichkeit. Der Anfang eines Dateinamens bedeutet absolut nichts, aber "der Benutzer möchte dies wahrscheinlich nicht die ganze Zeit sehen." Um sicherzustellen, dass Sie es wissen, werden beim Ausführen von zB
ls -a
alle Dateien angezeigt.Wenn Sie nicht möchten, dass Ihre Einträge in Linux durch eine Datei unübersichtlich werden, sollten Sie diese umbenennen, um mit einem Punkt zu beginnen (Bonus: Dies funktioniert auch für OS X, wenn es sich um ein tragbares Gerät handelt). Wenn Sie nicht möchten, dass Benutzer eine Datei finden, machen Sie es falsch - dafür sind Berechtigungen vorgesehen.
Unix-Berechtigungen, wie sie sich auf Verzeichnisse beziehen, verwirren die Leute oft, und vielleicht hilft es Ihnen, sie besser zu verstehen. Die Berechtigungen "Lesen" und "Ausführen" (
r
undx
) bedeuten für Verzeichnisse etwas anderes als für Dateien. Für Verzeichnisse bestimmt die Ausführungsberechtigungx
, ob Sie auf die Inodes im Verzeichnis zugreifen oder nicht. Die Leseberechtigung bestimmt,r
ob Sie auf die Auflistung des Verzeichnisses zugreifen können oder nicht. Funktionellx
ermöglicht es dem Benutzer, Dinge in einem Verzeichnis zu tun, während dier
Berechtigung es ihm ermöglicht, zu sehen, was sich darin befindet. Diese sind unterschiedlich und der Unterschied kann verwirrend sein. Schauen wir uns ein Beispiel an:Beachten Sie also, dass ich die Dateien auch ohne execute auflisten kann (obwohl ls einen Fehler anzeigt, weil die Dateieigenschaften nicht abgerufen werden können), aber ich kann nicht in das Verzeichnis wechseln oder die Dateien darin lesen. Ohne Lesen kann ich die Dateien nicht auflisten, aber ich kann trotzdem in das Verzeichnis wechseln, und wenn ich den Namen einer Datei kenne, kann ich trotzdem darauf zugreifen.
Beachten Sie jedoch, dass das Entfernen der Leseberechtigung Ihnen nur Sicherheit durch Unbekanntheit gibt. Wenn der Benutzer den Dateinamen errät, kann er dessen Inhalt lesen.
Dies war möglicherweise nicht wirklich relevant für Ihre Frage. Ich wollte nur sicherstellen, dass Sie die Verzeichnisberechtigungen verstanden haben.
quelle
Erstellen Sie
.hidden
im Verzeichnis eine Datei mit den Namen der Dateien, die ausgeblendet werden sollen (ein Name pro Zeile).Fügen Sie dann Folgendes hinzu
~/.bashrc
:Jetzt
ls
listet Ihr Befehl diese Dateien nicht mehr auf.Ich verwende diese Technik, um meine
__pycache__
und__init__.py
Dateien zu verstecken .BEARBEITEN: Laut einem anderen Kommentar werden sie auch in mindestens einem (Nautilus), wahrscheinlich aber auch in mehreren GUI-Dateibrowsern versteckt.
quelle
ls -al
?Sie können Dateien in Linux tatsächlich ausblenden, ohne einen Punkt hinzuzufügen. Dies verbirgt sie tatsächlich in Nautilus; In
ls
der Befehlszeile werden die Dateien weiterhin aufgelistet..hidden
in dem Ordner, in dem Sie die Dateien ausblenden möchten.quelle
ls
Listen.Ein Punkt wird verwendet, um Dateien unter Linux auszublenden. Dies kann nicht geändert werden.
Sie können jedoch mit den Dateiberechtigungen spielen, um zu verhindern, dass Benutzer auf bestimmte Ordner / Dateien zugreifen können. Versuchen Sie, mit dem
chmod
Befehl zu experimentieren .quelle
Versuchen Sie nur, Dateien aus dem Dateimanager und / oder der Desktop-Umgebung Ihrer grafischen Benutzeroberfläche auszublenden? In diesem Fall gibt es möglicherweise Optionen, die über das einfache Präfixieren des Dateinamens mit einem Punkt hinausgehen.
Ich glaube , die nur zusätzliche Dateien von jedem Linux - Dateimanager versteckt sind Backup - Dateien, dh diejenigen , die in einer Tilde enden
~
oder.bak
oder was auch immer sie glauben , dass die Backup - Erweiterung. In jedem Fall haben Sie wahrscheinlich Glück, wenn Sie Sicherungsdateien nur vor dem Dateimanager verstecken möchten.Geben Sie Ihren Dateien keine Backup-Erweiterung, um sie zu verbergen, da sie sonst versehentlich gelöscht werden könnten!
Abgesehen davon können Sie Dateien mit dem Befehl
SetFile -a V [file]
oder durch Bearbeiten im Finder von Mac OS X/.hidden
ausblenden, aber dies wird die Datei natürlich nicht aus dem Kommandozeilenprogramm ausblendenls
.quelle
chflags hidden filename
.Wenn Sie einige Programmierkenntnisse haben und nur Dateinamen für die Benutzerfreundlichkeit verbergen müssen, um den visuellen Raum nicht zu überladen, können Sie ihn hacken!
Ich werde nur Kommandozeilen-Tools betrachten, da sie ziemlich einheitlich sind und die einzigen Werkzeuge sind, die ständig von mir benutzt werden.
Es gibt viele Möglichkeiten, diese Informationen zu speichern:
Sie können "versteckte" erweiterte Attribute in ausgewählten Dateien speichern. Sehen
man attr
Oder wie oben erwähnt, können Sie die Liste der Dateinamen in der
.hidden
Datei speichernWichtig: Dies funktioniert nicht ohne weiteres, Sie müssen die Logik implementieren, saubere Systeme ignorieren einfach
.hidden
Dateien undhidden
erweiterte Attribute!Es gibt auch mehrere mögliche Implementierungen:
Wenn Sie nur wenige Dateien haben, schreiben Sie diese in Ihre
.bashrc
Dateiman ls
für mehr Informationen.Schreiben Sie ein
function ls
solches, das die gesamte Logik zum Erkennen versteckter Dateien und Zusammenstellen der Liste aller-I
Einträge verarbeitet und dann/bin/ls
mit den richtigen Ignorierflags ausführt . Sehr mühsame Aufgabe, da man allels
Parameter richtig handhaben muss .Holen Sie sich Quellen von Coreutils
oder
Patche es so, wie du es brauchst, um versteckte Dateien zu implementieren. Und platziere es in deinem
PATH
Ich habe es in weniger als 5 Minuten mit sauglosen Quellen gehackt und diff sieht so aus:
quelle
ls.c
liegt insrc
, nicht im Stammverzeichnis, und es gibt keine Funktionlsdir
inls.c
.Dies ist die beste Lösung, die ich gefunden habe. Fügen Sie Ihrem Profil Folgendes hinzu :
Wenn Sie mehr Muster benötigen, fügen Sie einfach mehr
--ignore
Flags hinzu.quelle
Heutzutage können Sie FUSE schreiben , das Dateien entsprechend der gegebenen Konfiguration versteckt.
Dieser Artikel lässt mich glauben, dass Sie die
getdir
Funktion optimieren müssen:Ich bin kein Programmierer, aber ich stelle mir vor, man könnte
getdir
alle in (zB).hidden
Datei aufgelisteten Dateien weglassen . Wenn Sie dies korrekt implementieren, ist jedes Tool (GUI oder nicht) betroffen.quelle
Sie können ‚verstecken‘ der Inhalt eines Verzeichnisses durch Wegnehmen ‚x‘ perms für die Gruppe oder andere:
chmod go-x directoryname
. Sie können keine Dateien mehr auflisten, obwohl Sie auf eine Datei zugreifen können, wenn Sie den genauen Pfad kennen. Das hört sich nicht so an, wie Sie es wollen.Denken Sie daran, dass die Funktion dotfile praktisch ist, um die Datei aus Sicherheitsgründen nicht wirklich auszublenden, sondern um die Unordnung bei der Dateiauflistung zu verringern. Es ist in
ls
und die anderen Werkzeuge eingebrannt .quelle