hack のためのネタ帳, etc,,,

icacls と getfacl の比較

Windows 7 Ultimate 64 bit 日本語版における以下のバージョンで調査

C:\ 以下に mkdir した場合の ACL

$ uname -a
CYGWIN_NT-6.1 %USERDOMAIN% 2.4.1(0.293/5/3) 2016-01-24 11:26 x86_64 Cygwin
CMD から mkdir した場合
C:\>mkdir z
C:\>icacls z
z BUILTIN\Administrators:(I)(F)
  BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
  NT AUTHORITY\SYSTEM:(I)(F)
  NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
  BUILTIN\Users:(I)(OI)(CI)(RX)
  NT AUTHORITY\Authenticated Users:(I)(M)
  NT AUTHORITY\Authenticated Users:(I)(OI)(CI)(IO)(M)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
$ getfacl z
# file: z
# owner: %USERNAME%
# group: None
user::rwx
group::---
group:Authenticated Users:rwx
group:SYSTEM:rwx
group:Administrators:rwx
group:Users:r-x
mask:rwx
other:---
default:user::---
default:group::---
default:group:Authenticated Users:rwx
default:group:SYSTEM:rwx
default:group:Administrators:rwx
default:group:Users:r-x
default:mask:rwx
default:other:---
cygwin から mkdir した場合
$ mkdir z
C:\>icacls z
z NULL SID:(DENY)(Rc,S,REA,WEA,X,DC)
  %USERDOMAIN%\%USERNAME%:(F)
  %USERDOMAIN%\None:(RX)
  NT AUTHORITY\Authenticated Users:(RX,W,DC)
  NT AUTHORITY\SYSTEM:(RX,W,DC)
  BUILTIN\Administrators:(RX,W,DC)
  BUILTIN\Users:(RX)
  Everyone:(RX)
  NULL SID:(OI)(CI)(IO)(DENY)(Rc,S,REA,WEA,X,DC)
  CREATOR OWNER:(OI)(CI)(IO)(F)
  CREATOR GROUP:(OI)(CI)(IO)(RX)
  NT AUTHORITY\Authenticated Users:(OI)(CI)(IO)(RX,W,DC)
  NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(RX,W,DC)
  BUILTIN\Administrators:(OI)(CI)(IO)(RX,W,DC)
  BUILTIN\Users:(OI)(CI)(IO)(RX)
  Everyone:(OI)(CI)(IO)(RX)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
$ getfacl z
# file: z
# owner: %USERNAME%
# group: None
user::rwx
group::r-x
group:Authenticated Users:rwx
group:SYSTEM:rwx
group:Administrators:rwx
group:Users:r-x
mask:rwx
other:r-x
default:user::rwx
default:group::r-x
default:group:Authenticated Users:rwx
default:group:SYSTEM:rwx
default:group:Administrators:rwx
default:group:Users:r-x
default:mask:rwx
default:other:r-x

icacls と getfacl の対応

icaclsgetfacl
%USERDOMAIN%\%USERNAME%:(F)user::rwx
%USERDOMAIN%\None:(RX)group::r-x
Everyone:(RX)other:r-x
CREATOR OWNER:(OI)(CI)(IO)(F)default:user::rwx
CREATOR GROUP:(OI)(CI)(IO)(RX)default:group::r-x
Everyone:(OI)(CI)(IO)(RX)default:other:r-x

なお Windows 10 Pro 64 bit 日本語版では以下のような対応になっていた。
%USERDOMAIN%\なし:(RX)group::r-x
「なし」って何だ?
言語使用の違いでデフォルトのグループ名変えるとかセンスが悪過ぎる。
これ、どうやって調べたら良いんだ?

結論

Cygwin において重要な ALC は上記の 8 つのうち 6 つのみなので、他は削っても問題ない。
逆にこの 8 つのうちの 6 つがないと permission に不具合が生じる可能性がある。

従って不適切な ACL を持つ Cygwin の / を適切な ACL に変更するための処理は以下のようになる。

初期版

修正版

cp="$(cmd.exe /c chcp | awk '{printf $NF;}' | sed -re 's/^[^0-9]*([0-9]+).*$/CP\1/g')"
cmd /c icacls "$(cygpath -w /)" \
  /grant \
    "%USERDOMAIN%\\%USERNAME%:F" \
    "*S-1-3-1:RX" \
    "Everyone:RX" \
    "CREATOR OWNER:(OI)(CI)(IO)F" \
    "CREATOR GROUP:(OI)(CI)(IO)RX" \
    "Everyone:(OI)(CI)(IO)RX" \
  /remove \
    "NT AUTHORITY\\Authenticated Users" \
    "NT AUTHORITY\\SYSTEM" \
    "BUILTIN\\Administrators" \
    "BUILTIN\\Users" \
    "NULL SID" \
  /inheritance:r \
| iconv -f "$cp" -t UTF-8

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます