web-dev-qa-db-ja.com

特定のディレクトリに追加されたファイルのアクセス許可とowner:groupを自動的に変更するにはどうすればよいですか?

UnRAIDサーバー(unRAIDはSlackwareに基づいています)を実行していて、特定のディレクトリに追加されたすべてのファイルのアクセス許可と所有権を自動的に変更する方法を見つけたいと思っています。

具体的には、SFTPを使用して、ラップトップからサーバー上の特定の「監視」フォルダーに.torrentファイルをアップロードしたいと思います。問題は、そのディレクトリを監視しているrTorrent dockerコンテナが、アップロードされた.torrentファイルをロードできないことです。これは、owner:userグループがコンテナのグループとは異なるためです。SFTP経由で送信されるroot:rootファイルの場合は.torrent、コンテナの場合はnobody:usersです。

アップロードされた.torrentファイルには0644権限があり、0755権限が必要であるため、ファイルの権限も問題になる可能性があると思います。手動で.torrentにchownし、nobody:usersにchmodすることで、rTorrentにこれらの0755ファイルを自動ロードさせることができたので、Autowatchがこれらの変更を適切に処理することを知っています。

したがって、このディレクトリに追加されたすべてのファイルを自動的にchownおよびchmodする簡単な方法があることを期待しています。何か案は?

2
xthursdayx

組み込みツールを使用して目標を達成するには、もう2つの方法があります。

  • まず、ACLを使用できます

    • ここにいくつかの使用方法のリファレンスがあります: https://www.computerhope.com/unix/usetfacl.htm
    • ファイルがアップロードされるフォルダーのデフォルトACLに、必要な権限を持つユーザーroot:rootを追加できます。
  • 2番目(そして私の個人的な意見ではよりエレガント):

1
AtomiX84

これは役立つかもしれません: https://techarena51.com/blog/inotify-tools-example/

intotifyを使用すると、ディレクトリが更新されたときにスクリプトをトリガーできます。スクリプトは、chownとchmodをその場で管理できます。

0
C Bar

昨日のSO)に関するコメントで述べたように、これはinotifyを使用するとかなり簡単です。

#!/bin/sh
if [ -x /tmp/watchy ]; then
  rm -rf /tmp/watchy
fi
while inotifywait  -e close_write -o /tmp/watchy --format %w%f  /path/to/watch
do
  found=$( tail -n1 /tmp/watchy | grep -E '.torrent$' ) && chown root $found
done
0
tink