Bayangkan pengaturan server dari perusahaan webhosting bersama di mana banyak (~ 100) pelanggan memiliki akses shell ke satu server.
Banyak "perangkat lunak" web merekomendasikan untuk chmod file 0777 . Saya khawatir tentang pelanggan kami yang secara tidak bijaksana mengikuti tutorial ini, membuka file mereka untuk pelanggan kami yang lain. (Saya tentu saja tidak menggunakan cmod 0777
sendiri secara tidak perlu!) Apakah ada metode untuk memastikan bahwa pelanggan hanya dapat mengakses file mereka sendiri dan mencegah mereka mengakses file yang dapat dibaca dunia dari pengguna lain?
Saya melihat ke AppArmor , tapi itu sangat erat dengan proses, yang tampaknya gagal di lingkungan itu.
linux
security
file-permissions
shared-hosting
Phillipp
sumber
sumber
chmod files 0777
benar-benar diperlukan, yaitu mengatasi akar penyebab masalah, daripada gejala bahwa, dengan melakukan itu, siapa pun dapat membaca file orang lain. Sering kali rekomendasi semua akses memungkinkan hanya cara murah untuk menghindari panggilan dukungan, atau kurangnya kecakapan teknis untuk dapat mengatur izin dengan benar. Dalam hampir tidak ada kasus saya harus mengatur file0777
atau memberikan aplikasi akses root penuh ketika diminta. Pendidikan pengguna dan / atau vendor sangat membantu di sini.suexec
ataumpm_itk
atau serupa.chmod 0777
file mereka. Saya pikir dia gugup tentang mereka pergiloltoturialz.com/php_problems
dan mengaturchmod 0777
sendiri sambil membabi buta mengikuti artikel yang ditulis dengan buruk. Benar-benar tidak ada cara untuk mencegah mereka melakukannya, atau mencegah mereka dari kesal ketika seseorang mencuri barang-barang mereka.Jawaban:
Letakkan direktori yang terbatas dan tidak dapat diubah antara dunia luar dan file yang dilindungi, mis
atau
/home/joe/restricted/public_html
.Dibatasi artinya hanya pengguna dan mungkin server web yang dapat membacanya (mis. Mode
0700
/0750
atau ACL ).Kekekalan dapat dilakukan dengan
chattr +i
atau dengan mengubah kepemilikan menjadi sesuatu sepertiroot:joe
.Cara mudah untuk menciptakan hirarki pada Ubuntu akan mengedit
/etc/adduser.conf
dan setGROUPHOMES
keyes
.sumber
Ada opsi yang mungkin ingin Anda pertimbangkan (tergantung seberapa banyak pekerjaan yang ingin Anda lakukan untuk itu).
Seperti yang sudah diposkan orang lain, "biasanya" Anda tidak dapat mencegah seseorang dengan akses shell untuk membaca file yang dapat dibaca dunia.
Namun Anda dapat mem-chrootnya ke rumah mereka sendiri, pada dasarnya membatasi akses shell ke, pertama, hanya direktori root yang Anda inginkan (AKA direktori home) dan, kedua, mencegah pengguna untuk mengeksekusi semua yang Anda tidak ingin mereka lakukan.
Saya melakukan pendekatan serupa ketika saya memiliki satu pengguna untuk memiliki akses ke file web, tetapi saya tidak ingin dia melihat file lain di luar folder web.
Ini memang memiliki banyak overhead, berantakan untuk diatur, dan setiap kali saya memperbarui sesuatu, itu rusak.
Tetapi untuk hari ini saya pikir Anda dapat mencapainya dengan mudah dengan opsi chroot OpenSSH :
WikiBooks OpenSSH
sumber
arch-chroot
perintah tampaknya tidak menutupi itu. Dan kemudian ada juga masalah ruang disk yang terbuang dengan semua duplikat. Saya tidak mengatakan itu tidak mungkin untuk dilakukan, hanya saja itu mungkin sedikit lebih rumit saat ini.Saya telah menemukan Daftar Kontrol Akses POSIX memungkinkan Anda, sebagai administrator sistem, untuk melindungi pengguna Anda dari yang terburuk dari ketidaktahuan mereka sendiri, dengan mengesampingkan izin sistem file grup-pengguna-lainnya yang biasa, tanpa banyak peluang untuk memecahkan sesuatu yang penting .
Mereka dapat sangat berguna jika Anda (fi) membutuhkan direktori home agar dapat diakses dunia karena konten web harus dapat diakses untuk apache di
~/public_html/
. (Meskipun dengan ACL sekarang Anda dapat melakukan sebaliknya, hapus akses untuk semua dan gunakan ACL efektif spesifik untuk pengguna apache.)Ya, pengguna yang berpengetahuan dapat menghapus / menimpa mereka lagi, hanya cukup biasa bahwa itu tidak mungkin, dan para pengguna yang biasanya tidak mudah untuk
chmod -R 777 ~/
melakukannya, kan?Anda perlu me-mount sistem file dengan
acl
opsi mount:Dalam banyak distribusi, standarnya adalah untuk membuat grup pengguna, setiap pengguna memiliki grup utama mereka, dan saya telah menetapkan semua pengguna dalam grup sekunder dengan nama tidak imajinatif
users
.Menggunakan ACL sekarang sepele untuk mencegah pengguna lain mengakses direktori home:
Sebelum:
Sekarang atur izin direktori yang efektif untuk anggota
users
grup menjadi0
tidak baca, tulis atau akses:The
+
tanda menunjukkan kehadiran pengaturan ACL sana. Dangetfacl
dapat mengkonfirmasi bahwa:The
group:users:---
menunjukkan bahwa kelompok efektif tidak memiliki hak akses, meskipun izin reguler untuk makhluk lainother::rwx
Dan pengujian sebagai user1:
Solusi umum kedua pada sistem bersama adalah memiliki direktori home mount automounter atas permintaan server yang didedikasikan untuk akses shell. Itu jauh dari bukti bodoh, tetapi biasanya hanya segelintir pengguna akan login bersamaan yang berarti hanya direktori home dari para pengguna yang terlihat dan dapat diakses.
sumber
Linux Containers (LXC) dapat menjadi kombinasi terbaik dari chroot dan sistem terpisah.
Mereka lebih seperti chroot canggih, bukan virtualisasi, tetapi Anda bisa menggabungkan sistem operasi yang berbeda dalam satu server.
Anda dapat memberikan pengguna sistem operasi yang lengkap dan chroot di sana, jadi ketika pengguna masuk, ia pergi ke wadahnya. Dan Anda juga dapat membatasi penggunaan prosesor dan memori di sana.
Stéphane Graber, penulis LXC, memiliki tutorial yang bagus untuk membantu Anda memulai.
sumber
Misalnya, jika Anda ingin pengguna hanya memiliki akses ke
home
direktori sendiri , Anda harus melakukan:Sekarang
/home/username
hanya dapat dilihat oleh pemiliknya. Untuk menjadikan ini default untuk semua pengguna baru, edit/etc/adduser.conf
dan aturDIR_MODE
ke0700
sebagai ganti0755
default.Tentu saja jika Anda ingin mengubah DIR_MODE default, itu tergantung pada distribusi Anda, yang saya posting berfungsi
Ubuntu
.sunting
Seperti @Dani_l sebutkan dengan benar, jawaban ini benar untuk membuatnya BUKAN dunia dibaca.
sumber
Hanya untuk menjadi bertele-tele - Tidak, tidak ada.
@Marek memberikan jawaban yang benar , tetapi pertanyaan Anda salah - Anda tidak dapat mencegah siapa pun mengakses file "dapat dibaca dunia".
Entah itu bisa dibaca dunia, atau tidak. @ Marek jawaban benar dalam membuat mereka TIDAK dapat dibaca dunia.
sumber
Saya tidak melihat 'shell terbatas' dalam jawaban yang diberikan sejauh ini.
ln / bin / bash / bin / rbash
Jadikan ini sebagai shell login mereka.
sumber
Jika server web berjalan sebagai pengguna dan grup yang sama untuk setiap domain yang diinangi, sulit (jika bukan tidak mungkin) untuk membuat pengaturan aman.
Anda ingin file tertentu dapat diakses oleh pengguna serta server web, tetapi tidak untuk pengguna lain. Tetapi begitu server web dapat mengaksesnya, pengguna lain dapat membacanya dengan meletakkan symlink ke file di dalam situs web mereka sendiri.
Jika Anda dapat membuat setiap situs web dijalankan sebagai pengguna yang terpisah, maka itu menjadi cukup sederhana. Setiap pelanggan sekarang akan memiliki dua pengguna pada sistem, satu untuk server web dan satu untuk akses shell.
Buat grup yang berisi dua pengguna ini. Sekarang buat direktori dengan grup itu dan root pengguna. Direktori itu harus memiliki izin
750
, yang berarti root memiliki akses penuh dan grup telah membaca dan mengeksekusi akses. Di dalam direktori itu Anda bisa membuat direktori home untuk masing-masing dari dua pengguna. Ini berarti direktori home pengguna tidak lagi memiliki formulir/home/username
, melainkan sesuatu dengan setidaknya satu komponen direktori lagi. Ini bukan masalah, tidak ada yang membutuhkan direktori home untuk dinamai sesuai dengan konvensi tertentu.Menjalankan situs web dengan pengguna dan grup yang berbeda mungkin rumit, jika Anda menggunakan vhost berbasis nama. Jika ternyata Anda hanya dapat membuat pemisahan berfungsi dengan vhost berbasis IP, dan Anda tidak memiliki cukup IP untuk setiap situs, Anda dapat meng-host setiap situs web pada alamat IPv6 dan meletakkan proxy terbalik untuk semua itu pada sebuah Alamat IPv4.
sumber