Ada banyak informasi yang bertentangan tentang partisi server Unix di internet, jadi saya perlu saran tentang cara melanjutkan.
Sejauh ini, pada server saya di lingkungan pengujian kami, saya tidak terlalu peduli tentang partisi dan saya mengkonfigurasi satu monolitik /
ditambah partisi swap. Skema partisi ini sepertinya bukan ide yang bagus untuk server produksi kami. Saya telah menemukan titik awal yang baik di sini , tetapi tampaknya sangat tidak jelas pada detailnya.
Pada dasarnya saya memiliki server di mana saya akan menjalankan tumpukan LAMP dasar (Apache, PHP, dan MySQL). Itu harus menangani unggahan file (hingga 2GB). Sistem memiliki 2TB RAID 1 array.
Saya berencana untuk mengatur:
/ 100GB
/var 1000GB (apache files and mysql files will be here),
/tmp 800GB (handles the php tmp file)
/home 96GB
swap 4GB
Apakah ini terdengar waras, atau saya terlalu rumit?
Jawaban:
Satu hal yang perlu diingat ketika meletakkan partisi Anda adalah mode kegagalan. Biasanya pertanyaan itu berbentuk: "Apa yang terjadi ketika partisi x terisi?" Voretaq7 tersayang mengemukakan situasi dengan penuh
/
sehingga menyebabkan sejumlah masalah sulit didiagnosis. Mari kita lihat beberapa situasi yang lebih spesifik.Apa yang terjadi jika partisi Anda menyimpan log sudah penuh? Anda kehilangan data audit / pelaporan dan kadang-kadang digunakan oleh penyerang untuk menyembunyikan aktivitas mereka. Dalam beberapa kasus, sistem Anda tidak akan mengautentikasi pengguna baru jika tidak dapat merekam acara masuk mereka.
Apa yang terjadi pada sistem berbasis RPM ketika
/var
penuh? Manajer paket tidak akan menginstal atau memperbarui paket dan, tergantung pada konfigurasi Anda, mungkin gagal secara diam-diam.Mengisi partisi itu mudah, terutama ketika pengguna mampu menulisnya. Untuk bersenang-senang, menjalankan perintah ini dan melihat seberapa cepat Anda dapat membuat file besar cukup:
cat /dev/zero > zerofile
.Selain mengisi partisi juga, ketika Anda menempatkan lokasi pada titik pemasangan yang berbeda, Anda juga dapat menyesuaikan opsi pemasangannya.
Apa yang terjadi ketika
/dev/
tidak dipasang dengannoexec
? Karena/dev
biasanya diasumsikan dipelihara oleh OS dan hanya berisi perangkat itu sering (dan terkadang masih) digunakan untuk menyembunyikan program jahat. Meninggalkannoexec
memungkinkan Anda melakukan peluncuran biner yang tersimpan di sana.Untuk semua alasan ini, dan banyak lagi, banyak panduan pengerasan akan membahas partisi sebagai salah satu langkah pertama yang harus dilakukan. Bahkan, jika Anda sedang membangun server baru cara mempartisi disk, hal ini hampir persis merupakan hal pertama yang harus Anda putuskan, dan seringkali yang paling sulit untuk diubah nanti. Ada kelompok yang disebut Pusat Keamanan Internet yang menghasilkan sekumpulan panduan konfigurasi yang mudah dibaca. Anda mungkin dapat menemukan panduan untuk Sistem Operasi spesifik Anda dan melihat setiap spesifik yang mereka katakan.
Jika kita melihat RedHat Enterprise Linux 6, skema partisi yang disarankan adalah ini:
Prinsip di balik semua perubahan ini adalah untuk mencegah mereka saling mempengaruhi dan / atau membatasi apa yang dapat dilakukan pada partisi tertentu. Ambil opsi
/tmp
misalnya. Apa yang dikatakannya adalah bahwa tidak ada node perangkat yang dapat dibuat di sana, tidak ada program yang dapat dieksekusi dari sana, dan bit set-uid tidak dapat diatur pada apa pun. Sesuai sifatnya,/tmp
hampir selalu dapat ditulis oleh dunia dan seringkali merupakan tipe khusus dari sistem file yang hanya ada di memori. Ini berarti bahwa seorang penyerang dapat menggunakannya sebagai titik pementasan yang mudah untuk menjatuhkan dan mengeksekusi kode jahat, kemudian menabrak (atau hanya me-reboot) sistem akan menghapus semua bukti. Karena fungsi dari/tmp
tidak memerlukan fungsi itu, kami dapat dengan mudah menonaktifkan fitur dan mencegah situasi itu.Tempat penyimpanan log,
/var/log
dan/var/log/audit
diukir untuk membantu melindungi mereka dari kelelahan sumber daya. Selain itu, auditd dapat melakukan beberapa hal khusus (biasanya di lingkungan keamanan yang lebih tinggi) ketika penyimpanan lognya mulai terisi. Dengan menempatkannya di partisi ini deteksi sumber daya ini bekerja lebih baik.Agar lebih verbose, dan kutip
mount(8)
, inilah yang digunakan oleh opsi di atas:Dari perspektif keamanan, ini adalah opsi yang sangat baik untuk diketahui karena mereka akan memungkinkan Anda untuk menempatkan perlindungan pada sistem file itu sendiri. Dalam lingkungan yang sangat aman Anda bahkan dapat menambahkan
noexec
opsi/home
. Ini akan mempersulit pengguna standar Anda untuk menulis skrip shell untuk memproses data, katakanlah menganalisis file log, tetapi itu juga akan mencegah mereka dari mengeksekusi biner yang akan meningkatkan hak istimewa.Juga, perlu diingat bahwa direktori home default pengguna root adalah
/root
. Ini berarti ia akan berada di sistem/
file, bukan di/home
.Berapa banyak yang Anda berikan untuk setiap partisi dapat sangat bervariasi tergantung pada beban kerja sistem. Server tipikal yang saya kelola jarang membutuhkan interaksi orang dan karena itu
/home
partisi tidak perlu terlalu besar. Hal yang sama berlaku untuk/var
karena cenderung menyimpan data yang agak fana yang sering dibuat dan dihapus. Namun, server web biasanya menggunakan/var/www
sebagai taman bermainnya, yang berarti bahwa perlu juga pada partisi yang terpisah atau/var/
perlu dibuat besar.Di masa lalu saya merekomendasikan yang berikut sebagai baseline.
Ini perlu ditinjau dan disesuaikan sesuai dengan tujuan sistem, dan bagaimana lingkungan Anda beroperasi. Saya juga merekomendasikan menggunakan LVM dan menentang mengalokasikan seluruh disk. Ini akan memungkinkan Anda untuk dengan mudah tumbuh, atau menambahkan, partisi jika hal-hal seperti itu diperlukan.
sumber
noexec
observasi adalah salah satu yang penting secara umum - Ini dianggap praktik yang baik untuk me-mount/tmp
dengannoexec
bendera untuk menghindari pengguna yang jahat upload rootkit melalui eksploitasi keamanan browser. Demikian pula/home
sering dipasangnosuid
karena tidak ada alasan untuk binari setuid berada di sana. Re:/dev
dannoexec
, pada banyak (walaupun tidak semua) sistem modern/dev
sering merupakandevfs
sistem file dan tidak akan membiarkan pengguna membuat / menyimpan file biasa sama sekali (Pada FreeBSD ia mengembalikan "Operation not supported
", di Ubuntuudev
filesystem yang dipasang pada/dev
memungkinkan Anda membuat file biasa. )./tmp
sebagai jump pad sangat menyenangkan karena selalu ada dan hampir tidak pernah terkunci.Mengabaikan array RAID yang mendasarinya ( Lihat pertanyaan ini untuk detail lebih lanjut tentang level array RAID dan ketika Anda ingin menggunakannya ), mari kita berkonsentrasi pada pertanyaan inti yang Anda tanyakan:
"Bagaimana saya harus mengeluarkan sistem file server Unix saya?"
Apa yang salah dengan satu
/
partisi raksasa ?Seperti yang Anda catat dalam pertanyaan Anda, banyak distribusi Linux (terutama distribusi "Desktop" seperti Ubuntu) menggunakan tata letak sistem file yang sangat sederhana:
/
dan[swap]
.Skema ini memiliki keunggulan kesederhanaan - sangat bagus untuk pengguna DOS / Windows yang terbiasa dengan PC rumahan mereka dengan "hard drive" sebagai satu wadah monolitik besar (
C:\
) tempat Anda membuang barang, dan Anda tidak perlu khawatir tentang kehabisan ruang pada filesystem - pastikan Anda tetap di bawah kapasitas disk dan semuanya (setidaknya secara teoritis) baik-baik saja.Skema sistem file tunggal memiliki beberapa kelemahan - kelemahan yang paling sering dikutip adalah bahwa sistem Unix cenderung bereaksi sangat buruk ketika sistem file root terisi (sampai menolak untuk mem-boot), dan jika semuanya menulis ke
/
(root) satu program atau pengguna yang tidak patuh dapat menghapus seluruh sistem.Sistem file besar tunggal juga cenderung menjadi kerugian total jika terjadi kerusakan sistem dan kerusakan sistem file berikutnya.
Masalah-masalah di atas, ditambah rasa organisasi yang kuat, adalah mengapa server Unix biasanya memiliki banyak sistem file.
Bagaimana Anda memecah sistem file Unix?
Jadi mudah-mudahan Anda yakin bahwa memiliki banyak sistem file masuk akal. Pertanyaannya sekarang adalah bagaimana Anda memecah sistem menjadi potongan-potongan logis, dan bagaimana Anda memutuskan berapa banyak ruang masing-masing?
Jawabannya adalah Anda tahu dan mengerti sistem operasi Anda akan diletakkan di mana. Titik awal untuk pemahaman itu adalah
hier
halaman manual. Sebagian besar sistem Unix datang (man hier
dari sistem linux , danman hier
dari sistem BSD ), dan ditambah pengetahuan lokal Anda tentang apa yang akan Anda lakukan dengan kode yang akan Anda lakukan akan memandu Anda dalam menciptakan tata letak partisi yang waras.Saya akan menjelaskan skema partisi umum di sini, tetapi skema ini harus selalu dimodifikasi untuk memenuhi kebutuhan spesifik Anda.
Skema Pemisahan Umum Unix
Sistem File Khusus
sumber
/usr
atau/var
tidak membantu jika/
rusak. Demikian juga memiliki utuh/
tidak membantu (banyak) jika/home
rusak. Anda akhirnya harus memulihkan dari cadangan. Belum lagi kegagalan tersebut adalah satu dari sejuta kecuali Anda menjalankan fs baru / tidak stabil.Praktek mengukir filesystem seperti itu adalah dari hari-hari ketika tidak ada serangan perangkat lunak, dan disk drive kecil, jadi Anda harus menggunakan beberapa dari mereka, dan dengan demikian, satu-satunya cara untuk melakukan itu adalah memecah filesystem ke atas dan letakkan direktori yang berbeda di drive yang berbeda. Alasan historis lainnya adalah agar Anda dapat dengan mudah melepas partisi dan
dump
cadangan, yang tidak dapat Anda lakukan dengan root. Alat ini sebagian besar tidak disukai hari ini dan sebagai gantinya dapat digunakan pada snapshot LVM bahkan pada root.Tidak ada alasan untuk melakukan ini lagi. Satu-satunya alasan yang tersisa untuk melakukan ini adalah jika Anda ingin, misalnya, mencegah
/tmp
dari mengisi seluruh disk.Alasan ini sebagian besar tidak relevan hari ini karena membuktikan pengguna dengan akses shell umum telah pergi di pinggir jalan, dan hari-hari ini server menjalankan layanan khusus, seperti server web atau mail. Karena Anda tidak memiliki pengguna acak yang dapat menjalankan perintah sewenang-wenang, Anda biasanya tidak perlu khawatir tentang mereka yang mencoba mengisi sistem file Anda (dan bahkan ketika Anda melakukannya, Anda memiliki kuota disk untuk menghentikannya).
Adapun tingkat serangan apa yang digunakan, Anda harus ingat bahwa tujuan utama serangan bukan untuk melindungi data (untuk itulah backup digunakan), tetapi untuk mempertahankan waktu kerja. Jika Anda melakukan
/tmp
raid0, maka server Anda akan tetap turun dan Anda harus memperbaikinya jika salah satu disk gagal. Anda juga mungkin ingin menggunakan raid10 bukan raid1 sehingga Anda mendapatkan kinerja yang lebih baik juga.Alasan yang sangat bagus untuk TIDAK memecah filesystem adalah bahwa jika Anda mendapatkan alokasi yang salah, Anda dapat berakhir dengan bagian dari filesystem yang penuh walaupun ada banyak ruang kosong di tempat lain. Memperbaiki ini bisa sulit, kecuali jika Anda menggunakan LVM dan meninggalkan beberapa ruang yang belum ditetapkan.
sumber
dump
, membuat cadangan bagian fs yang berbeda tidak perlu bagian tersebut berada di partisi yang berbeda. Upgrade tidak peduli dengan satu atau lain cara. Pencitraan juga bukan cara yang sangat baik untuk melakukan sesuatu.Banyak informasi partisi dihasilkan ketika ruang disk saya kekurangan pasokan. Akibatnya, Anda akan melihat partisi yang relatif kecil untuk sejumlah kasus. Ukuran partisi yang diperlukan bervariasi tergantung pada penggunaan server. Yang paling variabel cenderung
/tmp
,/var
,home
,/opt
, dan/srv
./usr
cenderung berukuran wajar dan stabil. Ruang untuk/
dapat mencakup salah satu atau semua partisi lain dan persyaratan ruang mereka. Ukuran sangat tergantung pada apa yang Anda lakukan sistem.Saya akan meningkatkan
swap
dan mount/tmp
padatmpfs
. Anda/tmp
kemudian akan menggunakan swap sebagai backing store, tetapi gunakan memori yang tersedia. Ukuran/tmp
penampilan Anda sangat tinggi, tetapi akan menangani unggahan yang dibatalkan yang tidak dibersihkan.Saya akan mempertimbangkan untuk memindahkan file MySQL
/srv
. Ini adalah level yang relatif baru dalam hirarki disk.Jika Anda tidak mengetahui persyaratan utama Anda, pertimbangkan untuk menggunakan LVM dan perluas partisi Anda sebagai isi.
sumber
/tmp
ruang yang besar mungkin diperlukan.tmpfs
dan berharap untuk memukul swap sebagai toko dukungan Anda harus memiliki swap "cukup" untuk memenuhi permintaan tmpfs Anda, ditambah cadangan yang sesuai untuk sistem juga. (Ini bukan sesuatu yang saya biasanya pikirkan karena satu-satunya sistem di mana saya menggunakantmpfs
dikonfigurasi untuk tidak menekan swap, karena memiliki kelebihan RAM dan saya menggunakan ruang sementara untuk file kecil yang dibuat / dihapus dengan cepat :)Bergantung pada arsitektur Anda - Anda mungkin tidak ingin benar-benar menggunakan / tmp karena dihapus setelah setiap reboot. Jika situs Anda berurusan dengan pemrosesan unggahan akhirnya, mengubahnya ke lokasi lain (via php.ini) mungkin merupakan ide; di mana Anda bisa membuatnya menjadi titik pemasangan.
Seperti yang disarankan sebelumnya, sangat disarankan untuk menggunakan LVM dan kenaikan sesuai kebutuhan.
Saya juga sangat merekomendasikan partisi khusus untuk data MySQL (Anda masih bisa memasangnya di / var / lib / mysql).
sumber
/tmp
mungkin tidak ada di sana nanti - menyelamatkan Anda dari kejutan yang tidak menyenangkan nanti :-)