現在、非常に制限された FTP クライアント/アダプターを使用して、リモート サーバーにファイルをアップロードしています。制限されていると言うのは、結果として得られるファイルは、権限 000 でリモート サーバー上にアップロードされ、他のクライアントとは異なり、権限を設定する方法がないように思われるからです (WinSCP ではこれができることは知っています)。
同僚から、FTP はファイル権限に関してまったく無知で、単にファイル データを転送するだけだと聞きました。これが正しいと仮定すると、WinSCP などのクライアントはリモート サーバー上のファイルの権限をどのように設定するのでしょうか。クライアントは SSH 経由で chmod を実行し、事後に権限を設定している可能性が高いと示唆されました。
答え1
あなたの同僚は正しい。1985年10月のRFC959 の翻訳権限変更に特化したコマンドは提供されていないようです。RFC 959 では、ファイルをアップロードするためのコマンドの仕様が提供されています (RFC 959 ページ 30FTP には、ファイルを保存する「STOR」コマンドがあります)、ファイルをダウンロードする (30 ページにファイルを取得する「RETR」コマンドがあります)、および MKD (ディレクトリの作成) や RMD (ディレクトリの削除) などのオプションの拡張機能があります。RFC には、「アクセス制御を呼び出すのは、サーバー FTP プロセスの特権です」と記載されています。(ただし、RFC を読んだところ、ここで言及されている「アクセス制御」は、ユーザー名でログインする機能をサポートすることに関するものであり、FTP を使用してファイルのアクセス許可を変更するという考えを指すものではないと思います。)
RFC 959 ページ 47RFC 959のFTP仕様に組み込まれているコマンドのリストが含まれています。しばらくの間、特定のプラットフォーム用のFTPサーバーを作成したいと考えており、それらのコマンドをそれぞれ読みました。また、IANA「FTP コマンドと拡張機能」レジストリ2010年3月のRFC 5797. 権限を変更する方法を提供しているコマンドは、1 つを除いて、どれも覚えていません。
RFC 959 ページ 33には「SITE」コマンドがあります。(一部の FTP クライアントには「QUOT」または「quote」というローカル コマンドがあり、これは FTP サーバーに SITE コマンドを送信します。) 基本的に、SITE コマンドの標準では、テキストが FTP サーバーに送信され、FTP サーバーがそれに対して何を行うかを決定します。このコマンドを使用すると、ファイルのアクセス許可を変更したり、サイト内のファイルを検索したり、FTP サーバーを再起動したりできます。理論上は、「HELP SITE」コマンドを送信すると、site コマンドを通じて提供される機能の詳細が表示されます。RFC 959 の 33 ページには、次のようにも指定されています。
「これらのサービスの性質とその構文の仕様は 、HELP SITE コマンド
への応答で指定できます。」
この理論に対する疑問は、「HELP SITE」コマンドを実行すると、実際には FTP サーバーからのテキストが表示されることであり、不完全なドキュメントでは、利用可能なすべての可能性が実際に文書化されていない可能性があるということです。
に基づくJonathan Leffler による knoti99 の「FTP の chmod 構文」に関する質問への回答から、古典的な「ncftp」プログラムは「SITE CHMOD」コマンドを使用して ncftp の「chmod」コマンドを実装しており、この機能はすべての FTP サーバーでサポートされているわけではないことがわかります。
この回答の FTP 部分を完成させるにあたって、もう 1 つ補足しておきます。FTP は非常にスニッフィングしやすいものです。基本的に、FTP は「クリア テキスト」を使用してアクションを実行するという意味です。tcpdump や Wireshark などの「パケット スニッフィング」(「パケット キャプチャ」) ソフトウェアを使用すると、FTP で何が起きるかを確認できます。小さなテキスト ファイルの転送を試みて、ネットワーク トラフィックがどうなっているかを確認すれば、結果はおそらくかなり簡単に理解できるでしょう。このようなアプローチを使用すると、権限を変更して、ソフトウェアが実際に使用しているコマンドを確認できます。設定に少し時間がかかるかもしれないことは承知しています。そのため、この回答では、入手しやすい詳細を多数提供しましたが、このプロセスについて知っておくと、FTP 通信中に何が起きているかについて他の詳細を知りたいときに役立つ可能性があります。
(質問の別の部分への回答を追加するために、この回答を編集しました。)
クライアントが SSH 経由で chmod を実行している可能性が高い、つまり事後に権限を設定しているのではないかという指摘がありました。
これは良い推測だと思いますが、FTP に関しては正確ではないと思います。実際、この推測は、SFTP および SCP プロトコルが使用されるときに常に使用される正確なプロセスを正確に説明している可能性があります。これらのプロトコルは両方とも SSH に基づいているため、「chmod」コマンドは、暗号化された接続の残りの部分として使用されるのと同じ SSH 接続を使用して送信される可能性があります。これらのプロトコルを読んで、これが実際に SFTP (およびファイル権限の設定もサポートしている場合は SCP) を使用するときにファイル権限が通常設定される方法であると私は確信しています。
ただし、先ほど説明したように、FTP プロトコルでこれが通常処理される方法は、まったく異なります。プレーンテキストである FTP プロトコルを使用している場合、SSH を使用してフォローアップすることは技術的には可能ですが、可能性は低いです。(ソフトウェアが SSH をサポートできる場合は、通常、SFTP または SCP またはその両方もサポートします。その結果、古い FTP プロトコルのサポートは、暗号化された通信の複雑さがプロセスの一部として使用されないように設計されているのが一般的です。)