Знакомство с ошибками "Permission Denied" (Отказано в доступе) в SFTP и их диагностика
На этом шаге мы подключимся к нашему SFTP-серверу и на собственном опыте столкнемся с ошибками "Permission denied" (Отказано в доступе). Это поможет нам понять, как настройки разрешений влияют на операции SFTP.
Подключение к SFTP-серверу локально
Поскольку мы работаем в локальной среде, мы можем подключиться к нашему SFTP-серверу, используя адрес localhost. Давайте подключимся, используя sftpuser, которого мы создали ранее:
sftp sftpuser@localhost
При появлении запроса на ввод пароля введите пароль, который вы установили для учетной записи sftpuser (например, password123). Если подключение успешно, вы увидите приглашение, подобное следующему:
Connected to localhost.
sftp>
Если у вас возникнут проблемы с подключением, это может быть связано с тем, что служба SSH работает некорректно в контейнере. Вы можете попробовать выйти с помощью exit и продолжить следующие шаги, используя теоретические примеры.
Основные команды SFTP
Давайте рассмотрим некоторые основные команды SFTP:
- Просмотр текущего каталога на удаленном сервере:
sftp> pwd
Remote working directory: /home/sftpuser
- Вывод списка файлов в текущем каталоге:
sftp> ls
- Переход в другой каталог:
sftp> cd /tmp
sftp> pwd
Remote working directory: /tmp
- Возврат в ваш домашний каталог:
sftp> cd
sftp> pwd
Remote working directory: /home/sftpuser
Попытка доступа к файлам с разными разрешениями
Теперь давайте попробуем получить доступ к нашим тестовым файлам из сеанса SFTP:
- Попытайтесь получить файл из нашего каталога project:
sftp> get /home/labex/project/testfile.txt
Fetching /home/labex/project/testfile.txt to testfile.txt
Permission denied
Вы заметите ошибку "Permission denied" (Отказано в доступе). Это связано с тем, что у sftpuser нет разрешения на доступ к файлам в домашнем каталоге пользователя labex.
Выход из сеанса SFTP
Давайте выйдем из сеанса SFTP, чтобы продолжить:
sftp> exit
Понимание ошибок "Permission Denied" (Отказано в доступе)
Существует несколько распространенных причин для ошибок "Permission denied" (Отказано в доступе) в SFTP:
- File Permissions (Разрешения на файлы): У пользователя нет доступа на чтение/запись к файлу
- Directory Permissions (Разрешения на каталоги): Пользователь не может получить доступ к каталогу, содержащему файл
- Ownership Issues (Проблемы с владельцем): Файл/каталог принадлежит другому пользователю или группе
- Path Traversal Restrictions (Ограничения на обход пути): Конфигурация SFTP может ограничивать пользователей определенными каталогами
Давайте сделаем один из наших тестовых файлов доступным для нашего пользователя SFTP:
## Create a directory that can be accessed by others
mkdir -p /tmp/shared
echo "This is a shared file for SFTP testing" > /tmp/shared/shared_file.txt
chmod 777 /tmp/shared
chmod 666 /tmp/shared/shared_file.txt
Теперь переподключитесь к SFTP и попробуйте получить доступ к этому файлу:
sftp sftpuser@localhost
После подключения попробуйте:
sftp> get /tmp/shared/shared_file.txt
Fetching /tmp/shared/shared_file.txt to shared_file.txt
/tmp/shared/shared_file.txt 100% 36 1.0KB/s 00:00
Это должно сработать, потому что мы предоставили всем разрешения на чтение/запись как для каталога, так и для файла.
Выйдите из сеанса SFTP снова:
sftp> exit
Использование SFTP в режиме отладки
Чтобы получить больше информации об ошибках разрешений, вы можете использовать SFTP в режиме отладки:
sftp -v sftpuser@localhost
Подробный вывод покажет вам подробную информацию о подключении и любых возникающих ошибках:
debug1: Sending subsystem: sftp
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 2412, received 2876 bytes, in 0.1 seconds
Bytes per second: sent 30074.7, received 35857.2
debug1: Exit status 0