Haruskah saya menghubungkan direktori / var / www saya ke rumah saya?

20

Saya baru saja menginstal Ubuntu Server 10,04 dengan pengaturan LAMP. Saya ingin meng-host situs web di sana tetapi saya tidak yakin yang mana cara terbaik untuk mendapatkan / mengedit file saya di server. Googling menyediakan banyak opsi, tetapi saya tidak yakin mana yang terbaik?

Kecuali ada pilihan yang lebih baik, saya ingin membuat halaman di PC lain (Windows atau Linux) dan menggunakan SFTP untuk menyinkronkan perubahan ke server - tetapi apakah saya melakukan ini ke folder yang disinkronkan di ~ / atau dengan mengubah hak pada folder / var / www /?

Craig
sumber
5
Alasan mengapa / var / ww / seharusnya tidak memiliki chmod 777 - Hanya untuk membuatnya jelas.
Marco Ceppi

Jawaban:

21

Setiap pengaturan berbeda. Bagi saya, saya memiliki banyak pengguna di server yang masing-masing meng-host situs web, untuk Anda, Anda mungkin tidak perlu membuat lebih dari satu pengguna di sistem. Namun, jika Anda mengelola beberapa situs web di server ini, pengaturan ini akan membantu Anda mengelola, mengkonfigurasi, dan men-debug setiap domain dengan cara yang lebih mudah daripada pengaturan LAMP standar. Agar hal itu terjadi, saya menggunakan beberapa perangkat oleh Apache untuk mengatasi kesalahan izin.

Pertama, ini adalah struktur dokumen yang saya gunakan:

/home/[USER]/domains/[DOMAIN]/html
/home/[USER]/domains/[DOMAIN]/logs

Setiap pengguna memiliki akun sendiri dengan folder domain (yang saya tambahkan /etc/skelsehingga dibuat setiap waktu. Setiap domain memiliki folder sendiri di domainsfolder dengan htmlfolder (Saya punya alasan untuk ini, terutama agar domain dapat memiliki file web di luar dari ranah publik) Jangan ragu untuk memodifikasi struktur ini sesuai keinginan Anda, ingatlah untuk membawa perubahan-perubahan tersebut di seluruh posting ini.

Kedua, saya meng-host banyak situs PHP jadi saya menggunakan suPHP dalam konfigurasi saya. Secara default paket arsip standar tidak mengaktifkan flag kompilasi yang tepat sehingga menghasilkan versi suPHP yang kurang aman. Saya telah membuat paket suPHP saya sendiri yang saya gunakan di server saya, instruksi instalasi di bawah ini. suPHP memungkinkan Anda untuk menentukan skrip PHP apa yang harus dijalankan oleh pengguna (antara lain termasuk: custom php.ini untuk setiap situs, dll). Saya juga mengaktifkan suExec untuk Apache - lebih lanjut menghapus kebutuhan untuk memiliki kepemilikan kepada pengguna data-www (pengguna yang saya benci).

Pertama, pastikan Anda memiliki Apache, dan semua layanan lainnya diinstal pada server Anda. Pastikan mereka setidaknya berfungsi. Setelah itu saya merekomendasikan untuk menginstal suphp-common dan modul libapache2-mod-suphp yang diperlukan (Informasi lebih lanjut: Apa itu PPA dan bagaimana cara menggunakannya? ). Kemudian, setelah menginstal, aktifkan suPHP dan suexec menggunakana2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

Selanjutnya akan muncul file konfigurasi. Saya telah membuat berbagai alat yang secara otomatis menghasilkan file konfigurasi setiap kali saya menambahkan situs baru; namun, inilah templat dasar yang saya gunakan:

<VirtualHost *:80>
    ServerAdmin [EMAIL]
    ServerName [DOMAIN]
    ServerAlias www.[DOMAIN] [DOMAIN]
    DocumentRoot /home/[USER]/domains/[DOMAIN]/html

    <Directory /home/[USER]/domains/[DOMAIN]>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
    </Directory>

    ErrorLog /home/[USER]/domains/[DOMAIN]/logs/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /home/[USER]/domains/[DOMAIN]/logs/access.log combined

    SuexecUserGroup [USER] [USER]

    suPHP_UserGroup [USER] [USER]
    suPHP_ConfigPath /home/[USER]/etc
</VirtualHost>

Ini mengatur logging untuk domain itu, root dokumen, dan semua kebutuhan dasar lainnya untuk domain untuk beroperasi. Saya menempatkan file-file ini dalam /etc/apache2/sites-available/nama yang khas [USER]-[DOMAIN]dan mengaktifkan / menonaktifkannya dengan a2ensiteseperti:

sudo a2ensite [USER]-[DOMAIN]
sudo a2dissite [USER]-[DOMAIN]

Setelah setiap modifikasi ke file konfigurasi, Apache perlu dimuat ulang

sudo /etc/init.d/apache reload

Meskipun mungkin tampak seperti banyak mengatur jumlah fleksibilitas yang didapat, menurut saya, jauh melebihi waktu setup. Meskipun Anda hanya memerlukan server web pengguna tunggal, di masa depan jika Anda menginginkan sesuatu selain server web pengguna tunggal, Anda perlu melakukan tindakan lebih lanjut (atau hanya menggabungkan keamanan secara bersamaan) untuk melakukannya.

Marco Ceppi
sumber
+1 untuk setiap penyiapan berbeda dan menggunakan akun pengguna yang terpisah untuk setiap situs web
Lekensteyn
1
Ini bagus untuk sistem LAMP multi-pengguna, tetapi pertanyaannya adalah tentang sistem LAMP single-user, dalam hal ini jawaban ini berlebihan. :)
Kees Cook
@Kees prinsip yang sama berlaku - hanya saja Anda tidak perlu membuat lebih banyak pengguna. Dengan cara ini Anda tidak perlu khawatir tentang masalah pengguna atau izin - dan jika satu pengguna memiliki beberapa domain, pengaturan ini akan mencakup hal itu.
Marco Ceppi
Marco, Anda dapat menerapkan metode ini pada saat Anda mendapatkan pengguna kedua. Yang pertama, seharusnya jauh lebih sederhana kecuali jika Anda yakin akan memiliki lebih banyak.
SpamapS
+1 - ini adalah konfigurasi paling aman dan paling masuk akal.
Nathan Osman
11

Sftp sangat mudah dipasang. Cukup instal paket openssh-serverdan Anda akan memiliki sftp. Pastikan pengguna Anda memiliki kata sandi yang baik jika Anda bisa mendapatkannya dari internet. (8+ karakter, bukan kata kamus, memiliki simbol dan angka).

Untuk izin, saya biasanya melakukan ini.
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
Anda kemudian dapat memposting halaman dengan menghubungkan dengan sftp (menggunakan nama pengguna dan kata sandi Anda) dan kemudian pergi ke folder / var / www dan menempatkan file Anda di sana.

Azendale
sumber
1
Metode yang lebih aman adalah otentikasi berbasis-kunci (dengan kata sandi kunci privat tentu saja dilindungi)
Lekensteyn
@Lekensteyn Saya menganggap menyarankan itu, tapi saya mencoba untuk membuatnya tetap sederhana. Craig T mungkin melihat help.ubuntu.com/community/SSH/OpenSSH/Keys dan help.ubuntu.com/community/SSH/OpenSSH/… jika dia ingin mengatur otentikasi berbasis Key yang lebih aman.
Azendale
2
Ini adalah pendekatan paling sederhana untuk mendapatkan file ke tempat yang tepat di server web satu-contoh tanpa merusak izin file. :) Selain itu, rsync dapat digunakan sebagai ganti sftp. Keduanya menggunakan SSH di bawah tenda (dan saya akan merekomendasikan menggunakan kunci ssh bukan kata sandi, tetapi seseorang sudah menyebutkan itu).
Kees Cook
1
+1, setuju dengan Kees, ini sangat sederhana dan berfungsi untuk pertanyaan yang disebutkan. Saya telah menggunakan pengaturan yang hampir sama persis untuk cluster produksi dengan 40+ node, membatasi akses ke kunci SSH saja.
SpamapS
1

Saya menggunakan webdav. Sangat mudah untuk menginstal di Server Ubuntu. Jika Anda telah menginstal apache, Anda hampir selesai. Adil sudo a2enmod dav; service apache2 restart. Anda harus melakukan sedikit konfigurasi situs virtual Anda. Berikut ini contoh yang saya gunakan dalam produksi:

<VirtualHost *>
    ServerName webdav.mysite.com
    ServerAdmin [email protected]

    DocumentRoot /srv/mysite
    DAVLockDB /var/lock/apache2/DAVLock
    <Directory /srv/mysite>
        Order allow,deny
        Allow from all
    Dav On
    DAVMinTimeout 600
    DAVDepthInfinity On
AuthName "mysite login"
AuthType Basic
AuthUserFile /srv/mysite/.htpassword
Require valid-user

    </Directory>
php_admin_value engine off
</VirtualHost>

<VirtualHost *>

    ServerName mysite.com
    ServerAlias *.mysite.com
    ServerAdmin [email protected]

    DocumentRoot /srv/mysite/www
    <Directory /srv/mysite/www>
        Order allow,deny
        Allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /srv/mysite/cgi-bin/
</VirtualHost>

Anda dapat meletakkan ini di / srv / etc / apache2 / sites-available / mysite dan kemudian lakukan sudo a2ensite mysite; sudo service apache2 reload.

Apa yang terjadi di sini adalah Anda telah membuat dua situs virtual. Salah satunya adalah www.mysite.com dan yang lainnya adalah webdav.mysite.com. PHP telah dinonaktifkan di webdav.mysite.com yang penting.

Sekarang Anda dapat mengakses situs Anda melalui http di Ubuntu, Windows dan MacOS. Ketiganya telah membangun dukungan webdav. Berikut adalah petunjuk tentang menambahkan lokasi jaringan webdav di Ubuntu .

newz2000
sumber
Kenapa ini bagus? Karena Anda dapat mengakses situs Anda dari sistem operasi apa pun tanpa perangkat lunak tambahan (sftp berfungsi di Ubuntu, memerlukan program terpisah di OS lain). Juga, dengan situs seperti wordpress, izin sudah benar untuk berurusan dengan unggahan file karena apache menangani kedua aspek. Dan jika Anda menginginkan keamanan, https standar juga tersedia. (Anda dapat menggunakan port yang berbeda jika Anda memiliki beberapa situs di IP yang sama)
newz2000
By the way, petunjuk di atas menganggap Anda telah membuat tempat untuk situs Anda: mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysite.
newz2000
1
DAV tidak pasti untuk dienkripsi (kecuali server web Anda juga menjalankan SSL), jadi saya akan merekomendasikan SFTP atau rsync melalui DAV secara umum.
Kees Cook
0

Saya akan memberikan izin menulis ke / var / www ke data-www dan menambahkan pengguna Anda ke grup itu. Dengan begitu akan mudah untuk mengontrol pengguna mana yang dapat menulis ke direktori itu.

sudo chgrp -R www-data /var/www
sudo chmod g+w -R /var/www 
usermod -a -G www-data your-user
santiagozky
sumber
-1

Apakah Anda menggunakan kerangka kerja untuk situs Anda? Drupal, Wordpress, dll? Drupal misalnya memiliki alat untuk mengunggah melalui interaksi peramban.

Apakah Anda sudah melihat Samba? Anda dapat mengatur pembagian Samba (dan ada banyak sumber daya di web untuk mereka) dan cukup menggunakan Windows Explorer untuk membuka / mengedit / menyimpan / menghapus. Atur / var / www untuk dibagikan dan kemudian petakan "drive jaringan" ke windows.

Apakah ini pekerjaan atau lingkungan rumah? Kedengarannya seperti di rumah, tetapi jika Anda berada di lingkungan kerja ... Anda dapat memasangkan Samba dengan Active Directory dengan alat-alat seperti Likewise-Open. Saya memiliki pengaturan server / situs web sehingga mereka yang berada di toko IT dapat masuk ke kedua sisi server (linux atau situs web) melalui kredensial AD mereka.

Saya juga menyarankan melihat sesuatu seperti Mercurial. Buat repositori di server, dan sinkronkan dengan windows melalui sesuatu seperti TortiseHG. Saya menganggap itu seperti rsync, tetapi Anda akan memiliki versi, cadangan, kemampuan untuk mendistribusikan, dll (SVN, Mercurial, Git, dll semua opsi)

WernerCD
sumber
-2

Apakah Anda mencari sesuatu seperti ini

rsync -az --rsh "ssh" --rsync-path "sudo rsync" ~/website ubuntu@REMOTE-IP:/var/www
kim0
sumber
1
Masuk sebagai root sepertinya terlalu banyak pembunuhan.
Kees Cook