2011-04-09 74 views
1

我想通过PHP使用一些SSH命令来备份我们的服务器上的所有文件,并且我有一个脚本在某种程度上工作。通过PHP问题的SSH备份

问题是,只有一些文件夹实际上包含任何文件,但文件夹结构似乎是正确的。

这是我使用的脚本:

<?php 
    $output = `cd/
    ls -al 
    tar -cf /home/b/a/backup/web/public_html/archive.tar home/*`; 

    echo "<pre>$output</pre>"; 
?> 

我不能甚至可以通过SSH命令查看文件,这方面的一个例子是测试帐户。如果我使用以下命令,我无法查看网站文件。

<?php 
    $output = `cd /home/t/e/test/ 
    ls -alRh`; 

    echo "<pre>$output</pre>"; 
?> 

但是,如果我在不同的帐户上使用相同的命令,我可以查看和下载网站文件。

这是一个权限问题还是我缺少我的脚本中的东西?

感谢

回答

0
ls -l/| grep home 

输出将是这样的:

lrwxr-xr-x 1 root wheel  8 Mar 30 14:13 home -> usr/home 

在我的情况,所有者是用户其主要组是,所以现在我们添加www-data user到wheel group所以他可以在那里列出文件:

usermod -a -G wheel www-data 

您可以下载一些文件,因为它们位于www-data用户所拥有的目录中,而当您不能时,www-data没有此权限。

+0

'ls -l/| grep home' returns'drwxr-xr-x 28 root root 4096 2010年5月2日home'这是否意味着我需要运行'usermod -a -G root www-data'? – 2011-04-10 13:31:06

+0

@詹姆斯,如果你永远不会尝试,你永远不会知道它:D。 – SIFE 2011-04-10 18:43:14

+0

尝试过,它没有任何区别!我仍然只能看到一些文件夹内的文件! – 2011-04-10 23:12:42

0

我觉得权限的问题,尽量给Apache用户(或者你设置的)权限读取/home/*目录的。 要查找使用Apache服务运行此用户名: 对于Linux:

egrep -iw --color=auto 'user|group' /etc/httpd/conf/httpd.conf 

对于FreeBSD:

egrep -iw --color=auto '^user|^group' /usr/local/etc/apache22/httpd.conf 
+0

我已经尝试了以下方法,只能在etc /文件夹中找到apache2.conf文件。这返回了以下内容:'用户www数据' '组万维网数据' – 2011-04-10 03:22:25

+0

在您的情况下,apaceh使用万维网用户和组,现在尝试给www-数据用户权限从/ home/* – SIFE 2011-04-10 09:01:16

+0

对不起,我不确定你的评论是什么意思,我对SSH和apache命令很陌生。另外我很困惑,为什么我可以下载一些文件而不是其他文件? – 2011-04-10 10:06:36

0

我的猜测是,PHP是运行于chroot环境。

如果您只是想执行备份,请考虑以不同的语言进行备份。特别是如果它只是一系列UNIX命令,请编写一个shell脚本。也许关于这个脚本将用于什么以及谁提供和维护你的托管的更多细节将会很有用。