使用 SCP 从本地复制到根拥有的文件夹的权限“问题”

Dan*_*Dan 3 scp permissions file-copy

我正在早期尝试设置一个基本的 LAMP 盒。这是我第一次设置我将使用的软件,而不是仅仅提供一个工作环境,所以对我放轻松:)

我已经安装了Apache,对应的htdocs文件夹有drwxr-xr-x的权限。我可以很好地从远程复制到本地,但是在尝试复制小目录时,我的权限被拒绝。

我应该提到我正在使用我自己的管理员用户帐户登录,当然 htdocs 不归我所有。

所以我想,我天真地认为我只需要 sudo 命令 - 那没有用。好的,接下来我将根据我在网上阅读的内容“修复”774 的权限。不,那也不起作用。我在想“我需要为第三个“用户”添加写访问权限吗?这似乎很奇怪。

然后我读了一个论坛帖子,有人告诉他,因为文件夹是 root 所有,他必须将文件 scp 到远程主机上的 home/dir,然后 sudo cp 它们到 apache 文件夹。

对我来说似乎是一个冗长的方法,但在我尝试这样做之前,我想我会在这里问这是否属实,这里是否有任何最佳实践以及我的任何假设是否错误?

其次 - htdocs 的适当权限是什么?

我仍处于早期阶段,最终可能会设置一些 FTP 访问,但我很高兴知道。

War*_*ung 5

有很多方法可以给这只猫剥皮。以下是一些供您考虑:

  1. htdocs棵树几乎可以肯定不必归根所有。重要的是它可以被 Apache 用户读取。根据所讨论的* IX系统,这可能是上apachewww-data或别的东西。您在上面给出的默认文件模式,drwxr-xr-x(缩写为 755)适用于此。

    所以,问题是,谁应该拥有这棵树,它应该属于哪个组。这可能就足够了:

    $ sudo chown -R dan.apache /var/www
    
    Run Code Online (Sandbox Code Playgroud)

    这表示用户dan拥有/var/www及其下的所有内容(-R递归),并且该组apache也有一些权限。如果httpd作为 group 运行apache,它可能会获得足够的权限来读取树中的文件并更改其中的目录,这对于大多数站点来说已经足够了。

  2. 另一种方法是使用您拥有的任何权限,并简单地告诉scp模仿/var/www/树的所有者:

    mybox$ scp ~/site-mirror/index.html www@example.com:/var/www/htdocs
    
    Run Code Online (Sandbox Code Playgroud)

    这会将根index.html文件的本地副本复制到 上的适当位置example.com,并以用户身份登录www。您可以在此处使用您需要的任何用户名和主机名。您只需要能够以/var/www/树所有者的用户身份远程登录。如果您不能这样做,请考虑使用选项 #1,至少以允许您scp直接归档的方式进行设置。

    如果您为 SSH设置了预共享密钥,您甚至不必提供密码。

    而不是scp,我建议您rsync用于网站开发:

    mybox$ rsync -ave ssh --delete ~/site-mirror www@example.com:/var/www/htdocs
    
    Run Code Online (Sandbox Code Playgroud)

    这将~/site-mirroron mybox(您的本地工作机器)的内容镜像到/var/www/htdocson example.com,以用户身份登录www。使用rsyncraw的优点scp是您不必复制和重新复制未更改的文件。Rsync 算法计算更改并仅发送更改。