Pamiętaj, że ukrywanie plików (zaciemnianie) nie zastępuje bezpieczeństwa (ograniczenie dostępu)
uSlackr 21.11.11
Odpowiedzi:
26
Nie możesz. Istnieje zasadnicza różnica w sposobie obsługi ukrytych ustawień przez systemy plików. W systemie Windows system plików przechowuje kilka atrybutów pliku w metadanych, w tym atrybuty „ukryty” i „system” (oba są rodzajami ukrytych plików). We wspólnych systemach plików * nix taki atrybut nie jest przechowywany. Zamiast tego informacje należy umieścić w innym miejscu, na przykład w nazwie pliku. Konwencja jest więc taka, że pliki zaczynają się od. (i w zależności od systemu, być może niektóre inne, takie jak _) nie będą domyślnie wyświetlane przez większość narzędzi.
Jest to wyłącznie dla wygody, a. rozpoczęcie nazwy pliku oznacza absolutnie nic, ale „użytkownik prawdopodobnie nie chce tego cały czas widzieć”. Aby upewnić się, że wiesz, uruchomienie np. ls -aPokaże wszystkie pliki.
Jeśli nie chcesz, aby plik był zaśmiecany na twoich listach w Linuksie, powinieneś zmienić jego nazwę, aby zacząć od kropki (Bonus: zadziała to również w OS X, jeśli mówimy o urządzeniu przenośnym). Jeśli nie chcesz, aby użytkownicy mogli znaleźć plik, robisz to źle - po to są uprawnienia.
Uprawnienia uniksowe dotyczące katalogów często dezorientują ludzi, a może lepsze zrozumienie pomoże. Uprawnienia do „odczytu” i „wykonywania” ( ri x) oznaczają coś innego dla katalogów niż dla plików. W przypadku katalogów xuprawnienie do wykonywania określa, czy uzyskujesz dostęp do i-węzłów w katalogu. Uprawnienie do odczytu rokreśla, czy możesz uzyskać dostęp do listy katalogu. Funkcjonalnie xpozwala użytkownikowi robić rzeczy w katalogu, a ruprawnienie pozwala mu zobaczyć, co w nim jest. Są różne, a różnica może być myląca. Spójrzmy na przykład:
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 ..
Zauważ, że bez wykonania mogę nadal wyświetlać listę plików (chociaż ls pokazuje błąd, ponieważ nie może uzyskać właściwości pliku), ale nie mogę przejść do katalogu ani odczytać zawartych w nim plików. Bez odczytu nie mogę wyświetlić listy plików, ale nadal mogę przejść do katalogu i jeśli znam nazwę pliku, nadal mogę uzyskać do niego dostęp.
Należy jednak pamiętać, że usunięcie uprawnienia do odczytu zapewnia bezpieczeństwo tylko przez zaciemnienie. Jeśli użytkownik odgadnie nazwę pliku, będzie mógł odczytać jego zawartość.
To może nie być tak naprawdę związane z twoim pytaniem, chciałem tylko upewnić się, że rozumiesz uprawnienia do katalogu.
nie działa tutaj z „ls” w debian 5.0. Czy jest specyficzny dla nautilusa, delfina czy ...?
Tim Haegele,
2
Pliki są ukryte w Nautilus; nie ma na lslistach.
Zrobić
1
po prostu niesamowite rozwiązanie! :)
Merianos Nikos,
4
Kropka służy do ukrywania plików w systemie Linux i nie można tego zmienić.
Można jednak grać z uprawnieniami do plików, aby uniemożliwić użytkownikom dostęp do danego folderu / pliku. Spróbuj eksperymentować z chmodpoleceniem.
Czy tylko próbujesz ukryć pliki przed menedżerem plików i / lub środowiskiem graficznym interfejsu użytkownika? Jeśli tak, mogą istnieć opcje poza zwykłym prefiksem nazwy pliku kropką.
I wierzę , że tylko dodatkowe pliki ukryte przez każdego menedżera plików Linuksa są pliki kopii zapasowej, czyli tych, kończąc w tyldą ~lub .bakczy co ich zdaniem jest rozszerzenie kopii zapasowej. W każdym razie prawdopodobnie masz szczęście, jeśli wszystko, co chcesz zrobić, to ukryć pliki kopii zapasowej w menedżerze plików.
Nie udostępniaj swoim plikom kopii zapasowej, aby je ukryć, ponieważ mogą zostać przypadkowo usunięte !!
Nawiasem mówiąc, możesz ukryć pliki w Finderze w Mac OS X za pomocą polecenia SetFile -a V [file]lub edycji, /.hiddenale oczywiście nie ukryje to pliku przed lsprogramem wiersza poleceń .
W OS X można również ukrywać pliki według chflags hidden filename.
slhck 21.11.11
2
Jeśli masz jakieś umiejętności programowania i jeśli tylko potrzebujesz, ukrywasz nazwy plików, aby użytkownik nie przestał zaśmiecać przestrzeni wizualnej, możesz ją zhakować!
Rozważę tylko narzędzia wiersza poleceń, ponieważ są one dość jednolite i są jedynymi narzędziami stale używanymi przeze mnie.
Istnieje wiele sposobów przechowywania tych informacji:
Możesz przechowywać „ukryty” atrybut rozszerzony w wybranych plikach. Widziećman attr
attr -s hidden -V true your_file
Lub, jak wspomniano powyżej, możesz przechowywać listę nazw plików w .hiddenpliku
Ważne: nie zadziała to od razu po zaimplementowaniu logiki, czyste systemy po prostu zignorują .hiddenpliki i hiddenrozszerzone atrybuty!
Istnieje również wiele możliwych implementacji:
Jeśli masz tylko kilka plików, napisz w swoim .bashrcpliku
alias ls='ls -I filename_1 -I filename_2'
man ls po więcej informacji.
Napisz function lstaki, że obsługuje całą logikę związaną z rozpoznawaniem ukrytych plików i gromadzeniem listy wszystkich -Iwpisów, a następnie wykonywanie
/bin/lsz odpowiednimi flagami ignorowania. Bardzo żmudne zadanie, ponieważ musisz lspoprawnie obsługiwać wszystkie parametry.
Uzyskaj źródła coreutils
git clone git://git.sv.gnu.org/coreutils
lub
git clone git://git.suckless.org/sbase
Popraw to tak, jak potrzebujesz obsługi implementacji ukrytych plików. I umieść to w swoimPATH
Zhackowałem go w mniej niż 5 minut, używając źródeł bezskutecznych, a diff wygląda następująco:
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)
Doprowadzi to do bardzo, bardzo długiego ciągu, jeśli trzeba ukryć więcej niż kilka plików. W przypadku wielu plików istnieją bardziej wydajne sposoby, ale w przypadku kilku plików dobre rozwiązanie.
JW0914
2
Obecnie możesz pisać BEZPIECZNIK, który ukrywa pliki zgodnie z podaną konfiguracją.
W tym artykule uważam, że musisz poprawić tę getdirfunkcję:
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Odczytuje zawartość katalogu. Ta operacja jest opendir(), readdir(), ..., closedir()sekwencja w jednym połączeniu. Dla każdej pozycji katalogu filldir()należy wywołać funkcję.
Nie jestem programistą, ale wyobrażam sobie, że można getdirpominąć wszystkie pliki wymienione w (np.) .hiddenPliku. Jeśli zaimplementujesz to poprawnie, wpłynie to na każde narzędzie (GUI lub nie).
Można „hide” zawartość katalogu zabierając „x” perms dla grupy lub inne: chmod go-x directoryname. Nie można już wyświetlać plików, ale można uzyskać dostęp do pliku, jeśli znasz dokładną ścieżkę. To nie brzmi jak chcesz.
Należy pamiętać, że dotfile to wygoda, nie tak naprawdę, aby ukryć plik ze względów bezpieczeństwa, ale aby zmniejszyć bałagan w plikach podczas wyświetlania listy plików. Jest upieczony lsi inne narzędzia.
I to także nieprawda. Podczas gdy usuwanie uprawnień do odczytu z katalogu powstrzymuje Cię od wyświetlania jego zawartości, usunięcie uprawnienia do wykonywania w ogóle odmawia dostępu do katalogu. Jeśli nie masz uprawnień do wykonania katalogu, nie będziesz mieć dostępu do niczego poza nim. Nawet jeśli istnieje podkatalog z pełnymi prawami i znasz jego ścieżkę.
Odpowiedzi:
Nie możesz. Istnieje zasadnicza różnica w sposobie obsługi ukrytych ustawień przez systemy plików. W systemie Windows system plików przechowuje kilka atrybutów pliku w metadanych, w tym atrybuty „ukryty” i „system” (oba są rodzajami ukrytych plików). We wspólnych systemach plików * nix taki atrybut nie jest przechowywany. Zamiast tego informacje należy umieścić w innym miejscu, na przykład w nazwie pliku. Konwencja jest więc taka, że pliki zaczynają się od. (i w zależności od systemu, być może niektóre inne, takie jak _) nie będą domyślnie wyświetlane przez większość narzędzi.
Jest to wyłącznie dla wygody, a. rozpoczęcie nazwy pliku oznacza absolutnie nic, ale „użytkownik prawdopodobnie nie chce tego cały czas widzieć”. Aby upewnić się, że wiesz, uruchomienie np.
ls -a
Pokaże wszystkie pliki.Jeśli nie chcesz, aby plik był zaśmiecany na twoich listach w Linuksie, powinieneś zmienić jego nazwę, aby zacząć od kropki (Bonus: zadziała to również w OS X, jeśli mówimy o urządzeniu przenośnym). Jeśli nie chcesz, aby użytkownicy mogli znaleźć plik, robisz to źle - po to są uprawnienia.
Uprawnienia uniksowe dotyczące katalogów często dezorientują ludzi, a może lepsze zrozumienie pomoże. Uprawnienia do „odczytu” i „wykonywania” (
r
ix
) oznaczają coś innego dla katalogów niż dla plików. W przypadku katalogówx
uprawnienie do wykonywania określa, czy uzyskujesz dostęp do i-węzłów w katalogu. Uprawnienie do odczytur
określa, czy możesz uzyskać dostęp do listy katalogu. Funkcjonalniex
pozwala użytkownikowi robić rzeczy w katalogu, ar
uprawnienie pozwala mu zobaczyć, co w nim jest. Są różne, a różnica może być myląca. Spójrzmy na przykład:Zauważ, że bez wykonania mogę nadal wyświetlać listę plików (chociaż ls pokazuje błąd, ponieważ nie może uzyskać właściwości pliku), ale nie mogę przejść do katalogu ani odczytać zawartych w nim plików. Bez odczytu nie mogę wyświetlić listy plików, ale nadal mogę przejść do katalogu i jeśli znam nazwę pliku, nadal mogę uzyskać do niego dostęp.
Należy jednak pamiętać, że usunięcie uprawnienia do odczytu zapewnia bezpieczeństwo tylko przez zaciemnienie. Jeśli użytkownik odgadnie nazwę pliku, będzie mógł odczytać jego zawartość.
To może nie być tak naprawdę związane z twoim pytaniem, chciałem tylko upewnić się, że rozumiesz uprawnienia do katalogu.
źródło
Utwórz plik
.hidden
w katalogu z nazwami plików, które mają być ukryte (jedna nazwa w każdym wierszu).Następnie dodaj następujące elementy do
~/.bashrc
:Teraz twoje
ls
polecenie nie wyświetla tych plików.Używam tej techniki do ukrywania moich
__pycache__
i__init__.py
plików.EDYCJA: zgodnie z innym komentarzem ukrywa je również w co najmniej jednej (Nautilus), ale prawdopodobnie także w kilku przeglądarkach plików GUI.
źródło
ls -al
?Możesz ukryć pliki w systemie Linux bez dodawania kropki. To faktycznie ukrywa ich w Nautilusie;
ls
z wiersza poleceń nadal będzie lista plików..hidden
w folderze, w którym chcesz ukryć pliki.źródło
ls
listach.Kropka służy do ukrywania plików w systemie Linux i nie można tego zmienić.
Można jednak grać z uprawnieniami do plików, aby uniemożliwić użytkownikom dostęp do danego folderu / pliku. Spróbuj eksperymentować z
chmod
poleceniem.źródło
Czy tylko próbujesz ukryć pliki przed menedżerem plików i / lub środowiskiem graficznym interfejsu użytkownika? Jeśli tak, mogą istnieć opcje poza zwykłym prefiksem nazwy pliku kropką.
I wierzę , że tylko dodatkowe pliki ukryte przez każdego menedżera plików Linuksa są pliki kopii zapasowej, czyli tych, kończąc w tyldą
~
lub.bak
czy co ich zdaniem jest rozszerzenie kopii zapasowej. W każdym razie prawdopodobnie masz szczęście, jeśli wszystko, co chcesz zrobić, to ukryć pliki kopii zapasowej w menedżerze plików.Nie udostępniaj swoim plikom kopii zapasowej, aby je ukryć, ponieważ mogą zostać przypadkowo usunięte !!
Nawiasem mówiąc, możesz ukryć pliki w Finderze w Mac OS X za pomocą polecenia
SetFile -a V [file]
lub edycji,/.hidden
ale oczywiście nie ukryje to pliku przedls
programem wiersza poleceń .źródło
chflags hidden filename
.Jeśli masz jakieś umiejętności programowania i jeśli tylko potrzebujesz, ukrywasz nazwy plików, aby użytkownik nie przestał zaśmiecać przestrzeni wizualnej, możesz ją zhakować!
Rozważę tylko narzędzia wiersza poleceń, ponieważ są one dość jednolite i są jedynymi narzędziami stale używanymi przeze mnie.
Istnieje wiele sposobów przechowywania tych informacji:
Możesz przechowywać „ukryty” atrybut rozszerzony w wybranych plikach. Widzieć
man attr
Lub, jak wspomniano powyżej, możesz przechowywać listę nazw plików w
.hidden
plikuWażne: nie zadziała to od razu po zaimplementowaniu logiki, czyste systemy po prostu zignorują
.hidden
pliki ihidden
rozszerzone atrybuty!Istnieje również wiele możliwych implementacji:
Jeśli masz tylko kilka plików, napisz w swoim
.bashrc
plikuman ls
po więcej informacji.Napisz
function ls
taki, że obsługuje całą logikę związaną z rozpoznawaniem ukrytych plików i gromadzeniem listy wszystkich-I
wpisów, a następnie wykonywanie/bin/ls
z odpowiednimi flagami ignorowania. Bardzo żmudne zadanie, ponieważ musiszls
poprawnie obsługiwać wszystkie parametry.Uzyskaj źródła coreutils
lub
Popraw to tak, jak potrzebujesz obsługi implementacji ukrytych plików. I umieść to w swoim
PATH
Zhackowałem go w mniej niż 5 minut, używając źródeł bezskutecznych, a diff wygląda następująco:
źródło
ls.c
Znajduje się wsrc
nie w katalogu głównym, a nie ma funkcjilsdir
wls.c
.To najlepsze rozwiązanie, jakie znalazłem, dodaj do swojego profilu :
Jeśli potrzebujesz więcej wzorów, po prostu dodaj więcej
--ignore
flag.źródło
Obecnie możesz pisać BEZPIECZNIK, który ukrywa pliki zgodnie z podaną konfiguracją.
W tym artykule uważam, że musisz poprawić tę
getdir
funkcję:Nie jestem programistą, ale wyobrażam sobie, że można
getdir
pominąć wszystkie pliki wymienione w (np.).hidden
Pliku. Jeśli zaimplementujesz to poprawnie, wpłynie to na każde narzędzie (GUI lub nie).źródło
Można „hide” zawartość katalogu zabierając „x” perms dla grupy lub inne:
chmod go-x directoryname
. Nie można już wyświetlać plików, ale można uzyskać dostęp do pliku, jeśli znasz dokładną ścieżkę. To nie brzmi jak chcesz.Należy pamiętać, że dotfile to wygoda, nie tak naprawdę, aby ukryć plik ze względów bezpieczeństwa, ale aby zmniejszyć bałagan w plikach podczas wyświetlania listy plików. Jest upieczony
ls
i inne narzędzia.źródło