web-dev-qa-db-ja.com

FTPユーザーはファイルを変更できませんが、正しい権限を持っています

新しいユーザー(foo)を作成しましたが、ftp経由でログインすると、アクセスできるディレクトリ内のファイルを編集できません。

彼がログインできるディレクトリでls -lは私に:

-rw-rw-r-- 1 root www-pub  6427 Nov 17 04:21 index.html

ユーザーはグループwww-pubに属しています。これは、彼が実際にそのグループに属していることを示すcat /etc/groupの出力です。

...
www-pub:x:1001:ftpuser,www-data,foo
foo:x:1002:

*含まれているディレクトリの権限を編集します。

drwxrwsr-x  5 root www-pub  4096 Nov 17 02:53 thecontainingdir

そしてその上のもの:

drwxrwsr-x 49 root www-pub  4096 Nov 16 02:40 thenextdirup

彼はftp経由でログインでき、編集する必要のあるファイルには、グループwww-pubにファイルの読み取りと書き込みを許可する正しい権限があり、彼はそのグループのメンバーであるため、なぜ編集できないのですか? (または何かをアップロード)?

ファイルを777に変更した場合にのみ、彼はそれを編集できます。それはまるで彼がグループにいないかのようです...しかし彼はそうです!どうしたの?

一言で言えば、vsftpdのv3.2.5はchroot()内の書き込み可能なルートでは機能しないため、ユーザーのルートフォルダーを書き込み不可にするか、新しいバージョンにアップグレードする(およびいくつかのconf設定を設定する)か、古いバージョンにダウングレードする必要がありますバージョン。

詳細

OK、問題はvsftpdバージョン2.3.5(私のサーバーで利用可能な最新のパッケージ)を使用していることに起因していました。このバージョンのvsftpdでは、ftpユーザーのホームディレクトリに書き込み権限がない必要があります。はい、あなたはそれを正しく読んでいます。したがって、私の場合、ユーザーがWebルートにFTPでアクセスして、編集を開始できるようにしたかったのです。それはできません。 Webルートの上に別のディレクトリを作成し、そのユーザーのホームディレクトリを作成して書き込み不可にすると、ユーザーはftpでアクセスし、Webルートに移動して、期待どおりに編集/アップロードできるようになりました。

私の場合、このソリューションは、いくつかの仮想ディレクトリでさまざまな深さで操作しているユーザーが多数いるため、うまくいきませんが、少なくとも機能します(そして、人々が混乱しないように書き換えを使用しています)。ここで、特定のユーザーを割り当てたいものの周りに「ラッパー」ディレクトリがあることを常に確認する必要があります。

私がオンラインで見つけた主な提案:

add `allow_writeable_chroot=YES` to your conf file

(これは機能しなかっただけでなく、デーモンの再起動に問題が発生しました。vsftpdの新しいバージョン(3.0以降)を使用している場合は、これが機能すると思われます)

以前のバージョンのvsftpdにダウングレードする

(現在のバージョンを削除し、古いバージョンをサーバーで動作させるように試み始めましたが、依存関係の欠落や失敗が非常に多く発生したため、あきらめました。オンラインの他のユーザーは、バージョン2.3.2または独自にコンパイルできる場合は最大3.x)

私がオンラインで見つけたvsftpdの背後にいる人々の1人によって提示された他のいくつかの提案された解決策:

構成ファイルでオプションlocal_root =を定義します。/homeまたはusersフォルダーのあるディレクトリへの他のパスである必要があります。このようにして、vsftpdは/ homeディレクトリにchrootします。

(私にとって、これは単一のローカルルートを持つことができなかったので機能しません)

構成ファイルでオプションpasswd_chroot_enable = yesを定義し、/ etc/passwdファイルのユーザーホームディレクトリを「/ home/user」から「/home/./user」に変更します(引用符なし)。このようにして、vsftpdは/ homeディレクトリにchrootします。

(これは私のサーバーでは機能しません。)

Vsftpd-extのソースをダウンロードし、既存のvsftpdバイナリをコンパイルして上書きするか、リポジトリから取得して構成ファイルに追加します

オプションallow_writeable_root = yes。

(このサーバーではコンパイルできません。)