Tôi có nên liên kết thư mục / var / www đến nhà của tôi không?


20

Tôi vừa cài đặt Ubuntu Server 10.04 với thiết lập LAMP. Tôi muốn lưu trữ một trang web ở đó nhưng tôi không chắc đó là cách tốt nhất để nhận / chỉnh sửa các tệp của mình trên máy chủ. Googling cung cấp nhiều tùy chọn nhưng tôi không chắc cái nào tốt nhất?

Trừ khi có tùy chọn tốt hơn, tôi muốn tạo các trang trên PC khác (Windows hoặc Linux) và sử dụng SFTP để đồng bộ hóa các thay đổi với máy chủ - nhưng tôi có làm điều này với thư mục được liên kết trong ~ / hoặc bằng cách thay đổi quyền trên thư mục / var / www /?


Câu trả lời:


21

Mỗi thiết lập là khác nhau. Đối với tôi, tôi có rất nhiều người dùng trên một máy chủ mà mỗi trang web lưu trữ, đối với bạn, bạn có thể sẽ không cần phải tạo nhiều hơn một người dùng trên hệ thống. Tuy nhiên, nếu bạn quản lý nhiều trang web trên máy chủ này, thiết lập này sẽ giúp bạn quản lý, định cấu hình và gỡ lỗi từng tên miền một cách dễ dàng hơn so với thiết lập LAMP tiêu chuẩn. Để điều đó xảy ra, tôi sử dụng một số thiết bị của Apache để khắc phục các lỗi về quyền.

Đầu tiên, đây là cấu trúc tài liệu tôi sử dụng:

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

Mỗi người dùng có tài khoản riêng với một thư mục tên miền (tôi đã thêm vào để /etc/skeltạo tài khoản mỗi lần. Mỗi tên miền có thư mục riêng trong domainsthư mục có htmlthư mục (tôi có lý do của mình cho việc này, chủ yếu là vì vậy tên miền có thể có tệp web bên ngoài của lĩnh vực công cộng). Hãy thoải mái sửa đổi cấu trúc này khi bạn thấy phù hợp, chỉ cần nhớ thực hiện những thay đổi đó trong suốt bài đăng này.

Thứ hai, tôi lưu trữ rất nhiều trang web PHP vì vậy tôi sử dụng suPHP trong cấu hình của mình. Theo mặc định, gói lưu trữ tiêu chuẩn không bật cờ biên dịch phù hợp dẫn đến phiên bản suPHP kém an toàn hơn. Tôi đã tạo gói suPHP của riêng mình mà tôi sử dụng trên các máy chủ của mình, hướng dẫn cài đặt bên dưới. suPHP cho phép bạn xác định tập lệnh PHP nào của người dùng sẽ được thực thi (trong số những thứ khác bao gồm: php.ini tùy chỉnh cho mỗi trang, v.v.). Tôi cũng kích hoạt suExec cho Apache - loại bỏ thêm nhu cầu có quyền sở hữu đối với người dùng dữ liệu www (một người dùng mà tôi coi thường).

Trước tiên hãy đảm bảo bạn có Apache và tất cả các dịch vụ khác được cài đặt trên máy chủ của bạn. Hãy chắc chắn rằng họ ít nhất đang làm việc. Sau đó, tôi khuyên bạn nên cài đặt suphp-common và mô-đun libapache2-mod-suphp cần thiết (Thông tin thêm: PPA là gì và tôi sử dụng chúng như thế nào? ). Sau đó, sau khi cài đặt, kích hoạt suPHP và suexec bằng cách sử dụnga2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

Tiếp theo sẽ đến tập tin cấu hình. Tôi đã tạo ra nhiều công cụ tự động tạo các tệp cấu hình mỗi khi tôi thêm một trang web mới; tuy nhiên, đây là mẫu cơ bản tôi sử dụng:

<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>

Điều này thiết lập ghi nhật ký cho tên miền đó, gốc tài liệu và tất cả các nhu cầu cơ bản khác để tên miền hoạt động. Tôi đặt các tệp này trong /etc/apache2/sites-available/tên thường được đặt [USER]-[DOMAIN]và bật / tắt chúng a2ensitenhư thế:

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

Sau mỗi lần sửa đổi tệp cấu hình, Apache sẽ cần được tải lại

sudo /etc/init.d/apache reload

Mặc dù có vẻ như rất nhiều để thiết lập mức độ linh hoạt đạt được, theo tôi, vượt xa thời gian thiết lập. Mặc dù bạn chỉ cần một máy chủ web người dùng duy nhất, nhưng trong tương lai nếu bạn muốn bất kỳ thứ gì ngoài máy chủ web người dùng, bạn sẽ cần thực hiện thêm các hành động (hoặc chỉ bỏ bảo mật cùng nhau) để làm như vậy.


+1 cho mỗi thiết lập là khác nhau và sử dụng các tài khoản người dùng riêng biệt cho mỗi trang web
Lekensteyn

1
Điều này rất tốt cho hệ thống LAMP nhiều người dùng, nhưng câu hỏi là về hệ thống LAMP một người dùng, trong trường hợp câu trả lời này là quá mức cần thiết. :)
Kees Cook

@Kees áp dụng nguyên tắc tương tự - chỉ bạn không phải tạo thêm người dùng. Bằng cách này, bạn không bao giờ phải lo lắng về vấn đề người dùng hoặc quyền - và nếu một người dùng có nhiều tên miền thì thiết lập này sẽ bao gồm điều đó.
Marco Ceppi

Marco, bạn có thể thực hiện phương pháp này vào đúng thời điểm mà bạn có được người dùng thứ hai. Điều đó đầu tiên, mặc dù, sẽ đơn giản hơn nhiều trừ khi chắc chắn bạn sẽ có nhiều hơn.
SpamapS

+1 - đây là cấu hình an toàn và hợp lý nhất.
Nathan Osman

11

Sftp rất dễ cài đặt. Chỉ cần cài đặt gói openssh-servervà bạn sẽ có sftp. Hãy chắc chắn rằng người dùng của bạn có một mật khẩu tốt nếu bạn có thể truy cập nó từ internet. (8 ký tự, không phải từ trong từ điển, có ký hiệu và số).

Để có quyền, tôi thường làm điều này
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
Sau đó, bạn có thể đăng các trang bằng cách kết nối với sftp (sử dụng tên người dùng và mật khẩu của bạn) và sau đó đi đến thư mục / var / www và đặt các tệp của bạn ở đó.


1
Một phương pháp an toàn hơn là xác thực dựa trên khóa (tất nhiên với mật khẩu khóa riêng được bảo vệ)
Lekensteyn

@Lekensteyn Tôi đã xem xét đề xuất đó, nhưng tôi đã cố gắng làm cho nó đơn giản. Craig T có thể xem qua help.ubfox.com/community/SSH/OpenSSH/Keyshelp.ubfox.com/community/SSH/OpenSSH/, nếu anh ta muốn thiết lập xác thực dựa trên khóa an toàn hơn.
Azendale

2
Đây là cách tiếp cận đơn giản nhất để đưa các tệp vào đúng vị trí trên một máy chủ web đơn lẻ mà không làm hỏng quyền truy cập tệp. :) Ngoài ra, rsync có thể được sử dụng thay vì sftp. Cả hai đều sử dụng SSH trong chương trình (và tôi khuyên bạn nên sử dụng khóa ssh thay vì mật khẩu, nhưng ai đó đã đề cập đến điều đó).
Kees Cook

1
+1, đồng ý với Kees, đây là siêu đơn giản và hoạt động cho câu hỏi đã nêu. Tôi đã sử dụng gần như cùng một thiết lập cho các cụm sản xuất với hơn 40 nút, chỉ giới hạn quyền truy cập vào các khóa SSH.
SpamapS

1

Tôi sử dụng webdav. Rất dễ cài đặt trên Ubuntu Server. Nếu bạn đã cài đặt apache, bạn sắp hoàn thành. Chỉ cần sudo a2enmod dav; service apache2 restart. Bạn sẽ cần phải thực hiện một cấu hình nhỏ của trang web ảo của bạn. Đây là một ví dụ mà tôi đang sử dụng trong sản xuất:

<VirtualHost *>
    ServerName webdav.mysite.com
    ServerAdmin webmaster@mysite.com

    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 webmaster@mysite.com

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

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

Bạn có thể đặt cái này trong / srv / etc / apache2 / sites-Available / mysite và sau đó làm sudo a2ensite mysite; sudo service apache2 reload.

Điều đang xảy ra ở đây là bạn đã tạo hai trang web ảo. Một là www.mysite.com và cái còn lại là webdav.mysite.com. PHP đã bị vô hiệu hóa trên webdav.mysite.com, điều này rất quan trọng.

Bây giờ bạn có thể truy cập trang web của mình qua http trên Ubuntu, Windows và MacOS. Cả ba đều tích hợp hỗ trợ webdav. Dưới đây là hướng dẫn về cách thêm vị trí mạng webdav trong Ubuntu .


Tại sao điều này là tốt? Bởi vì bạn có thể truy cập trang web của mình từ bất kỳ hệ điều hành nào mà không cần phần mềm bổ sung (sftp hoạt động trong Ubuntu, cần một chương trình riêng trong các HĐH khác). Ngoài ra, với một trang web như wordpress, các quyền đã chính xác để xử lý các tệp tải lên do giao dịch apache với cả hai khía cạnh. Và nếu bạn muốn bảo mật, https chuẩn cũng có sẵn. (bạn có thể sử dụng các cổng khác nhau nếu bạn có nhiều trang web trên cùng một IP)
newz2000

Nhân tiện, hướng dẫn ở trên giả định bạn đã tạo một địa điểm cho trang web của mình : mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysite.
newz2000

1
DAV không chắc chắn được mã hóa (trừ khi máy chủ web của bạn cũng đang chạy SSL), vì vậy tôi muốn giới thiệu SFTP hoặc rsync trên DAV nói chung.
Kees Cook

0

Tôi sẽ cấp quyền ghi cho / var / www cho dữ liệu www và thêm người dùng của bạn vào nhóm đó. Bằng cách đó, sẽ dễ dàng kiểm soát người dùng nào có thể ghi vào thư mục đó.

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

-1

Bạn đang sử dụng bất kỳ khuôn khổ cho trang web của bạn? Drupal, Wordpress, vv? Ví dụ, Drupal có các công cụ để tải lên thông qua tương tác trình duyệt.

Bạn đã nhìn vào Samba? Bạn có thể thiết lập chia sẻ Samba (và có rất nhiều tài nguyên trên web cho họ) và chỉ cần sử dụng Windows Explorer để mở / chỉnh sửa / lưu / xóa. Thiết lập / var / www sẽ được chia sẻ và sau đó ánh xạ "ổ đĩa mạng" sang windows.

Đây là một công việc hay một môi trường gia đình? Nghe có vẻ như ở nhà, nhưng nếu bạn ở trong môi trường làm việc ... bạn có thể ghép Samba với Active Directory với các công cụ như Likewise-Open. Tôi có một thiết lập máy chủ / trang web để những người trong cửa hàng CNTT có thể đăng nhập vào một trong hai phía của máy chủ (linux hoặc trang web) thông qua thông tin đăng nhập AD của họ.

Tôi cũng đề nghị xem xét một cái gì đó như Mercurial. Tạo một kho lưu trữ trên máy chủ và đồng bộ hóa với các cửa sổ thông qua một cái gì đó như TortiseHG. Tôi giả sử nó giống như rsync, nhưng bạn sẽ có phiên bản, sao lưu, khả năng phân phối, v.v (SVN, Mercurial, Git, v.v.



-2

Bạn có theo đuổi thứ này không

rsync -az --rsh "ssh" --rsync-path "sudo rsync" ~/website ubuntu@REMOTE-IP:/var/www

1
Đăng nhập như root có vẻ như quá mức nghiêm trọng.
Kees Cook
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.