Ошибка "Permission denied (13) " при попытке отправить данные через rsync в директорию с правами доступа 777 при использовании не-root аккаунта

В данном вопросе как на локальном компьютере, так и на VPS установлены Ubuntu 20.04.

Пробую отправить файлы через rsync на VPS используя учётную запись (которая на VPS) root :

Starting rsync to [email protected]:/var/www/testapp.com...

Это небезопасно, но ради экспериментов безопасность на VPS пока настроена слабо и так будет до тех пор, пока всё не заработает при слабой безопасности. После ввода пароля для root отправка файлов происходит успешно.

Теперь пытаюсь отправить те же данные используя VPS-аккаунт с пониженными привилегиями non_root_admin. Собственно, в будущем именно этот аккаунт и будет использован, только нужно будет ещё запретить вход по паролю и перейти на аутентификацию через ассиметричное шифрование.

Starting rsync to [email protected]:/var/www/testapp.com...

После ввода пароля для non_root_admin лог такой:

16:46:38] gulp-rsync: rsync: mkstemp "/var/www/.testapp.com.Hzn8wK" failed: Permission denied (13) 

[16:46:38] gulp-rsync:  
[16:46:38] gulp-rsync:  

[16:46:38] gulp-rsync: sent 613 bytes  received 894 bytes  143.52 bytes/sec 

[16:46:38] gulp-rsync: total size is 90,232  speedup is 59.88 

[16:46:38] gulp-rsync:  
[16:46:38] gulp-rsync: rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1207) [sender=3.1.3] 

[16:46:38] gulp-rsync:  
[16:46:38] 'Deploy' errored after 9.84 s
[16:46:38] Error in plugin "gulp-rsync"
Message:
    Error: rsync exited with code 23
    at ChildProcess.<anonymous> (/home/me/testapp.com/node_modules/gulp-rsync/rsync.js:121:17)

Надеюсь, что это глупая ошибка новичка (в система прав доступа в UNIX-подобных ОС) и Вы сразу поняли, в чём дело. Привожу ход своих мыслей, дабы Вы смогли понять, какие моменты потребуется разъяснить.

  • rsync: mkstemp - пытается создать новую временную директорию, но что-то идёт не так.
  • Permission denied (13) скорее всего означает, что не хватает прав доступа. На это косвенно указывает и то, что с аккаунтом root всё работает нормально.
  • В UNIX-подобных ОС изначально никто, кроме root не имеет права делать никакие операции с файлами и директориями?
  • Хотя это и небезопасно, я временно установил директории testapp.com права доступа 777. Так и этого не достаточно?!
  • Получается, что даже у директории права доступа 777, то в ней нельзя создавать поддиректории?!

Ответы (1 шт):

Автор решения: Pavel Samsonov

Сообщение об ошибке говорит о том, что недостаточно прав на каталог /var/www чтобы создать в нем временные файлы. Права надо дать и на /var/www. Права лучше дать через группу.

groupadd sync

Добавляем в неё пользователя:

gpasswd -a username sync

Даём права на файлы:

chgrp sync /var/www
chmod g+rwx /var/www
chgrp sync /var/www/testapp.com
chmod g+rwx /var/www/testapp.com
→ Ссылка