フォルダ内の特定のユーザーとグループの実行を追加し、ファイルから削除します。

フォルダ内の特定のユーザーとグループの実行を追加し、ファイルから削除します。

このコマンドを実行しようとしても、期待した結果は出ません。

chmod -R u-x+Xrw,g-x+Xrw,o-x+Xr *

私のすべてのディレクトリは実行可能であり、すべてのファイルは実行可能ではないことを望みます。これはWebサーバー用の保存フォルダであり、誰もこのフォルダで何もしないことを願っています。読み書きするだけです。しかし、そのディレクトリに移動できるようにしたいです。

何らかの理由でこれらのファイルも実行可能になります。私が何を間違っているのでしょうか?

編集する:他の答えに示されている解決策を使用して問題を解決する方法を知っていますが、ここで書かれたコマンドはファイルを削除するようですが、なぜファイルにxフラグを残すのか疑問に思います。

答え1

ファイル(読み取りと書き込み)がディレクトリ(読み取りと実行)とは異なる権限を持つことを望むので、2つのコマンドを1つにまとめるよりも2つの別々のコマンドを使用することをお勧めします。ワイルドカードは*ファイルとディレクトリと一致します。

第二に、X権限に「実行」を追加します...

ファイルがディレクトリである場合、またはすでに一部のユーザーに対する実行権限がある場合

...したがって、ファイルがランダムな(ユーザー、グループ、またはその他の)実行権限で始まると、実行権限で終わります。

2 つの個別のコマンドを考えます。

find /base/path -type d -exec chmod u+rx,g+rx,o+rx {} +

そして

find /base/path -type f -exec chmod u-x+rw,g-x+rw,o=r {} +

上記のコマンドに従って権限セットを調整します。

  • ディレクトリから:次へ追加誰でも読んで実行できるように
  • ファイル情報:削除ユーザーとグループに対して実行
  • ファイル情報:次へ追加ユーザーとグループへの読み取りと書き込み
  • ファイル情報:セット他のものは読み取り専用です。

答え2

いくつかのテストの後、次のchmodコマンドが期待される動作を提供する必要があることがわかりました。

chmod -R ugo-x+Xr,ug+w FILE

たとえば、775権限を持つディレクトリとファイルから始めます。

[root@testvm1 ~]# ls -ld testdir/
drwxrwxr-x. 2 root root 22 Dec 14 16:47 testdir/
[root@testvm1 ~]# ls -l testdir/testfile
-rwxrwxr-x. 1 root root 0 Dec 14 16:47 testdir/testfile

次に、次のコマンドを実行します。

[root@testvm1 ~]# chmod -R --verbose ugo-x+Xr,ug+w testdir/
mode of ‘testdir/’ retained as 0775 (rwxrwxr-x)
mode of ‘testdir/testfile’ changed from 0775 (rwxrwxr-x) to 0664 (rw-rw-r--)

ディレクトリは実行権限を保持しますが、ファイルの実行権限は削除されます。

すべてのディレクトリに対して775権限を持ち、すべてのファイルに664権限が必要な場合は、次のバリアントを使用して書き込み権限を操作することもできます。

chmod -R ugo-wx+Xr,ug+w *

問題の元のコマンドはchmodファイルから実行権限を削除しません。これらの行動の違いは、パターンの評価方法の結果であるようです。chmod mode1, mode2 fileと同じ結果を提供しますchmod mode1 file; chmod mode2 file。元のコマンドでは、ユーザー権限が最初に評価されるため、グループ/その他のカテゴリ実行権限により、ファイルは実行権限を保持します。例は次のとおりです。

[root@testvm1 testdir]# chmod 775 testfile

[root@testvm1 testdir]# chmod -R --verbose u-x+Xrw,g-x+Xrw,o-x+Xr testfile
mode of ‘testfile’ retained as 0775 (rwxrwxr-x)

[root@testvm1 testdir]# chmod -R --verbose u-x+Xrw testfile
mode of ‘testfile’ retained as 0775 (rwxrwxr-x)
[root@testvm1 testdir]# chmod -R --verbose g-x+Xrw testfile
mode of ‘testfile’ retained as 0775 (rwxrwxr-x)
[root@testvm1 testdir]# chmod -R --verbose o-x+Xr testfile
mode of ‘testfile’ retained as 0775 (rwxrwxr-x)

ディレクトリは自動的に実行ビットを取得するため、Xこの動作はファイルにのみ影響します。

関連情報