Techioz Blog

すべてのファイル ディレクトリの所有者とグループを変更する

概要

ディレクトリ内のすべてのファイルの所有者、グループ、アクセス許可を変更しようとしています。

%w(/etc/nginx/ /etc/nginx/conf.d/ /var/l0g/nginx/).each do |path|
  directory path do
    owner "owner1"
    group "group1"
    mode '0755'
  end
end

ただし、%w() で指定されたディレクトリの値が変更されるだけです。特にディレクトリ キーワードではこれが再帰的であると予想していました。

このスクリプトで、ディレクトリ自体を含む指定されたディレクトリ内のすべてのファイルの所有者、グループ、およびアクセス許可を変更するにはどうすればよいですか?

手伝ってくれてありがとう!

解決策

ディレクトリ リソースには再帰的なプロパティがあり、次のように文書化されています。

そのため、ディレクトリ内のすべてのファイルのアクセス許可を再帰的に設定する組み込みの方法はありません。また、755 のモードではすべての設定ファイルが全員に対して実行可能としてマークされるため、これはいかなる場合でも良いアイデアではありません。 nginx 設定ファイルは通常、実行可能であることを意図していないため、これはおそらく間違った動作をする可能性があります。

それでも、どうしてもこれを実行したい場合は、次のような Ruby_block リソースに Ruby を少し書くことができます。

require 'fileutils'

%w(/etc/nginx/ /etc/nginx/conf.d/ /var/l0g/nginx/).each do |path|
  ruby_block "Set recursive permissions for #{path}" do
    block do
      FileUtils.chmod_R(0755, path)
      FileUtils.chown_R("owner1", "group1", path)
    end
  end
end

もう少し「正しい」バージョンは次のようになります。

%w(/etc/nginx/ /etc/nginx/conf.d/ /var/l0g/nginx/).each do |path|
  ruby_block "Set recursive permissions for #{path}" do
    block do
      FileUtils.chmod_R("u=rw+X,go=r+X", path)
      FileUtils.chown_R("owner1", "group1", path)
    end
  end
end

ここでは、厳密に数値的な説明ではなく、記号的なモード説明を使用します。これにより、単なる x ではなく X 仕様を使用できるようになります。 chmod の仕様は次のようになります。

これにより、すべてのディレクトリに実行/検索ビットが設定され、以前に実行ビットが設定されていたファイルのみがそのビットを保持します (ただし、新しいファイルが実行ビットを取得することはありません)。

最後にいくつか注意事項として: