Ingatlah bahwa menyembunyikan file (kebingungan) bukan pengganti untuk keamanan (membatasi akses)
uSlackr
Jawaban:
26
Kamu tidak bisa. Ada perbedaan mendasar dalam cara sistem file menangani pengaturan tersembunyi. Di Windows, sistem file menyimpan beberapa atribut untuk file dalam metadata, termasuk atribut "tersembunyi" dan "sistem" (keduanya adalah jenis file tersembunyi). Dalam sistem file * nix yang umum, tidak ada atribut yang disimpan. Sebagai gantinya, informasi tersebut harus diletakkan di tempat lain, seperti dalam nama file. Konvensi dengan demikian adalah file yang dimulai dengan. (dan tergantung pada sistem Anda, mungkin beberapa lainnya seperti _) tidak akan ditampilkan oleh sebagian besar alat secara default.
Ini murni untuk kenyamanan, a. Memulai nama file tidak berarti apa-apa selain "pengguna mungkin tidak ingin melihat ini sepanjang waktu." Untuk memastikan bahwa Anda tahu, menjalankan mis ls -aakan menampilkan semua file.
Jika Anda tidak ingin file mengacak daftar Anda di Linux, Anda harus mengganti nama file itu untuk memulai dengan titik (Bonus: ini juga akan berfungsi untuk OS X, jika kita berbicara tentang perangkat portabel). Jika Anda tidak ingin pengguna dapat menemukan file, Anda melakukan kesalahan - itulah gunanya izin.
Izin Unix karena berkaitan dengan direktori sering membingungkan orang, dan mungkin memahaminya lebih baik akan membantu Anda. Izin "membaca" dan "mengeksekusi" ( rdan x) berarti sesuatu yang berbeda untuk direktori daripada yang mereka lakukan untuk file. Untuk direktori, xizin eksekusi menentukan apakah Anda mengakses inode dalam direktori atau tidak. rIzin baca menentukan apakah Anda dapat mengakses daftar direktori atau tidak. Secara fungsional, xmemungkinkan pengguna untuk melakukan hal-hal dalam direktori, sementara rizin memungkinkan mereka untuk melihat apa yang ada di dalamnya. Ini berbeda, dan perbedaannya bisa membingungkan. Mari kita lihat sebuah contoh:
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 ..
Jadi, perhatikan bahwa tanpa mengeksekusi saya masih bisa membuat daftar file (meskipun ls menunjukkan kesalahan karena tidak bisa mendapatkan properti file), tetapi saya tidak dapat mengubah ke direktori atau membaca file di dalamnya. Tanpa membaca saya tidak bisa mendaftar file, tetapi saya masih bisa berubah ke direktori dan jika saya tahu nama file saya masih bisa mengaksesnya.
Namun, perlu diketahui bahwa menghapus izin baca hanya memberi Anda keamanan dengan ketidakjelasan. Jika pengguna menebak nama file, mereka akan dapat membaca isinya.
Ini mungkin tidak benar-benar relevan dengan pertanyaan Anda, saya hanya ingin memastikan Anda memahami izin direktori.
ini menarik. Apakah itu berfungsi juga di nautilus atau alat gui lainnya? Apakah Anda dapat melihat file ls -al?
Jakuje
1
kode tidak ada '' di akhir. (dan jika Anda bertanya-tanya dari mana upvotes berasal: askubuntu.com/a/713591/15811 ) ;-)
Rinzwind
14
Anda sebenarnya dapat menyembunyikan file di Linux tanpa menambahkan titik. Ini sebenarnya menyembunyikan mereka di Nautilus; sebuah lsdari baris perintah masih akan mencantumkan file.
Buat file teks bernama .hiddendalam folder tempat Anda ingin menyembunyikan file.
Tambahkan nama file atau folder yang ingin Anda sembunyikan, satu per baris, ke file.
tidak bekerja di sini dengan "ls" di debian 5.0. Apakah ini khusus untuk nautilus atau lumba-lumba atau ...?
Tim Haegele
2
File disembunyikan di Nautilus; tidak ada dalam lsdaftar.
To Do
1
solusi yang luar biasa! :)
Merianos Nikos
4
Sebuah titik digunakan untuk menyembunyikan file di linux, dan itu tidak dapat diubah.
Namun, Anda bisa bermain dengan izin file untuk mencegah pengguna dari memiliki akses ke folder / file yang diberikan. Coba bereksperimen dengan chmodperintah.
Apakah Anda hanya berusaha menyembunyikan file dari manajer file dan / atau lingkungan desktop antarmuka pengguna grafis Anda? Jika demikian, mungkin ada opsi di luar hanya awalan nama file dengan titik.
Saya percaya file hanya tambahan disembunyikan oleh file manager Linux adalah file backup, yaitu mereka yang berakhir dengan tilde ~atau .bakatau apa pun yang mereka percaya adalah ekstensi cadangan. Bagaimanapun, Anda mungkin beruntung jika semua yang ingin Anda lakukan adalah menyembunyikan file cadangan dari manajer file.
Jangan berikan file Anda ekstensi cadangan untuk disembunyikan atau mereka mungkin terhapus secara tidak sengaja !!
Sebagai tambahan, Anda dapat menyembunyikan file dari Finder di Mac OS X menggunakan perintah SetFile -a V [file]atau mengedit /.hiddentetapi jelas ini tidak akan menyembunyikan file dari program baris perintah ls.
Di OS X Anda juga dapat menyembunyikan file dengan chflags hidden filename.
slhck
2
Jika Anda memiliki beberapa keterampilan pemrograman dan jika hanya yang Anda butuhkan adalah menyembunyikan nama file untuk kenyamanan pengguna untuk berhenti mengacaukan ruang visual Anda dapat meretasnya!
Saya akan mempertimbangkan alat baris perintah saja, karena mereka cukup seragam dan satu-satunya alat yang selalu digunakan adalah saya.
Ada banyak cara untuk menyimpan informasi ini:
Anda dapat menyimpan atribut "tersembunyi" dalam file yang dipilih. Lihatman attr
attr -s hidden -V true your_file
Atau seperti yang disebutkan di atas Anda dapat menyimpan daftar nama .hiddenfile dalam file
Penting: Ini tidak akan berfungsi di luar kotak Anda harus menerapkan logika, sistem bersih hanya akan mengabaikan .hiddenfile dan hiddenatribut yang diperluas!
Juga ada beberapa implementasi yang mungkin:
Jika Anda hanya memiliki sedikit file, tulis di .bashrcfile Anda
alias ls='ls -I filename_1 -I filename_2'
man ls untuk informasi lebih lanjut.
Tulis function lsseperti itu menangani semua logika di belakang mengenali file yang tersembunyi dan menyusun daftar semua -Ientri, dan kemudian menjalankan
/bin/lsdengan mengabaikan bendera yang tepat. Tugas yang sangat melelahkan, karena Anda harus menangani semua lsparameter dengan benar.
Dapatkan sumber coreutils
git clone git://git.sv.gnu.org/coreutils
atau
git clone git://git.suckless.org/sbase
Tambalkan dengan cara yang Anda butuhkan untuk menangani implementasi file tersembunyi Anda. Dan letakkan diPATH
Saya meretasnya dalam waktu kurang dari 5 menit menggunakan sumber tanpa pengisap dan diff adalah seperti ini:
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)
Ini akan mengarah ke string yang sangat, sangat panjang jika lebih dari beberapa file perlu disembunyikan. Untuk banyak file, ada cara yang lebih efisien untuk melakukan ini, tetapi untuk beberapa file, tetap ada solusi yang bagus.
JW0914
2
Saat ini Anda dapat menulis FUSE yang menyembunyikan file sesuai dengan konfigurasi yang diberikan.
Artikel ini membuat saya yakin Anda perlu mengubah getdirfungsi:
getdir: int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
Ini membaca isi direktori. Operasi ini adalah opendir(), readdir(), ..., closedir()urutan dalam satu panggilan. Untuk setiap entri direktori, filldir()fungsi harus dipanggil.
Saya bukan seorang programmer tetapi saya membayangkan orang bisa getdirmenghilangkan semua file yang tercantum dalam file (misalnya) .hidden. Jika Anda menerapkan ini dengan benar maka setiap alat (GUI atau tidak) akan terpengaruh.
Anda dapat 'menyembunyikan' isi direktori dengan mengambil pergi 'x' perms untuk kelompok, atau lainnya: chmod go-x directoryname. Anda tidak lagi dapat mendaftar file, meskipun Anda dapat mengakses file jika Anda tahu jalur yang tepat. Ini tidak terdengar seperti yang Anda inginkan.
Perlu diingat bahwa hal dotfile adalah kenyamanan, tidak benar-benar menyembunyikan file demi keamanan, tetapi untuk mengurangi kekacauan file selama daftar file. Ini dimasukkan ke dalam lsdan alat lainnya.
Dan itu juga tidak benar. Saat menghapus izin baca dari direktori menghentikan Anda dari mencantumkan kontennya, menghapus izin eksekusi akan menolak akses ke direktori sama sekali. Ketika Anda tidak memiliki izin untuk menjalankan direktori, Anda tidak akan memiliki akses ke apa pun di luarnya. Bahkan jika ada subdirektori dengan hak penuh di dalamnya dan Anda tahu jalannya.
Jawaban:
Kamu tidak bisa. Ada perbedaan mendasar dalam cara sistem file menangani pengaturan tersembunyi. Di Windows, sistem file menyimpan beberapa atribut untuk file dalam metadata, termasuk atribut "tersembunyi" dan "sistem" (keduanya adalah jenis file tersembunyi). Dalam sistem file * nix yang umum, tidak ada atribut yang disimpan. Sebagai gantinya, informasi tersebut harus diletakkan di tempat lain, seperti dalam nama file. Konvensi dengan demikian adalah file yang dimulai dengan. (dan tergantung pada sistem Anda, mungkin beberapa lainnya seperti _) tidak akan ditampilkan oleh sebagian besar alat secara default.
Ini murni untuk kenyamanan, a. Memulai nama file tidak berarti apa-apa selain "pengguna mungkin tidak ingin melihat ini sepanjang waktu." Untuk memastikan bahwa Anda tahu, menjalankan mis
ls -a
akan menampilkan semua file.Jika Anda tidak ingin file mengacak daftar Anda di Linux, Anda harus mengganti nama file itu untuk memulai dengan titik (Bonus: ini juga akan berfungsi untuk OS X, jika kita berbicara tentang perangkat portabel). Jika Anda tidak ingin pengguna dapat menemukan file, Anda melakukan kesalahan - itulah gunanya izin.
Izin Unix karena berkaitan dengan direktori sering membingungkan orang, dan mungkin memahaminya lebih baik akan membantu Anda. Izin "membaca" dan "mengeksekusi" (
r
danx
) berarti sesuatu yang berbeda untuk direktori daripada yang mereka lakukan untuk file. Untuk direktori,x
izin eksekusi menentukan apakah Anda mengakses inode dalam direktori atau tidak.r
Izin baca menentukan apakah Anda dapat mengakses daftar direktori atau tidak. Secara fungsional,x
memungkinkan pengguna untuk melakukan hal-hal dalam direktori, sementarar
izin memungkinkan mereka untuk melihat apa yang ada di dalamnya. Ini berbeda, dan perbedaannya bisa membingungkan. Mari kita lihat sebuah contoh:Jadi, perhatikan bahwa tanpa mengeksekusi saya masih bisa membuat daftar file (meskipun ls menunjukkan kesalahan karena tidak bisa mendapatkan properti file), tetapi saya tidak dapat mengubah ke direktori atau membaca file di dalamnya. Tanpa membaca saya tidak bisa mendaftar file, tetapi saya masih bisa berubah ke direktori dan jika saya tahu nama file saya masih bisa mengaksesnya.
Namun, perlu diketahui bahwa menghapus izin baca hanya memberi Anda keamanan dengan ketidakjelasan. Jika pengguna menebak nama file, mereka akan dapat membaca isinya.
Ini mungkin tidak benar-benar relevan dengan pertanyaan Anda, saya hanya ingin memastikan Anda memahami izin direktori.
sumber
Buat file
.hidden
di direktori dengan nama file yang akan disembunyikan (satu nama setiap baris).Kemudian tambahkan yang berikut ke Anda
~/.bashrc
:Sekarang
ls
perintah Anda tidak mencantumkan file-file ini.Saya menggunakan teknik ini untuk menyembunyikan file saya
__pycache__
dan__init__.py
.EDIT: sesuai komentar lain ini juga menyembunyikan mereka di setidaknya satu (Nautilus), tetapi mungkin beberapa browser file GUI juga.
sumber
ls -al
?Anda sebenarnya dapat menyembunyikan file di Linux tanpa menambahkan titik. Ini sebenarnya menyembunyikan mereka di Nautilus; sebuah
ls
dari baris perintah masih akan mencantumkan file..hidden
dalam folder tempat Anda ingin menyembunyikan file.sumber
ls
daftar.Sebuah titik digunakan untuk menyembunyikan file di linux, dan itu tidak dapat diubah.
Namun, Anda bisa bermain dengan izin file untuk mencegah pengguna dari memiliki akses ke folder / file yang diberikan. Coba bereksperimen dengan
chmod
perintah.sumber
Apakah Anda hanya berusaha menyembunyikan file dari manajer file dan / atau lingkungan desktop antarmuka pengguna grafis Anda? Jika demikian, mungkin ada opsi di luar hanya awalan nama file dengan titik.
Saya percaya file hanya tambahan disembunyikan oleh file manager Linux adalah file backup, yaitu mereka yang berakhir dengan tilde
~
atau.bak
atau apa pun yang mereka percaya adalah ekstensi cadangan. Bagaimanapun, Anda mungkin beruntung jika semua yang ingin Anda lakukan adalah menyembunyikan file cadangan dari manajer file.Jangan berikan file Anda ekstensi cadangan untuk disembunyikan atau mereka mungkin terhapus secara tidak sengaja !!
Sebagai tambahan, Anda dapat menyembunyikan file dari Finder di Mac OS X menggunakan perintah
SetFile -a V [file]
atau mengedit/.hidden
tetapi jelas ini tidak akan menyembunyikan file dari program baris perintahls
.sumber
chflags hidden filename
.Jika Anda memiliki beberapa keterampilan pemrograman dan jika hanya yang Anda butuhkan adalah menyembunyikan nama file untuk kenyamanan pengguna untuk berhenti mengacaukan ruang visual Anda dapat meretasnya!
Saya akan mempertimbangkan alat baris perintah saja, karena mereka cukup seragam dan satu-satunya alat yang selalu digunakan adalah saya.
Ada banyak cara untuk menyimpan informasi ini:
Anda dapat menyimpan atribut "tersembunyi" dalam file yang dipilih. Lihat
man attr
Atau seperti yang disebutkan di atas Anda dapat menyimpan daftar nama
.hidden
file dalam filePenting: Ini tidak akan berfungsi di luar kotak Anda harus menerapkan logika, sistem bersih hanya akan mengabaikan
.hidden
file danhidden
atribut yang diperluas!Juga ada beberapa implementasi yang mungkin:
Jika Anda hanya memiliki sedikit file, tulis di
.bashrc
file Andaman ls
untuk informasi lebih lanjut.Tulis
function ls
seperti itu menangani semua logika di belakang mengenali file yang tersembunyi dan menyusun daftar semua-I
entri, dan kemudian menjalankan/bin/ls
dengan mengabaikan bendera yang tepat. Tugas yang sangat melelahkan, karena Anda harus menangani semuals
parameter dengan benar.Dapatkan sumber coreutils
atau
Tambalkan dengan cara yang Anda butuhkan untuk menangani implementasi file tersembunyi Anda. Dan letakkan di
PATH
Saya meretasnya dalam waktu kurang dari 5 menit menggunakan sumber tanpa pengisap dan diff adalah seperti ini:
sumber
ls.c
terletak disrc
, bukan direktori root, dan tidak ada fungsilsdir
dils.c
.Ini adalah solusi terbaik yang saya temukan, tambahkan ke profil Anda :
Jika Anda membutuhkan lebih banyak pola, tambahkan saja lebih banyak
--ignore
bendera.sumber
Saat ini Anda dapat menulis FUSE yang menyembunyikan file sesuai dengan konfigurasi yang diberikan.
Artikel ini membuat saya yakin Anda perlu mengubah
getdir
fungsi:Saya bukan seorang programmer tetapi saya membayangkan orang bisa
getdir
menghilangkan semua file yang tercantum dalam file (misalnya).hidden
. Jika Anda menerapkan ini dengan benar maka setiap alat (GUI atau tidak) akan terpengaruh.sumber
Anda dapat 'menyembunyikan' isi direktori dengan mengambil pergi 'x' perms untuk kelompok, atau lainnya:
chmod go-x directoryname
. Anda tidak lagi dapat mendaftar file, meskipun Anda dapat mengakses file jika Anda tahu jalur yang tepat. Ini tidak terdengar seperti yang Anda inginkan.Perlu diingat bahwa hal dotfile adalah kenyamanan, tidak benar-benar menyembunyikan file demi keamanan, tetapi untuk mengurangi kekacauan file selama daftar file. Ini dimasukkan ke dalam
ls
dan alat lainnya.sumber