web-dev-qa-db-ja.com

Unix:ファイルまたはディレクトリのアクセス許可を「コピー」する方法はありますか?

ディレクトリに2つのファイルがあります。 1つには正しい権限があり、もう1つにはありません。権限のセットをあるファイルから別のファイルに「コピー」する方法はありますか?

14
Svish

GNUバージョンのchmodユーティリティは モードをコピー 1つのファイルから(RFile)から別の(file)へ。

chmod --reference=RFile file

GNU coreutils は、ほとんどのLinuxディストリビューションやCygwinなどで見られます。 すべてではありませんchmod実装 このオプションを提供します。

15
Jeremy L

私はこれを思いついた:

find $SOURCE -mindepth 1 -printf 'chmod --reference=%p\t%p\n'|sed "s/\t$SOURCE/ $DEST/g"|sh

それは完全な防弾ではありませんが、私が必要なことをします。

1
Ikem Krueger

getfaclを使用して、ファイルの権限、所有者、グループ、および追加のACL(アクセス制御リスト)の完全なリストを取得できます。

$ getfacl filename.txt
# file: filename.txt
# owner: score
# group: score
user::rw-
group::---
other::---

その出力をファイル(例:acl.txt)に保存すると、setfacl --restore acl.txtを使用してこの形式から復元できます。単一のファイルのみを復元する必要があり、そのファイルのファイル名が元のファイルとは異なる場合は、setfacl --set-file acl.txt filename.txtfilename.txtは新しいファイル名)を使用します。

ステップ

  1. 元の権限をacl.txtに保存:

    $ getfacl filename.txt > acl.txt
    
  2. 権限を上書きします(デモンストレーション用。これは、次の手順で復元が機能することを確認するためです)

    $ chmod 777 filename.txt
    $ Sudo chown nobody:root filename.txt
    $ ls -l filename.txt
    -rwxrwxrwx 1 nobody root 0 Jan  8 14:24 filename.txt
    
  3. setfaclを使用して、acl.txtから正しい権限を復元します。

    $ Sudo setfacl --restore acl.txt
    $ ls -l filename.txt
    -rw------- 1 score score 0 Jan  8 14:24 filename.txt
    

ファイル名はgetfaclによって生成された# file:コメントから取得されるため、コマンドラインで指定する必要はありません。

これらの権限を別のファイルに復元する場合は、次のように--set-fileの代わりに--restoreを使用できます。

$ setfacl --set-file acl.txt second_filename.txt

/usr内の一部のファイルのアクセス許可を上書きすることになったが、上書きしたファイルがわからない場合は、通常、同様に構成された別のシステムから復元することで修正できます。

  1. 稼働中のシステムからのバックアップ権限(注:getfaclは相対パスを生成するため、両方のマシンの一貫した場所にcdするようにしてください)

    # cd /
    # getfacl -R usr > /root/acls.txt
    
  2. 権限が壊れているシステムにACLダンプをコピーします

    $ scp root@working-system:/root/acls.txt .
    $ scp acls.txt root@broken-system:/root/
    
  3. ACLダンプを復元して、破損した権限を既知の正常なマシンの権限で上書きします。

    # cd /
    # setfacl --restore /root/acls.txt
    
0
Score_Under

これを試して:

find /PATH/TO/TARGET -exec chmod --reference /PATH/TO/SOURCE/{} {} \;

これは再帰的に増加し、すべてのファイルをchmodします。2つのディレクトリがファイルで一致しない場合、「そのようなファイルまたはディレクトリはありません」というエラーがたくさん表示されます。

0
bersam