Bisakah saya membuat direktori publik di bawah direktori pribadi?

20

Saya memiliki folder pribadi / a / b di server dengan izin 700. Saya tidak ingin orang lain mencantumkan konten di / a / b. Pemilik / a adalah root.

Sekarang saya perlu membuka otoritas penuh direktori / a / b / c untuk semua pengguna.

Saya mengubah izin / a / b / c menjadi 777 tetapi masih tidak dapat diakses oleh orang lain.

Lee
sumber
2
Anda perlu mengatur 'eksekusi bit' untuk memungkinkan direktori traversal (untuk melintasi / a dan / a / b), ini dapat menyelesaikan masalah Anda:chmod +x /a/b
ex0ns

Jawaban:

34

Kamu bisa. Anda hanya perlu mengatur bit yang dapat dieksekusi pada /a/bdirektori. Itu akan mencegah Anda untuk dapat melihat apa pun di dalamnya b, tetapi Anda masih dapat melakukan segalanya jika Anda langsung melakukannya a/b/c.

% mkdir -p a/b/c
% chmod 711 a/b
% sudo chown root a/b
% ll a/b
  ls: cannot open directory a/b: Permission denied
% touch a/b/c/this.txt
% ls a/b/c
  this.txt

Berhati-hatilah karena walaupun orang lain tidak dapat mencantumkan konten /a/b, mereka dapat mengakses file di direktori tersebut jika mereka menebak nama file tersebut.

% echo hello | sudo tee a/b/f
% cat a/b/f
hello
% cat a/b/doesntexist
cat: a/b/doesntexist: No such file or directory

Jadi pastikan untuk mempertahankan izin yang tepat (tidak ada grup / dunia) pada semua file / direktori lain dalam bdirektori, karena ini akan menghindari peringatan ini.

stevieb
sumber
Sebagai alternatif untuk menyetel bit yang dapat dijalankan, dapatkah Anda juga memberikan tautan keras ke a / b / c yang berada di lokasi lain?
Moby Disk
2
@ MobyDisk Anda tidak dapat membuat tautan keras ke direktori.
Michael Hampton
Ini tidak akan berhasil, karena apa pun yang terjadi, Anda masih perlu membaca btautan untukc
stevieb
3
Perhatikan bahwa ada beberapa peringatan penting untuk ini. Jika ada file di dalam yang a/bmemiliki grup nol / izin lainnya, dan musuh tahu atau dapat menebak namanya, kata musuh dapat berinteraksi dengan file-file itu.
Kevin
Benar @Kevin, izin untuk segala sesuatu yang ada di bawahnya bharus memiliki izin yang ditetapkan untuk melindungi terhadap ini sebelum membuat c, dan kemudian ketekunan diperlukan ketika barang-barang lainnya dimasukkan bke dalam untuk memastikan izin aman untuk hanya pemilik.
stevieb
9

Dengan izin itu, Anda tidak dapat mencapai tujuan Anda. Untuk sampai ke direktori c, Anda harus mengizinkan semua pengguna lain untuk melintasi direktori byang dilakukan dengan memberikan izin eksekusi untuk direktori itu. Dengan /a/bset ke mode 711, Anda dapat mencapai apa yang Anda inginkan karena Anda memberikan direktori traversal tetapi menolak membaca dan menulis. Tetapi perlu diingat bahwa sementara pengguna lain tidak dapat mendaftar file /a/b, mereka mungkin mengakses file jika mereka menebak nama dan file memiliki izin yang cukup terbuka.

John
sumber
3

Jika pengguna tidak dapat mengakses /a/b, maka mereka tidak dapat mengakses file apa pun di bawah /a/b/c. Izin pada /a/b/ctidak relevan karena direktori traversal berhenti di /a/b.

Jika semua yang Anda inginkan adalah untuk mencegah direktori /a/btidak terdaftar, tetapi Anda baik-baik saja dengan pengguna mengakses file /a/bjika mereka menebak nama file, maka Anda dapat membuat /a/bexecutable tetapi tidak dapat dibaca. Pada direktori, izin baca hanya mengontrol daftar isi direktori, sedangkan izin eksekusi mengontrol akses ke entri direktori itu.

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# echo 'hello' >/a/b/existingfile
# su bob -c 'ls -l /a/b'
ls: /a/b: Permission denied
# su bob -c 'cat /a/b/nosuchfile'
cat: /a/b/nosuchfile: No such file or directory
# su bob -c 'cat /a/b/existingfile'
hello
# su bob -c 'ls -l /a/b/c'
 contents of /a/b/

Jika Anda tidak ingin pengguna lain dapat mengakses file /a/bkecuali /a/b/c, Anda dapat mengekspos /a/b/cmelalui tampilan lain, melalui bind mount .

# chmod u=rwx,go=x /a/b
# chmod u=rwx,go=rx /a/b/c
# mkdir /c
# mount --bind /a/b/c /c
# su bob -c 'ls /a/b/c'
ls: /a/b/c: Permission denied
# su bob -c 'ls -l /c'
 contents of /a/b/
Gilles 'SANGAT berhenti menjadi jahat'
sumber