デフォルトでは、ディレクトリ内のすべてのファイルを実行可能にしますか?

デフォルトでは、ディレクトリ内のすべてのファイルを実行可能にしますか?

chmod u+x [file]私はすべてのシェルスクリプトを保存するディレクトリを持っており、毎回そこに行く必要がないように、デフォルトで新しいファイルを実行できるようにしたいと思います。このようなことが起こるようにする方法はありますか?頑張ったけどchmod -R u+x [directory]それが全部になった既存の実行ファイルは私が追加したファイルではありません。〜の後。これを達成するためにシェルコマンドまたはシェルスクリプトを使用することを提案できますか?ありがとうございます。

答え1

新しいファイルに権限を適用するには、アクセス制御リスト(ACL)が必要です。これを行う主なツールは次のとおりです。setfacl

ディレクトリに作成された新しいファイルは常に誰でも書き込んだり、特定のグループが所有するようにディレクトリにACLを設定したりできます。特に、新しいファイルを実行可能にすることに興味があります。

これは次のように行われます。

sudo setfactl -Rm d:u::rwx dir

これは、「新しいファイルに対するデフォルトのユーザー権限をrwxに繰り返し設定する」ことを意味します。実験を行うと、次のような結果が得られます。

$ mkdir dir
$ getfacl dir
user::rwx
group::r-x
other::r-x
$ setfacl -Rm d:u::rwx dir
$ getfacl dir
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x

default:いいですね。これで、このディレクトリの新しいファイルにこれらの特定の権限が適用されるという内容のいくつかの行が追加されました。ただし、touch新しいファイルを開くと、次の内容が表示されます。

touch dir/file
ls -l dir
-rw-r--r-- 1 usr grp 0 Aug 19 10:57 file

ユーザー実行ファイルではありません!これマニュアルページ説明する:

permsフィールドは、読み取り(r)、書き込み(w)、実行(x)権限を表す文字の組み合わせです。権限フィールドのダッシュ文字(-)は無視されます。数値Xは、ファイルがディレクトリである場合、またはすでにユーザーの実行権限を持っている場合の実行権限を表します。。あるいは、permsフィールドは、読み取り(4)、書き込み(2)、および実行(1)のビットの組み合わせで権限を数値として定義できます。権限フィールドが存在しないか、またはダッシュのみで構成された権限フィールドは、権限がないことを意味します。

関連部分をすべて試しました勇敢な。新しいファイルを実行可能にするためにACLを設定できますが、xこれはファイルにすでに一部のユーザーに対する実行権限がある場合にのみ機能します。

これは限界です。私はこれがセキュリティ上の制限だと思うので、悪意のあるアプリケーションは希望のファイルをディレクトリに貼り付け、自動的に実行可能にしてから実行することはできません。

ACLを使用して同様の操作を実行する方法を示すために、別の例を示します。

setfacl -Rm d:g::rw dir
touch dir/file1
ls -l dir/file1
-rw-rw-r-- 1 usr grp 0 Aug 19 11:00 dir/file1

新しいファイルを書き込み可能にするためにデフォルトのルールを追加するようにACLに指示したことがわかります。新しいファイルを作成するときにグループ書き込みが可能であることを確認します(一方、新しいファイルは通常グループ読み取りのみ可能です)。

関連情報