Резервное копирование SSH через PHP - PullRequest
1 голос
/ 10 апреля 2011

Я пытаюсь сделать резервную копию всех файлов на нашем сервере, используя некоторые команды SSH через PHP, и у меня есть скрипт, работающий до некоторой степени.

Проблема в том, что только некоторые из папок на самом деле содержат какие-либо файлы, ноструктура папки кажется правильной.

Это скрипт, который я использую:

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

   echo "<pre>$output
";?>

Я не могу даже просмотреть файлы через SSHкомандами, примером этого является тестовая учетная запись. Если я использую следующую команду, я не могу просмотреть файлы веб-сайта.

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

   echo "<pre>$output
";?>

Но если я использую те же команды для другой учетной записи, я могу просматривать и загружать файлы веб-сайта.

Это проблема с разрешением или я пропустилчто-то в моем сценарии?

Спасибо

Ответы [ 3 ]

0 голосов
/ 10 апреля 2011

Я предполагаю, что PHP работает в chroot.

Если вы просто хотите выполнить резервное копирование, подумайте о том, чтобы сделать это на другом языке.Особенно, если это просто последовательность команд UNIX, пишите скрипт оболочки.Возможно, будут полезны более подробные сведения о том, для чего будет использоваться этот скрипт и кто предоставляет и поддерживает ваш хостинг.

0 голосов
/ 10 апреля 2011
ls -l / | grep home

вывод будет таким:

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

В моем случае владельцем является root , а пользователем root его основная группа - wheel , поэтому теперь мы добавляем www-data пользователь в группу wheel , чтобы он мог перечислять там файлы:

usermod -a -G wheel www-data

Вы можете загрузить некоторые файлы, потому что они находятся в каталоге, принадлежащем www-data пользователю, а когда вы не можете, www-data не имеет на это никакого разрешения.

0 голосов
/ 10 апреля 2011

Я думаю, что это проблема с правами доступа, попробуйте дать пользователю 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...