Проблема с резервным копированием SSH через PHP

#php #ssh #backup

#php #ssh #резервное копирование

Вопрос:

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

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

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

 <?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>";
?>
  

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

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

Спасибо

Ответ №1:

 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 не имеет на это разрешения.

Комментарии:

1. ls -l / | grep home возвращает, drwxr-xr-x 28 root root 4096 May 2 2010 home означает ли это, что мне нужно запустить usermod -a -G root www-data ?

2. @Джеймс, если ты никогда не попробуешь, ты никогда об этом не узнаешь: D.

3. Пробовал, и это не имело никакого значения! Я все еще вижу файлы только внутри некоторых папок!

4. Вы запускаете свой скрипт из браузера?

5. Да, к сожалению, у меня нет доступа по SSH, поэтому мне приходится запускать команды через PHP

Ответ №2:

Я думаю, что это проблема с разрешениями, попробуйте предоставить пользователю 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
  

Комментарии:

1.Я попробовал следующее и смог найти только файл apache2.conf в папке etc / . Это вернуло следующее: User www-data Group www-data

2. В вашем случае apaceh использует www-data в качестве пользователя и группы, попробуйте теперь предоставить пользователю www-data разрешение на чтение содержимого из / home/*

3. Извините, я не уверен, что вы имеете в виду под этим комментарием, я новичок в командах SSH и apache. Также я не понимаю, почему я могу загружать некоторые файлы, но не другие?

Ответ №3:

Я предполагаю, что PHP запущен в chroot.

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