私は次の設定を持っています:
- Ubuntu 14.4サーバーはフロントエンドゾーンでSFTPサービスを提供します。
- 外部クライアントはファイルをアップロードできます。
- 他のサーバー上のバックエンドプロセスは、アップロードされたファイルを追跡し、いくつかのバックエンドジョブをトリガーし、ジョブの結果に基づいてファイルを変更します。
SFTPユーザーは自分がアップロードしたファイルを所有します。 SFTPユーザーとバックエンドプロセスは同じグループのメンバーです。 umaskが0007の場合、バックエンドプロセスはこれらのファイルにアクセスして変更できます。
ただし、一部のユーザーはファイルをアップロードします。約600フィートバックエンドプロセスがこれらのファイルを処理できないように権限を付与します。
権限(umask、acl)を制限する方法はたくさんありますが、権限が多すぎるアップロードされたファイルに対してグループアクセス権を自動的に付与する方法はありません。
600または640の権限でアップロードされたファイルを660の権限に自動的に変換する方法はありますか?
答え1
これは一般的な常緑樹ですsftp
。 ~から根:
背景
これはsftp
ファイル共有に関連する長い問題です。生成された権限はクライアントファイルの元の権限に基づいており、umask(-u
)パラメータはこれらの権限を強制せずに不要な権限のみを削除するためです。つまり、ユーザーが権限のあるファイルをアップロードしようとした場合にのみ、ファイルが適用され0777
削除されます0775
。それ以外の場合、ファイルはそのまま残ります。たとえば、ユーザーのファイルシステムに権限のあるファイルが保存されている場合、そのファイル0700
はとしても表示されます0700
。
解決策
最近、新しくアップロードされたファイルに正しい権限を適用するパッチを適用して、Fedoraでこの問題を解決しました。これは以下に基づいています。
https://bugzilla.mindrot.org/show_bug.cgi?id=1844
数ヶ月以内にCentOSで利用できるようになる予定ですが、Debianでも利用できるかどうかはわかりません。
解決策
cron
不正な権限を修正するいくつかの一般的な実行スクリプト以外には、エレガントなソリューションはありません。これはおそらくbashのいくつかの冗談かもしれませんが、いくつか考えることができるようです。興味があれば、これについて詳しく説明します。
ダーバン?
Debian ベースのシステムでは、回避策があるかもしれませんbindfs
。デフォルトでは、あるディレクトリを別のディレクトリにマウントし、すべての権限が必要な方法で機能するように強制できます。
答え2
いよいよiwatchを使うようになりました。
/etc/default/iwatch:
START_DAEMON=true
CONFIG_FILE=/etc/iwatch/iwatch.xml
/etc/iwatch/iwatch.xml:
<?xml version="1.0" ?>
<!DOCTYPE config SYSTEM "/etc/iwatch/iwatch.dtd" >
<config>
<guard email="" name=""/>
<watchlist>
<title>Fix SFTP rights of uploaded files -- grant group access</title>
<contactpoint email="" name=""/>
<path type="recursive" alert="off" exec="chmod g+rw %f" events="close_write">/home/sftpusers</path>
</watchlist>
</config>
ここで、/home/sftpusers は sftp ユーザーのホームディレクトリがある場所です。
これにより、sftpユーザーがファイルをアップロードするたびに(close_writeトリガー)、すぐにchmod g + rwが処理されます。
これは私の問題を非常によく解決しました。