我应该将我的/ var / www目录符号链接到我的家吗?


20

我刚刚用LAMP安装程序安装了Ubuntu Server 10.04。我想在那里托管一个网站,但是我不确定哪种是在服务器上获取/编辑文件的最佳方法。谷歌搜索提供了很多选择,但我不确定哪个最好?

除非有更好的选择,否则我想在另一台PC(Windows或Linux)上创建页面,并使用SFTP将更改同步到服务器-但是我要在〜/或更改权限中对符号链接的文件夹执行此操作吗?在/ var / www /文件夹中?


Answers:


21

每种设置都不同。对我来说,我在一个服务器上有很多用户,每个服务器都托管网站,对您来说,您可能不需要在系统上创建多个用户。但是,如果您在此服务器上管理多个网站,则此设置将帮助您以比标准LAMP设置更简单的方式来管理,配置和调试每个域。为了做到这一点,我利用Apache的几种设备来解决权限错误。

首先,这是我使用的文档结构:

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

每个用户都有一个带有域文件夹的帐户(我添加了该帐户,/etc/skel因此每次都会创建它。每个域在domains带有html文件夹的文件夹中都有其自己的文件夹(我有这样的理由,主要是因为域可以在外部具有Web文件(公共领域)),您可以根据自己的需要随意修改此结构,只需记住在本文中进行这些更改即可。

其次,我托管了许多PHP网站,因此我在配置中使用suPHP。默认情况下,标准存档程序包未启用正确的编译标志,从而导致suPHP版本的安全性较低。我已经制作了自己的suPHP软件包,可以在服务器上使用,下面是安装说明。suPHP允许您定义应以何种方式执行用户PHP脚本(其中包括:每个站点的自定义php.ini等)。我还为Apache启用suExec-进一步消除了对www数据用户(我鄙视的用户)拥有任何所有权的需求。

首先,确保您已在服务器上安装了Apache和所有其他服务。确保它们至少正常工作。之后,我建议安装suphp-common和必需的libapache2-mod-suphp模块(更多信息:什么是PPA,以及如何使用它们?)。然后,在完成这些安装后,使用以下命令激活suPHP和suexec:a2enmod

sudo a2enmod suphp
sudo a2enmod suexec
sudo a2dismod php5

sudo /etc/init.d/apache restart

接下来是配置文件。我制作了各种工具,每次添加新站点时都会自动生成配置文件。但是,这是我使用的基本模板:

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

这将为该域,文档根目录以及该域运行的所有其他基本必需品设置日志。我将这些文件放置在/etc/apache2/sites-available/通常命名的文件中,[USER]-[DOMAIN]并启用/禁用它们,a2ensite如下所示:

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

每次修改配置文件后,都需要重新加载Apache

sudo /etc/init.d/apache reload

我认为,虽然设置的灵活性似乎很多,但远远超过了设置时间。尽管您只需要一个用户Web服务器,但是将来如果您想要一个用户Web服务器以外的任何其他东西,您将需要执行进一步的操作(或者只是一起放弃安全性)。


每种设置的+1都不相同,并且每个网站使用单独的用户帐户
Lekensteyn 2011年

1
这对于多用户LAMP系统非常有用,但问题是关于单用户LAMP系统,在这种情况下,此答案过于苛刻。:)
Kees Cook

@Kees遵循相同的原则-只是您不必增加更多用户。这样,您就不必担心用户或权限问题-如果单个用户具有多个域,则此设置将解决此问题。
Marco Ceppi

Marco,您可以在获得第二个用户的那个时间点实施此方法。但是,第一个应该简单得多,除非可以肯定会更多。
SpamapS 2011年

+1-这是最安全,最明智的配置。
内森·奥斯曼

11

Sftp很容易安装。只需安装该软件包openssh-server,您将拥有sftp。如果可以从互联网上获得密码,请确保您的用户密码正确。(8个以上的字符,而不是词典中的单词,带有符号和数字)。

为了获得权限,我通常会这样做。
sudo adduser <username> www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rw /var/www
然后,您应该能够通过使用sftp连接(使用您的用户名和密码)来发布页面,然后转到/ var / www文件夹并将文件放置在此处。


1
一种更安全的方法是基于密钥的身份验证(当然要保护私钥密码)
Lekensteyn 2011年

@Lekensteyn我考虑过建议,但我试图使其保持简单。如果Craig T 要设置更安全的基于密钥的身份验证,则可以查看help.ubuntu.com/community/SSH/OpenSSH/Keyshelp.ubuntu.com/community/SSH/OpenSSH/…
阿岑代尔(Azendale)2011年

2
这是在不破坏文件权限的情况下将文件放入单实例Web服务器上正确位置的最简单方法。:)另外,可以使用rsync代替sftp。两者都在后台使用SSH(我建议使用ssh密钥而不是密码,但有人已经提到过)。
Kees Cook

1
+1,同意Kees,这非常简单,可以解决上述问题。对于具有40多个节点的生产集群,我几乎使用了完全相同的设置,仅将访问限制为SSH密钥。
SpamapS 2011年

1

我使用webdav。在Ubuntu Server上安装非常容易。如果您安装了apache,您就快完成了。只是sudo a2enmod dav; service apache2 restart。您需要对虚拟站点进行一些配置。这是我在生产中使用的示例:

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

您可以将其放在/ srv / etc / apache2 / sites-available / mysite中,然后执行sudo a2ensite mysite; sudo service apache2 reload

这里发生的是您已经创建了两个虚拟站点。一个是www.mysite.com,另一个是webdav.mysite.com。重要的是,已在webdav.mysite.com上禁用了PHP。

现在,您可以在Ubuntu,Windows和MacOS上通过http访问您的站点。这三个都内置了webdav支持。以下是在Ubuntu中添加webdav网络位置的说明


为什么这样好?因为您可以从任何操作系统访问站点,而无需任何其他软件(sftp在Ubuntu中有效,在其他OS中需要单独的程序)。同样,对于像wordpress这样的网站,权限已经是正确的,因为apache可以同时处理这两个方面。而且,如果您需要安全性,也可以使用标准的https。(如果您在同一IP上有多个站点,则可以使用不同的端口)
newz2000 2011年

顺便说一句,以上说明假定您已为您的网站创建了一个地方:mkdir -p /srv/mysite/www; chown -R www-data.www-data /srv/mysite
newz2000 2011年

1
不确定DAV是否经过加密(除非您的Web服务器也运行SSL),因此通常我建议通过DAV进行SFTP或rsync。
Kees Cook

0

我将向/ var / www授予www数据的写权限,并将您的用户添加到该组。这样,很容易控制哪些用户可以写入该目录。

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

-1

您是否在为您的网站使用任何框架?Drupal,Wordpress等?例如,Drupal具有通过浏览器交互上传的工具。

你看过桑巴舞了吗?您可以设置Samba共享(网络上有大量的资源可供使用),只需使用Windows资源管理器即可打开/编辑/保存/删除。设置要共享的/ var / www,然后将“网络驱动器”映射到Windows。

这是工作环境还是家庭环境?听起来像家,但是如果您处于工作环境中,则可以将Samba与Active Directory搭配使用类似打开的工具。我有一个服务器/网站设置,以便IT商店中的用户可以通过其AD凭据登录到服务器的任一端(Linux或网站)。

我还建议您研究类似Mercurial的产品。在服务器上创建一个存储库,并通过TortiseHG之类的工具与Windows同步。我认为它就像rsync,但是您将拥有版本控制,备份,分发等功能(SVN,Mercurial,Git等所有选项)



-2

你在追求这样的东西吗

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

1
以root用户身份登录似乎严重过头了。
Kees Cook
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.