Назад | Перейти на главную страницу

В разрешении SFTP отказано, но SSH работает нормально

Я продолжаю получать Доступ запрещен ошибки при попытке загрузить изменения в файл через 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 который также имеет тот же шаблон разрешений, что и остальная часть проекта:

Теперь я попробую загрузить (или изменить) файл с помощью 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:

  1. Откройте клиент FileZilla.
  2. В верхней части главного экрана нажмите «Изменить» и выберите «Настройки».
  3. В левой части меню разверните раздел «Подключение» и выделите SFTP.
  4. Нажмите кнопку [Добавить ключевой файл ...], просмотрите каталоги вашего локального компьютера и выберите файл закрытого ключа.
  5. Затем снова в верхней части главного экрана FileZilla нажмите «Файл» и выберите «Менеджер сайта».
  6. Наконец, в левой части диспетчера сайтов нажмите кнопку «Новый сайт» и введите уникальное имя в разделе «Мои сайты», которое позволит вам легко идентифицировать этот конкретный удаленный сервер в будущем.
  7. Теперь на вкладке «Общие» заполните поля «Хост» (с IP-адресом или FQDN) и «Порт» (по умолчанию - 22).
  8. В раскрывающемся меню Протокол выберите SFTP - протокол передачи файлов SSH.

Интересно, используете ли вы selinux, и это может иметь какое-либо отношение к вашей проблеме. Что показывает getenforce или sestatus, если что? Если вы используете принудительное исполнение, что произойдет, если вы переключитесь на разрешающий режим?

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

Наконец, вы можете обнаружить, что chroot не играет в мяч. Без chroot работает?

Удачи, мистер Уиллмотт.