#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, напишите сценарий оболочки. Возможно, будет полезно получить более подробную информацию о том, для чего будет использоваться этот скрипт и кто предоставляет и поддерживает ваш хостинг.