Вопрос или проблема
Я пытаюсь перенести данные своего веб-сайта на новый сервер и всё время получаю эту ошибку. Я настроил доступ по открытому ключу и смог завершить rsync с .txt файлом, затем я хотел попробовать директорию, и это не работает. Это мой первый опыт использования rsync, так что, пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Редактирование: оба сервера удалённые, старый — Ubuntu 14.04.4, а новый — Ubuntu 18.04.3.
У меня есть права sudo на каждом из них, но, вероятно, я не владею директорией, которую пытаюсь переместить. Я не знаю, как это выяснить.
$ rsync -rt /var/www [email protected]:/home
rsync: recv_generator: создание каталога "/home/www" не удалось: Отказано в доступе (13)
*** Пропуск любого содержимого из этого неудавшегося каталога ***
rsync: readlink_stat("/var/www/vhosts/testing.site.org/wp-config.php") не удалось: Отказано в доступе (13)
rsync: readlink_stat("/var/www/vhosts/testing.site.org/wp-mail.php") не удалось: Отказано в доступе (13)
rsync: readlink_stat("/var/www/vhosts/testing.site.org/wordpress") не удалось: Отказано в доступе (13)
rsync: readlink_stat("/var/www/vhosts/testing.site.org/wp-signup.php") не удалось: Отказано в доступе (13)
rsync: readlink_stat("/var/www/vhosts/testing.site.org/wp-trackback.php") не удалось: Отказано в доступе (13)
rsync error: некоторые файлы/атрибуты не были переданы (см. предыдущие ошибки) (код 23) в main.c(1183) [sender=3.1.0]
Эта часть здесь:
rsync: recv_generator: создание каталога "/home/www" не удалось: Отказано в доступе (13)
похоже, говорит, что пользователь kiana
не имеет достаточных прав на папку /home
на удалённом сервере для того, чтобы записать в неё.
Как проверить права на папку
Выполнение ls -l | grep home
из /
на удалённом сервере должно показать, кто владеет папкой и какие права доступа у неё есть. Стандарт для папки home
— это что root:root
владеет ею с правами 755
на папку (узнайте больше о правах на папки и файлы здесь)
$ ls -l | grep home
drwxr-xr-x 3 root root 4096 21 мар 14.24 home
Этот вывод говорит о том, что пользователь root
с группой root
владеет папкой (d) home
и имеет полные права (rwx), в то время как другие члены группы root
, а также остальные имеют права на чтение/выполнение (r-x), но не запись.
Пользователь, имеющий права sudo
, означает, что указанный пользователь может временно иметь привилегии root после аутентификации, что не совсем правдоподобно с rsync
.
Заключение
Поскольку вы не являетесь фактическим пользователем root
, выполняющим rsync
(что по соображениям безопасности делать не рекомендуется), вы не имеете прав на запись в папку /home
. Я бы предложил попробовать сохранить данные веб-сервера в другом месте, где пользователь kiana
может записать (например, /tmp/
, /opt/
и т.д.).
Ещё одно решение — добавить --rsync-path="sudo rsync"
в локальную команду rsync. Затем вашей следующей проблемой будет то, что вы не можете вводить команды на удалённом сервере (нет tty, нет интерактивного приглашения). По крайней мере, одно решение для этого — временно установить NOPASSWD:
(небезопасно: нет пароля для sudo!) в строке sudoers для вашего пользователя. Как только команда rsync запустится, вы можете удалить небезопасную конфигурацию.
Сначала кто-то должен войти на ваш сервер, чтобы злоупотребить временной небезопасностью sudo
. Но взвесьте все за и против.
Права доступа к директории /home обычно могут изменяться только root.
Например, выполнение ls на моей машине показывает root/root:
$ ls -laF /home
total 12
drwxr-xr-x 3 root root 4096 Aug 20 2018 ./
drwxr-xr-x 24 root root 4096 Sep 3 09:00 ../
Ваше лучшее решение — создать папку в /home, подключившись по ssh к этой машине и выполнив:
#Обратите внимание на sudo, иначе вам придётся su к root
sudo mkdir /home/www
#Затем измените владельца, чтобы пользователь kiana мог записывать в неё:
sudo chown kiana:kiana /home/www
Ответ или решение
Ошибки при использовании rsync: "Permission denied (13)"
При попытке миграции данных вашего веб-сайта на новом сервере вы столкнулись с ошибкой "Permission denied (13)", что указывает на проблему с правами доступа. Этот вопрос может быть довольно запутанным для начинающего пользователя, особенно когда вы работаете с удаленными серверами и использованием команды rsync.
Причины возникновения ошибки
На основании вашего описания видно, что вы успешно использовали rsync для передачи текстового файла, но столкнулись с проблемами при попытке скопировать целую директорию. Ошибка rsync: recv_generator: mkdir "/home/www" failed: Permission denied (13)
говорит о том, что пользователю kiana
, от имени которого выполняется команда rsync, не хватает прав на запись в директорию /home
на новом сервере.
Проверка прав доступа к директориям
Чтобы определить, какие права доступа установлены на каталоге /home
, выполните следующую команду на новом сервере:
ls -l / | grep home
Типичный вывод для данной команды может выглядеть следующим образом:
drwxr-xr-x 3 root root 4096 21 мар 14.24 home
Этот вывод показывает, что владелец каталога — root
, и права доступа к директории /home
установлены на 755
. Это означает, что только владелец (пользователь root
) имеет право на запись в эту директорию, в то время как другие пользователи имеют права только на чтение и выполнение.
Решение проблемы
-
Изменение директории назначения: Существует несколько способов избежать данной ошибки. Один из самых простых способов — использовать другую директорию, на которую у вас есть права записи. Например, вы можете использовать
/tmp
или/opt
, если они доступны для записи пользователюkiana
. -
Создание директории через SSH: Если вам необходимо создать подкаталог в
/home
, выполните следующие команды после входа на новый сервер:
sudo mkdir /home/www
sudo chown kiana:kiana /home/www
Это создаст директорию www
и предоставит все необходимые права пользователю kiana
.
- Использование sudo в rsync: Альтернативным подходом является добавление флага
--rsync-path="sudo rsync"
к вашей команде rsync, чтобы выполнять эту команду с правами суперпользователя. Будьте осторожны, поскольку это может потребовать временного изменения настроек sudoers, добавивNOPASSWD:
для вашего пользователя, что потенциально может представлять угрозу безопасности.
Заключение
Ошибка Permission denied (13)
при использовании rsync — это распространенная и разрешимая проблема, связанная с правами доступа на удаленном сервере. Рекомендуется тщательно следить за правами доступа и использовать безопасные практики при работе с sudo и rsync. Если у вас есть дополнительные вопросы или вам нужна помощь, не стесняйтесь обращаться за помощью к сообществу или опытным администраторам.