Ubuntu 12.04 での vsftpd chroot の失敗

Ubuntu 12.04 での vsftpd chroot の失敗

私は deb ベースのシステムには詳しくないので、解決策が単純な場合はお詫び申し上げます。

vsftpd を設定して、ユーザーをホーム ディレクトリに閉じ込めようとしています。500 OOPS: vsftpd: chroot() 内で書き込み可能なルートの実行を拒否します。

この問題を調査したところ、一般的な解決策は次のように thefrontiergroup が提供するバックポートを使用することだとわかりました。

sudo add-apt-repository ppa:thefrontiergroup/vsftpd

これを実行すると、Python エラーが発生します。

You are about to add the following PPA to your system:
 vsftpd 2.3.5 with the allow_writeable_chroot feature backported from vsftpd 3.
 More info: https://launchpad.net/~thefrontiergroup/+archive/vsftpd
Press [ENTER] to continue or ctrl-c to cancel adding it

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/dist-packages/softwareproperties/ppa.py", line 99, in run
    self.add_ppa_signing_key(self.ppa_path)
  File "/usr/lib/python2.7/dist-packages/softwareproperties/ppa.py", line 132, in  add_ppa_signing_key
    tmp_keyring_dir = tempfile.mkdtemp()
  File "/usr/lib/python2.7/tempfile.py", line 322, in mkdtemp
    name = names.next()
  File "/usr/lib/python2.7/tempfile.py", line 141, in next
    letters = [choose(c) for dummy in "123456"]
  File "/usr/lib/python2.7/random.py", line 274, in choice
    return seq[int(self.random() * len(seq))]  # raises IndexError if seq is empty
ValueError: cannot convert float NaN to integer

別の解決策を見つけようとしたところ、この記事のようにホームディレクトリの権限を変更するという推奨事項を見つけました。vsftpd - ユーザーをホームディレクトリに制限するしかし、これに従うと、UserDir apache configで説明されているように、各ユーザーのサブディレクトリにapache経由でアクセスできるようにしたいため、多くの手動権限リセットが必要になります。apache.org/docs/2.2/howto/public_html.html を参照してください。

最終的には、adduser fooを実行して、ファイルシステムの他の部分を見ることなく、fooが/home/fooで完全なR/W権限を持つことができるようにしたいのです。http://xxx/~foo/ より誰でもアクセスでき、シェルを nologin から bash に変更するとシェルにアクセスできるようになります。

Ubuntu 12.04 LTS、vsftpd 2.3.5

何かアドバイスをください…頭を悩ませています!

答え1

あなたの状況がまったく同じではないので、これは単なる推測ですが...

apt-get install python-software-properties

(多分apt-get update python-software-properties)?

これは私がセットアップしていた 12.04 システムでの前提条件の手順でしたが、Python エラーではなく、「add-apt-repository: command not found」エラーも表示されました。python-software-properties をインストールしたらそのコマンドは正常に実行されたので、これらのエラーから Python に問題があると考えられます。

私が思いつく唯一の代替案は、外部リポジトリを追加するのではなく、全員のホームを /home/ にして、他のすべてのディレクトリの権限を変更し、/home/ の読み取り時に参照できるディレクトリが「foo」のみになるようにすることです (自分の設定を試したり修正したりするには遅すぎます)。それでも、ユーザーはそこに移動するか、ログイン後に CWD を変更するスクリプトを作成する必要がありますが、初期画面に「foo」のみが表示され、書き込み不可の場合、「cd foo」を実行するか、GUI を使用している場合は foo フォルダーをクリックすることの影響はかなり小さいはずです。どうやらこれは私が想像していたほど単純ではないようです。ディレクトリを表示できるかどうかを決定する権限設定を想像したとき、NTFS 権限を持つ IIS について考えていました。vsftpd.conf に「hide_files」というオプションがあることはわかりました。これは、慎重に選択した用語でこれを実現できる可能性があります (正規表現を指定できますが、現在のユーザーのログインに基づいて変数を拡張してユーザーごとに異なるものにするなどの操作ができるかどうかはわかりません...)

関連情報