chown は許可されませんが、書き込み権限があります。再帰的所有権をどのように取得できますか?

chown は許可されませんが、書き込み権限があります。再帰的所有権をどのように取得できますか?

次のシナリオを考えてみましょう。

  1. rwxディレクトリグループIDのメンバーとしてディレクトリにアクセスできます。
  2. システム管理者はユーザーの実行を許可しませんchown(参照:このスレッド詳細)

ディレクトリの再帰所有権を取得するには?

私が欲しいと仮定すると、次のことができると思います。A

cp -R A B
rm -R A
mv B A

Aしかし、これは面倒な作業であり、サイズが大きい場合は多くのスペースが必要になることがあります。

答え1

次のように所有権を取得できます。

$ mv A A.old
$ mkdir A
$ mv A.old/* A.old/.[!.]* A.old/..?* A/
$ rmdir A.old

答え2

実際には、ディレクトリの所有権だけをインポートするだけです。通常のファイルは次回の変更時に自動的に処理され、シンボリックリンクとパイプは重要ではなく、デバイスや他のエキゾチックな種類がないとします。

ディレクトリの再帰的なコピーを作成できますが、通常のファイルをコピーする代わりにハードリンクを作成します。 GNU coreutilsを使用する(Linux、Cygwin):

cp -al A B

すべての一般ファイルA/dir/fileはにハードリンクされていますB/dir/file。その後、ソースツリーを削除できます。

GNU coreutilsがない場合は、代わりにrsyncを使用できます。

cd A
rsync -a --link-dest=$PWD . ../B

Aを削除しても実際にファイルが削除されないようにするには、すべての一般ファイルのハードリンク数が2以上であることを確認してください。次のコマンドは何も出力しないでください。

find A -type f -links 1

答え3

コピーを含まないすべての方法では、no-chown ルールが発生します。ルートにこれを依頼してください。

野心的な場合は、独自のセキュリティチェックを実行し、より緩和されたルールに従ってchownを許可するかどうかを決定するsetuid-rootインストール用に設計された新しいchown-likeユーティリティを作成できます。

主にディスク容量に関するものであれば、cpをrmとインタリーブするツールだけが必要です。

関連情報