gcc
生成された実行可能ファイルの最終ファイル権限を決定する方法が疑問に思います。洞察を得るためにミニマリストプログラムを検討しました。test.c
#include <fcntl.h>
#include <unistd.h>
int main(){
int fd = open("output.dat", O_CREAT, 0777);
close(fd);
}
次の 2 つのシナリオは次のとおりです。
ファイルには
test.c
ACLがなく、umaskが0027
。を実行すると、実行によって生成されたファイルと同様に、gcc -o test test.c
ファイルtest
にも(予想どおり)権限が付与されます。rwxr-x---
output.dat
./test
ファイルは
test.c
ディレクトリにあり、setfacl -m d:g::rX -m d:o:--- .
umaskは0022
。この場合、test
結果の実行可能ファイルにはファイルが残っている間にgcc
権限があります。rwxr-x--x
output.dat
rwxr-x---
ファイルの場合、output.dat
その動作はそのセクションと一致するようです。オブジェクト生成と基本ACLaclのマニュアルページから。また、出力ファイルが最初に生成され、実行可能フラグが生成されることがstrace
わかりました。ところで、最初のシーンと2番目のシーンで呼び出されるようです。gcc
chmod
chmod("test", 0750)
chmod("test", 0751)
0751
私はおそらく非常に明確なものを見逃しているでしょう。しかし、後者の場合、権限が付与されるのはなぜですか?尊重されるべきではないか-m d:o:---
?