В настоящее время мне приходится использовать очень ограниченный FTP-клиент/адаптер для загрузки некоторых файлов на удаленный сервер. Я говорю ограниченный, потому что полученные файлы оказываются на удаленном сервере с разрешениями 000, и, похоже, нет возможности настроить, какими должны быть разрешения, в отличие от некоторых других клиентов. (Я знаю, что WinSCP может это сделать.)
Мне коллега сказал, что FTP полностью агностичен в отношении разрешений файлов и просто передает данные файла. Если это верно, то как клиент, такой как WinSCP, устанавливает разрешения файла на удаленном сервере? Мне было высказано предположение, что клиент, скорее всего, выполняет chmod через SSH, то есть устанавливает разрешения постфактум.
решение1
Ваш коллега прав в том смысле, что в октябре 1985 годаRFC959похоже, не предоставляет команду, специально предназначенную для изменения разрешений. RFC 959 предоставляет спецификации команд для загрузки файлов (RFC 959 страница 30имеет команду «STOR» для сохранения файлов), загрузку файлов (на странице 30 есть команда «RETR» для извлечения файлов) и необязательные расширения, такие как MKD (создание каталога) и RMD (удаление каталога). В RFC отмечается: «Вызов «контроля доступа» является прерогативой процесса FTP-сервера». (Однако, прочитав RFC, я считаю, что «контроль доступа», о котором идет речь, больше касается поддержки возможности входа с использованием имени пользователя, а не подразумевает идею использования FTP для изменения разрешений файлов.)
RFC 959 страница 47содержит список команд, встроенных в спецификацию FTP RFC 959. Некоторое время я размышлял о создании FTP-сервера для определенной платформы, и я прочитал каждую из этих команд. Я также просмотрелРеестр IANA «Команды и расширения FTP», на который ссылаются в марте 2010 годаRFC5797. Я не припомню ни одной из этих команд, которая позволяла бы изменять разрешения, за исключением одной:
RFC 959 страница 33имеет команду «SITE». (Некоторые FTP-клиенты имеют локальную команду под названием «QUOT» или «quote», которая в конечном итоге отправляет команду SITE на FTP-сервер.) По сути, стандарт команды SITE заключается в том, что текст отправляется на FTP-сервер, а FTP-сервер решает, что с ним делать. Использование этой команды может выполнять такие действия, как изменение прав доступа к файлам, поиск файлов на сайте или перезагрузка FTP-сервера. Теоретически отправка команды «HELP SITE» покажет подробности некоторых функций, предоставляемых через команду site. RFC 959 на странице 33 даже указывает на это:
«Характер этих служб и
спецификация их синтаксиса могут быть указаны в ответе на
команду HELP SITE».
Проблема этой теории заключается лишь в том, что команда «HELP SITE» фактически приводит к отображению текста с FTP-сервера, а неполная документация может фактически не отражать все доступные возможности.
На основеОтвет Джонатана Леффлера на вопрос knoti99 о «синтаксисе chmod в FTP», мы видим, что классическая программа «ncftp» использовала команду «SITE CHMOD» для реализации команды ncftp «chmod», и что эта функция поддерживалась не всеми FTP-серверами.
Еще одно замечание по ходу того, как я завершаю часть FTP этого ответа: FTP очень легко прослушивается. По сути, я имею в виду, что FTP выполняет действия с использованием «открытого текста». Если вы используете программное обеспечение для «анализа пакетов» («перехвата пакетов»), например tcpdump или Wireshark, вы можете увидеть, что происходит с FTP. Если вы попробуете передать файл, который является небольшим текстовым файлом, и посмотрите, какой сетевой трафик происходит, результаты, скорее всего, будут довольно простыми для понимания. Используя такой подход, вы можете изменить разрешения и увидеть, какие команды на самом деле использует программное обеспечение. Я знаю, что это может занять немного больше времени для настройки, поэтому этот ответ предоставил много более простых для получения подробностей, но знание этого процесса может быть полезным, если вы начнете задаваться вопросом о других подробностях того, что происходит во время FTP-сообщений.
(Я отредактировал этот ответ, чтобы добавить ответ на другую часть вопроса.)
Мне предположили, что клиент, скорее всего, выполняет chmod через SSH, т.е. устанавливает разрешения постфактум.
Я думаю, что это хорошая догадка, хотя я не думаю, что это точно, когда дело касается FTP. На самом деле, эта догадка, вероятно, точно описывает точный процесс, который используется всякий раз, когда используются протоколы SFTP и SCP. Поскольку оба эти протокола основаны на SSH, команда "chmod" может быть отправлена с использованием того же соединения SSH, которое используется в качестве остальной части зашифрованного соединения. Из моего прочтения этих протоколов я действительно считаю, что на самом деле именно так обычно устанавливаются разрешения файлов при использовании SFTP (и SCP, если он также поддерживает установку разрешений файлов).
Однако то, как это обычно делается с протоколом FTP, — это совсем другая история, как я только что описал ранее. Если вы используете протокол FTP, который является открытым текстом, то технически возможно, но маловероятно, что SSH будет использоваться для последующей работы. (Если программное обеспечение достаточно способно поддерживать SSH, то оно, как правило, также поддерживает SFTP или SCP, или оба. В результате поддержка старого протокола FTP обычно разрабатывается таким образом, чтобы сложность зашифрованных коммуникаций не использовалась как часть процесса.)