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
)、エディター(、vim
、emacs
など)、dd
、split
など。したがって、ACLで何を行っても、(これらのプログラムのいずれかによって)作成直後にプレーンファイルでrwxrwxrwx
のアクセス許可を取得することはありません。ファイルを作成してからchmod
する必要があります。
このルールにはいくつかの例外があります:
-
cp
および関連するプログラム(例:cpio
、tar
など)。 -新しいファイルを元のファイルと同じモードに設定する(しようとする)ファイルを作成します。 - バイナリ実行可能ファイルを作成するコンパイラは、777のモードを指定します(少なくとも、コンパイルは成功します)ので、ユーザーはコンパイルしたばかりのプログラムを実際に実行できます。
コメント
答え
あなたは「期待される結果」です。x
ビットが設定されているファイルだと思います。
デフォルトのACL(umaskなど)がアクセス許可を妨げるだけなので、強制することはできませんが、新しいディレクトリまたはファイルは、open()
またはmkdir()
呼び出しを作成して要求します。
ファイルの場合、通常は読み取りと書き込みのアクセス許可のみが要求されます。ただし、コンパイラがバイナリファイルを作成すると、実行許可も要求されます。
コメント
- 英語の観点からすると、あなたの回答はかなり混沌としているので、訂正してもらえますか?また、'わかりません私のコードを見てください。ディレクトリの場合は常に機能します。ファイルの場合、" x "ビットを除いて常に機能します。また、'がこれを行う適切な方法ではない場合、ディレクトリにアクセスするたびにumaskを設定する以外に何がありますか?
回答
$ touch file && chmod a+x file
他の回答の説明はすばらしいです。質問に実際に答える何かを追加したいのですが、
これを修正するにはどうすればよいですか?
特定のコード。 @Scottは、これを行う方法を説明しました。
ファイルを作成してから、
chmod
する必要があります。
私の回答のコードは、それを行う方法を示し、最初に配置することで強調表示します。
詳細説明
最初に、簡単にするために、
コマンド、具体的にはtouch file
はtouch 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
user
、group
、およびother
ACLエントリ。名前付きユーザーまたはグループのデフォルトのACLエントリがある場合、それらは'指定どおりに継承されますよね?