Я продолжаю получать Доступ запрещен ошибки при попытке загрузить изменения в файл через SFTP, однако он отлично работает при использовании SSH напрямую от имени того же пользователя.
Я пытаюсь загрузить файл /srv/www/website/current/app/AppKernel.php
(однако в настоящее время ошибка применяется к любому файлу в моем проекте, для простоты мы будем придерживаться одного файла).
Моим первым портом захода было подключение по SSH к серверу КАК ТО ЖЕ ПОЛЬЗОВАТЕЛЬ и подтверждение, что разрешения работают.
После SSHing проверяю, кто я
$ whoami
cp5w
An ls -l
показывает следующие разрешения (вырезано в соответствующей строке)
$ ls -l
-rwxrwxr-x 1 deploy nginx 1523 Nov 11 12:51 AppKernel.php
Здесь вы можете увидеть, что владельцем файла является deploy
и группа nginx
. Я могу подтвердить пользователя cp5w
находится в группе nginx
:
$ groups
opsworks nginx
Так что теоретически я должен иметь возможность писать на AppKernel.php
да? Попробуем это:
$ tail -n 3 AppKernel.php
$loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
}
}
$ echo "# add line to end of file" >> AppKernel.php
$ tail -n 3 AppKernel.php
}
}
# add line to end of file
Да, это прекрасно работает. Ошибок нет. Я не сойду с ума.
Некоторые возможные решения предлагают проверка наличия исполняемого файла группы в родительском каталоге который я дважды проверил следующим образом (снова перешел к соответствующей строке):
$ ls -l ..
drwxrwxr-x 6 deploy nginx 4096 Nov 11 15:31 app
Я также проверил проблемы с системными каталогами однако я уже работаю над дочерним каталогом website
который также имеет тот же шаблон разрешений, что и остальная часть проекта:
deploy
nginx
Теперь я попробую загрузить (или изменить) файл с помощью SFTP со своей рабочей станции. Тот же пользователь. Тот же ключ SSH. Та же рабочая станция. Тот же сервер. Ориентация на тот же файл. Теперь просто SFTP, а не SSH.
psftp> open myserver
login as: cp5w
psftp> cd /srv/www/website/current/app
Remote directory is now /srv/www/website/releases/20151111145342/app
psftp> lcd C:\Users\chris\Source\website\app
New local directory is C:\Users\chris\Source\website\app
psftp> put AppKernel.php
/srv/www/website/releases/20151111145342/app/AppKernel.php: open for write: permission denied
Что дает?!!
Еще немного пищи для размышлений:
ДЕЛАТЬ:
РЕДАКТИРОВАТЬ
Я проверил журналы SSH, чтобы увидеть, можно ли добавить что-нибудь значимое, и это результат, вызванный попыткой загрузки (некоторые данные были скрыты заполнителями%):
$ tail -f /var/log/secure
Nov 11 17:46:58 %server% sshd[22455]: Accepted publickey for cp5w from %ip% port %port% ssh2: RSA %fingerprint%
Nov 11 17:46:58 %server% sshd[22455]: pam_unix(sshd:session): session opened for user cp5w by (uid=0)
Nov 11 17:46:58 %server% sshd[22455]: pam_unix(sshd:session): session closed for user cp5w
Я также включил журналы SFTP, изменив свой sshd_config и добавив -l INFO
следующим образом:
Subsystem sftp internal-sftp -l INFO
Подписан /var/log/messages
со следующим:
$ tail -f /var/log/messages
Nov 11 18:06:57 %server% internal-sftp[23002]: session opened for local user cp5w from [%ip%]
Nov 11 18:06:57 %server% internal-sftp[23002]: opendir "/srv/www/."
Nov 11 18:06:57 %server% internal-sftp[23002]: closedir "/srv/www/."
Nov 11 18:06:57 %server% internal-sftp[23002]: open "/srv/www/website/current/app/AppKernel.php" flags WRITE,CREATE,TRUNCATE mode 0666
Nov 11 18:06:57 %server% internal-sftp[23002]: sent status Permission denied
Nov 11 18:06:57 %server% internal-sftp[23002]: session closed for local user cp5w from [%ip%]
Основная проблема заключается в том, что вашему серверу SFTP требуется аутентификация ключа SSH для правильного разрешения соединений. Вы упомянули FileZilla, поэтому я написал этот ответ как таковой.
В случае, если вы можете использовать это для незащищенных паролем ключей SSH:
Интересно, используете ли вы selinux, и это может иметь какое-либо отношение к вашей проблеме. Что показывает getenforce или sestatus, если что? Если вы используете принудительное исполнение, что произойдет, если вы переключитесь на разрешающий режим?
Если нет, можете ли вы проверить и доказать, какую учетную запись пользователя sftp использует для записи файлов от вашего имени? В принципе, это должно быть cp5w, но так ли это на самом деле?
Наконец, вы можете обнаружить, что chroot не играет в мяч. Без chroot работает?
Удачи, мистер Уиллмотт.