setfaclを使用して、子ファイル/ディレクトリに必要なアクセス許可を管理する場合、何らかの理由で、ファイルには実行( “x”)以外のすべてのアクセス許可があります。

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ getfacl . # file: . # owner: someuser # group: webs # flags: -s- user::rwx group::rwx other::rwx default:user::rwx default:group::rwx default:other::rwx someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rw-rw-rw- 1 someuser webs 0 paź 31 13:35 file 

umaskと関係があると思いましたが、さまざまな方法で変更しても、何かが足りない場合を除いて、期待した結果が得られません。

これを修正するにはどうすればよいですか?

回答

HaukeLagingの回答は次のように述べています。

ファイルまたはディレクトリを作成するプログラムは、そのファイルに必要なモード(権限)を指定します。これは、ほとんどの場合、Cプログラム(または使用される言語)にハードコーディングされています。 )であり、ユーザーが直接アクセスすることはほとんどありません。その場合、umask値とデフォルトACLはアクセス許可ビットをオフにできますが、オフにすることはできません。それらを追加します。

問題は、mkdirが777のモード(rwxrwxrwx)を指定しているのに対し、ほとんどすべてがファイルを作成するプログラムは666(rw-rw-rw-)を指定します。これには、touch、シェル(I / Oリダイレクト用、例:program > file)、エディター(、vimemacsなど)、ddsplitなど。したがって、ACLで何を行っても、(これらのプログラムのいずれかによって)作成直後にプレーンファイルでrwxrwxrwxのアクセス許可を取得することはありません。ファイルを作成してからchmodする必要があります。

このルールにはいくつかの例外があります:

  • cpおよび関連するプログラム(例:cpiotarなど)。 -新しいファイルを元のファイルと同じモードに設定する(しようとする)ファイルを作成します。
  • バイナリ実行可能ファイルを作成するコンパイラは、777のモードを指定します(少なくとも、コンパイルは成功します)ので、ユーザーはコンパイルしたばかりのプログラムを実際に実行できます。

コメント

  • これだけだと思いますusergroup、およびother ACLエントリ。名前付きユーザーまたはグループのデフォルトのACLエントリがある場合、それらは'指定どおりに継承されますよね?
  • これはどこかからの引用ですか?その場合は、ソースを追加してください。そうでない場合は、引用の書式を削除してください。
  • @terdon:引用ではありません。これは(説明されているように) HaukeLagingの答えの言い換えです。これはどのように処理する必要がありますか? (1)他の回答を編集することもできましたが、他の人の投稿の大規模な書き直しが嫌われていることは知っています。 (そして、FWIW、このサイトの私の担当者は2014年10月に< 2000であったことに注意してください。)(2)他の回答へのコメントとして投稿できたはずです。むしろ、> 1200文字なので、3つのコメントのシリーズとして投稿することもできます。しかし、それはコメントの目的についての私の理解と一致していません。 …(続き)
  • ねえ、'苦情ではありませんでした!これは良い答えであり、私は同じことを考えていたのでそれを見つけただけです。 'の引用形式をすべて削除します。あなたがオリジナル(あなたがした)に言及する限り、既存のものを明確にする答えを投稿することは問題ありません。はい、リンクを追加するのは良い考えですが、'大したことではありません。あなたは明らかに彼の答えをあなたの答えにコピーしているだけではありません。
  • それが不満だとは思いませんでした。賞賛に感謝します。しかし、確かにあなたはひし形の人からのどんな要求もベルベットの手袋の中に鉄の拳の空気を持っていることに気づきます。 🙂 P.S.私はあなたの提案に従って私の答えを編集しました。

答え

あなたは「期待される結果」です。xビットが設定されているファイルだと思います。

デフォルトのACL(umaskなど)がアクセス許可を妨げるだけなので、強制することはできませんが、新しいディレクトリまたはファイルは、open()またはmkdir()呼び出しを作成して要求します。

ファイルの場合、通常は読み取りと書き込みのアクセス許可のみが要求されます。ただし、コンパイラがバイナリファイルを作成すると、実行許可も要求されます。

コメント

  • 英語の観点からすると、あなたの回答はかなり混沌としているので、訂正してもらえますか?また、'わかりません私のコードを見てください。ディレクトリの場合は常に機能します。ファイルの場合、" x "ビットを除いて常に機能します。また、'がこれを行う適切な方法ではない場合、ディレクトリにアクセスするたびにumaskを設定する以外に何がありますか?

回答

$ touch file && chmod a+x file

他の回答の説明はすばらしいです。質問に実際に答える何かを追加したいのですが、

これを修正するにはどうすればよいですか?

特定のコード。 @Scottは、これを行う方法を説明しました。

ファイルを作成してから、chmodする必要があります。

私の回答のコードは、それを行う方法を示し、最初に配置することで強調表示します


詳細説明

最初に、簡単にするために、

コマンド、具体的にはtouch filetouch file && chmod a+x fileになります。

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file && chmod a+x file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rwxrwxrwx 1 someuser webs 0 paź 31 13:35 file 

ここでは、マシン(Cygwin)で同じ状況を設定して動作することを示し、次に仮想Ubuntuボックスで同じことを行って設定の違いを示します。 。(問題を修正するための実際のコマンドは変更されないことに注意してください。setfaclで発生する可能性のあるいくつかの違いを示し、それが機能することを自分で確認したいと思います。 。)

$ uname -a | head -n 1 CYGWIN_NT-10.0 my_machine 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin $ pwd /home/me $ mkdir user294034 $ setfacl -m u::rwx user294034/ $ setfacl -m d:u::rwx user294034/ $ setfacl -m g::rwX user294034/ setfacl: illegal acl entries $ setfacl -m g::rws user294034/ setfacl: illegal acl entries $ # I guess I don"t know how to get the `flags: -s-` on Cygwin $ setfacl -m g::rwx user294034/ $ setfacl -m d:g::rwx user294034/ $ setfacl -m o::rwx user294034/ $ setfacl -m d:o::rwx user294034/ $ cd user294034 $ getfacl . # file: . # owner: me # group: my_group user::rwx group::rwx other:rwx default:user::rwx default:group::rwx default:other:rwx $ # I admitted that I don"t know how to get `# flags: -s-` $ umask 0022 $ umask 0000 $ touch file $ mkdir dir $ # Here, we"ll see the same problem $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rw-rw-rw- 1 me my_group 0 Sep 18 20:31 file $ # Here, we"ll fix the problem $ rm file $ touch file && chmod a+x file $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rwxrwxrwx 1 me my_group 0 Sep 18 20:32 file 

回答

この単純なスクリプトを試して、各ファイルとディレクトリのACLレコードを置き換え、指定されたデフォルトのアクセス許可を付与してください。

$ cd ~ $ mkdir .config $ cat <<"EOF" >> .config/dacl user::rwx group::rwx other:r-x default:user::rwx default:group::rwx default:other:r-x EOF $ cat <<"EOF" >> .config/facl user::rw- group::rw- other:r-- default:user::rw- default:group::rw- default:other:r-- EOF $ cd / $ find $1 -type d -exec setfacl -f ~/.config/dacl {} \; $ find $1 -type f -exec setfacl -f ~/.config/facl {} \; $ getfacl . # file: . # owner: MyUser # group: Administrators user::rwx group::rwx other::r-x default:user::rwx default:group::rwx default:other::r-x 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です