1# Copyright (c) 2008, 2009 Edward Tomasz Napierała <trasz@FreeBSD.org> 2# 3# Redistribution and use in source and binary forms, with or without 4# modification, are permitted provided that the following conditions 5# are met: 6# 1. Redistributions of source code must retain the above copyright 7# notice, this list of conditions and the following disclaimer. 8# 2. Redistributions in binary form must reproduce the above copyright 9# notice, this list of conditions and the following disclaimer in the 10# documentation and/or other materials provided with the distribution. 11# 12# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 13# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 14# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 15# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 16# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 17# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 18# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 19# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 20# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 21# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 22# SUCH DAMAGE. 23# 24# $FreeBSD$ 25# 26 27# This is a tools-level test for NFSv4 ACL functionality. Run it as root 28# using ACL-enabled kernel: 29# 30# /usr/src/tools/regression/acltools/run /usr/src/tools/regression/acltools/tools-nfs4.test 31# 32# WARNING: Creates files in unsafe way. 33 34$ whoami 35> root 36$ umask 022 37 38# Smoke test for getfacl(1). 39$ touch xxx 40$ getfacl xxx 41> # file: xxx 42> # owner: root 43> # group: wheel 44> owner@:--x-----------:-------:deny 45> owner@:rw-p---A-W-Co-:-------:allow 46> group@:-wxp----------:-------:deny 47> group@:r-------------:-------:allow 48> everyone@:-wxp---A-W-Co-:-------:deny 49> everyone@:r-----a-R-c--s:-------:allow 50 51$ getfacl -q xxx 52> owner@:--x-----------:-------:deny 53> owner@:rw-p---A-W-Co-:-------:allow 54> group@:-wxp----------:-------:deny 55> group@:r-------------:-------:allow 56> everyone@:-wxp---A-W-Co-:-------:deny 57> everyone@:r-----a-R-c--s:-------:allow 58 59# Check verbose mode formatting. 60$ getfacl -v xxx 61> # file: xxx 62> # owner: root 63> # group: wheel 64> owner@:execute::deny 65> owner@:read_data/write_data/append_data/write_attributes/write_xattr/write_acl/write_owner::allow 66> group@:write_data/execute/append_data::deny 67> group@:read_data::allow 68> everyone@:write_data/execute/append_data/write_attributes/write_xattr/write_acl/write_owner::deny 69> everyone@:read_data/read_attributes/read_xattr/read_acl/synchronize::allow 70 71# Test setfacl -a. 72$ setfacl -a2 u:0:write_acl:allow,g:1:read_acl:deny xxx 73$ getfacl -n xxx 74> # file: xxx 75> # owner: root 76> # group: wheel 77> owner@:--x-----------:-------:deny 78> owner@:rw-p---A-W-Co-:-------:allow 79> user:0:-----------C--:-------:allow 80> group:1:----------c---:-------:deny 81> group@:-wxp----------:-------:deny 82> group@:r-------------:-------:allow 83> everyone@:-wxp---A-W-Co-:-------:deny 84> everyone@:r-----a-R-c--s:-------:allow 85 86# Test user and group name resolving. 87$ rm xxx 88$ touch xxx 89$ setfacl -a2 u:root:write_acl:allow,g:daemon:read_acl:deny xxx 90$ getfacl xxx 91> # file: xxx 92> # owner: root 93> # group: wheel 94> owner@:--x-----------:-------:deny 95> owner@:rw-p---A-W-Co-:-------:allow 96> user:root:-----------C--:-------:allow 97> group:daemon:----------c---:-------:deny 98> group@:-wxp----------:-------:deny 99> group@:r-------------:-------:allow 100> everyone@:-wxp---A-W-Co-:-------:deny 101> everyone@:r-----a-R-c--s:-------:allow 102 103# Check whether ls correctly marks files with "+". 104$ ls -l xxx | cut -d' ' -f1 105> -rw-r--r--+ 106 107# Test removing entries by number. 108$ setfacl -x 4 xxx 109$ setfacl -x 4 xxx 110$ getfacl -n xxx 111> # file: xxx 112> # owner: root 113> # group: wheel 114> owner@:--x-----------:-------:deny 115> owner@:rw-p---A-W-Co-:-------:allow 116> user:0:-----------C--:-------:allow 117> group:1:----------c---:-------:deny 118> everyone@:-wxp---A-W-Co-:-------:deny 119> everyone@:r-----a-R-c--s:-------:allow 120 121# Test setfacl -m. 122$ setfacl -a0 everyone@:rwx:deny xxx 123$ setfacl -a0 everyone@:rwx:deny xxx 124$ setfacl -a0 everyone@:rwx:deny xxx 125$ setfacl -m everyone@::deny xxx 126$ getfacl -n xxx 127> # file: xxx 128> # owner: root 129> # group: wheel 130> everyone@:--------------:-------:deny 131> everyone@:--------------:-------:deny 132> everyone@:--------------:-------:deny 133> owner@:--x-----------:-------:deny 134> owner@:rw-p---A-W-Co-:-------:allow 135> user:0:-----------C--:-------:allow 136> group:1:----------c---:-------:deny 137> everyone@:--------------:-------:deny 138> everyone@:r-----a-R-c--s:-------:allow 139 140# Test getfacl -i. 141$ getfacl -i xxx 142> # file: xxx 143> # owner: root 144> # group: wheel 145> everyone@:--------------:-------:deny 146> everyone@:--------------:-------:deny 147> everyone@:--------------:-------:deny 148> owner@:--x-----------:-------:deny 149> owner@:rw-p---A-W-Co-:-------:allow 150> user:root:-----------C--:-------:allow:0 151> group:daemon:----------c---:-------:deny:1 152> everyone@:--------------:-------:deny 153> everyone@:r-----a-R-c--s:-------:allow 154 155# Make sure cp without any flags does not copy copy the ACL. 156$ cp xxx yyy 157$ ls -l yyy | cut -d' ' -f1 158> -rw-r--r-- 159 160# Make sure it does with the "-p" flag. 161$ rm yyy 162$ cp -p xxx yyy 163$ getfacl -n yyy 164> # file: yyy 165> # owner: root 166> # group: wheel 167> everyone@:--------------:-------:deny 168> everyone@:--------------:-------:deny 169> everyone@:--------------:-------:deny 170> owner@:--x-----------:-------:deny 171> owner@:rw-p---A-W-Co-:-------:allow 172> user:0:-----------C--:-------:allow 173> group:1:----------c---:-------:deny 174> everyone@:--------------:-------:deny 175> everyone@:r-----a-R-c--s:-------:allow 176 177$ rm yyy 178 179# Test removing entries by... by example? 180$ setfacl -x everyone@::deny xxx 181$ getfacl -n xxx 182> # file: xxx 183> # owner: root 184> # group: wheel 185> owner@:--x-----------:-------:deny 186> owner@:rw-p---A-W-Co-:-------:allow 187> user:0:-----------C--:-------:allow 188> group:1:----------c---:-------:deny 189> everyone@:r-----a-R-c--s:-------:allow 190 191# Test setfacl -b. 192$ setfacl -b xxx 193$ getfacl -n xxx 194> # file: xxx 195> # owner: root 196> # group: wheel 197> owner@:--x-----------:-------:deny 198> owner@:rw-p---A-W-Co-:-------:allow 199> group@:-wxp----------:-------:deny 200> group@:r-------------:-------:allow 201> everyone@:-wxp---A-W-Co-:-------:deny 202> everyone@:r-----a-R-c--s:-------:allow 203 204$ ls -l xxx | cut -d' ' -f1 205> -rw-r--r-- 206 207# Check setfacl(1) and getfacl(1) with multiple files. 208$ touch xxx yyy zzz 209 210$ ls -l xxx yyy zzz | cut -d' ' -f1 211> -rw-r--r-- 212> -rw-r--r-- 213> -rw-r--r-- 214 215$ setfacl -m u:42:x:allow,g:43:w:allow nnn xxx yyy zzz 216> setfacl: nnn: acl_get_file() failed: No such file or directory 217 218$ ls -l nnn xxx yyy zzz | cut -d' ' -f1 219> ls: nnn: No such file or directory 220> -rw-r--r--+ 221> -rw-r--r--+ 222> -rw-r--r--+ 223 224$ getfacl -nq nnn xxx yyy zzz 225> getfacl: nnn: stat() failed: No such file or directory 226> user:42:--x-----------:-------:allow 227> group:43:-w------------:-------:allow 228> owner@:--x-----------:-------:deny 229> owner@:rw-p---A-W-Co-:-------:allow 230> group@:-wxp----------:-------:deny 231> group@:r-------------:-------:allow 232> everyone@:-wxp---A-W-Co-:-------:deny 233> everyone@:r-----a-R-c--s:-------:allow 234> 235> user:42:--x-----------:-------:allow 236> group:43:-w------------:-------:allow 237> owner@:--x-----------:-------:deny 238> owner@:rw-p---A-W-Co-:-------:allow 239> group@:-wxp----------:-------:deny 240> group@:r-------------:-------:allow 241> everyone@:-wxp---A-W-Co-:-------:deny 242> everyone@:r-----a-R-c--s:-------:allow 243> 244> user:42:--x-----------:-------:allow 245> group:43:-w------------:-------:allow 246> owner@:--x-----------:-------:deny 247> owner@:rw-p---A-W-Co-:-------:allow 248> group@:-wxp----------:-------:deny 249> group@:r-------------:-------:allow 250> everyone@:-wxp---A-W-Co-:-------:deny 251> everyone@:r-----a-R-c--s:-------:allow 252 253$ setfacl -b nnn xxx yyy zzz 254> setfacl: nnn: acl_get_file() failed: No such file or directory 255 256$ ls -l nnn xxx yyy zzz | cut -d' ' -f1 257> ls: nnn: No such file or directory 258> -rw-r--r-- 259> -rw-r--r-- 260> -rw-r--r-- 261 262$ rm xxx yyy zzz 263 264# Test applying mode to an ACL. 265$ touch xxx 266$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow -x everyone@::allow xxx 267$ chmod 600 xxx 268$ getfacl -n xxx 269> # file: xxx 270> # owner: root 271> # group: wheel 272> user:42:r-------------:-------:deny 273> user:42:r-------------:-------:allow 274> user:43:-w------------:-------:deny 275> user:43:-w------------:-------:allow 276> user:44:--x-----------:-------:deny 277> user:44:--x-----------:-------:allow 278> owner@:--------------:-------:deny 279> owner@:-------A-W-Co-:-------:allow 280> group@:--------------:-------:deny 281> group@:--------------:-------:allow 282> everyone@:-------A-W-Co-:-------:deny 283> owner@:--x-----------:-------:deny 284> owner@:rw-p---A-W-Co-:-------:allow 285> group@:rwxp----------:-------:deny 286> group@:--------------:-------:allow 287> everyone@:rwxp---A-W-Co-:-------:deny 288> everyone@:------a-R-c--s:-------:allow 289$ ls -l xxx | cut -d' ' -f1 290> -rw-------+ 291 292$ rm xxx 293$ touch xxx 294$ chown 42 xxx 295$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow xxx 296$ chmod 600 xxx 297$ getfacl -n xxx 298> # file: xxx 299> # owner: 42 300> # group: wheel 301> user:42:--------------:-------:deny 302> user:42:r-------------:-------:allow 303> user:43:-w------------:-------:deny 304> user:43:-w------------:-------:allow 305> user:44:--x-----------:-------:deny 306> user:44:--x-----------:-------:allow 307> owner@:--x-----------:-------:deny 308> owner@:rw-p---A-W-Co-:-------:allow 309> group@:rwxp----------:-------:deny 310> group@:--------------:-------:allow 311> everyone@:rwxp---A-W-Co-:-------:deny 312> everyone@:------a-R-c--s:-------:allow 313$ ls -l xxx | cut -d' ' -f1 314> -rw-------+ 315 316$ rm xxx 317$ touch xxx 318$ chown 43 xxx 319$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow xxx 320$ chmod 124 xxx 321$ getfacl -n xxx 322> # file: xxx 323> # owner: 43 324> # group: wheel 325> user:42:r-------------:-------:deny 326> user:42:r-------------:-------:allow 327> user:43:-w------------:-------:deny 328> user:43:-w------------:-------:allow 329> user:44:--x-----------:-------:deny 330> user:44:--x-----------:-------:allow 331> owner@:rw-p----------:-------:deny 332> owner@:--x----A-W-Co-:-------:allow 333> group@:r-x-----------:-------:deny 334> group@:-w-p----------:-------:allow 335> everyone@:-wxp---A-W-Co-:-------:deny 336> everyone@:r-----a-R-c--s:-------:allow 337$ ls -l xxx | cut -d' ' -f1 338> ---x-w-r--+ 339 340$ rm xxx 341$ touch xxx 342$ chown 43 xxx 343$ setfacl -a0 user:42:r:allow,user:43:w:deny,user:43:w:allow,user:44:x:allow xxx 344$ chmod 412 xxx 345$ getfacl -n xxx 346> # file: xxx 347> # owner: 43 348> # group: wheel 349> user:42:r-------------:-------:deny 350> user:42:r-------------:-------:allow 351> user:43:-w------------:-------:deny 352> user:43:-w------------:-------:allow 353> user:44:--------------:-------:deny 354> user:44:--x-----------:-------:allow 355> owner@:-wxp----------:-------:deny 356> owner@:r------A-W-Co-:-------:allow 357> group@:rw-p----------:-------:deny 358> group@:--x-----------:-------:allow 359> everyone@:r-x----A-W-Co-:-------:deny 360> everyone@:-w-p--a-R-c--s:-------:allow 361$ ls -l xxx | cut -d' ' -f1 362> -r----x-w-+ 363 364$ mkdir ddd 365$ setfacl -a0 group:44:rwapd:allow ddd 366$ setfacl -a0 group:43:write_data/delete_child:d:deny,group@:ad:allow ddd 367$ setfacl -a0 user:42:rx:fi:allow,group:42:write_data/delete_child:d:allow ddd 368$ setfacl -m everyone@:-w-p--a-R-c--s:fi:allow ddd 369$ getfacl -n ddd 370> # file: ddd 371> # owner: root 372> # group: wheel 373> user:42:r-x-----------:f-i----:allow 374> group:42:-w--D---------:-d-----:allow 375> group:43:-w--D---------:-d-----:deny 376> group@:-----da-------:-------:allow 377> group:44:rw-p-da-------:-------:allow 378> owner@:--------------:-------:deny 379> owner@:rwxp---A-W-Co-:-------:allow 380> group@:-w-p----------:-------:deny 381> group@:r-x-----------:-------:allow 382> everyone@:-w-p---A-W-Co-:-------:deny 383> everyone@:-w-p--a-R-c--s:f-i----:allow 384$ chmod 777 ddd 385$ getfacl -n ddd 386> # file: ddd 387> # owner: root 388> # group: wheel 389> user:42:r-x-----------:f-i----:allow 390> group:42:-w--D---------:-di----:allow 391> group:42:--------------:-------:deny 392> group:42:-w--D---------:-------:allow 393> group:43:-w--D---------:-di----:deny 394> group:43:-w--D---------:-------:deny 395> group@:-----da-------:-------:allow 396> group:44:--------------:-------:deny 397> group:44:rw-p-da-------:-------:allow 398> owner@:--------------:-------:deny 399> owner@:-------A-W-Co-:-------:allow 400> group@:--------------:-------:deny 401> group@:--------------:-------:allow 402> everyone@:-------A-W-Co-:-------:deny 403> everyone@:-w-p--a-R-c--s:f-i----:allow 404> owner@:--------------:-------:deny 405> owner@:rwxp---A-W-Co-:-------:allow 406> group@:--------------:-------:deny 407> group@:rwxp----------:-------:allow 408> everyone@:-------A-W-Co-:-------:deny 409> everyone@:rwxp--a-R-c--s:-------:allow 410 411$ rmdir ddd 412$ mkdir ddd 413$ setfacl -a0 group:44:rwapd:allow ddd 414$ setfacl -a0 group:43:write_data/delete_child:d:deny,group@:ad:allow ddd 415$ setfacl -a0 user:42:rx:fi:allow,group:42:write_data/delete_child:d:allow ddd 416$ setfacl -m everyone@:-w-p--a-R-c--s:fi:allow ddd 417$ chmod 124 ddd 418$ getfacl -n ddd 419> # file: ddd 420> # owner: root 421> # group: wheel 422> user:42:r-x-----------:f-i----:allow 423> group:42:-w--D---------:-di----:allow 424> group:42:--------------:-------:deny 425> group:42:----D---------:-------:allow 426> group:43:-w--D---------:-di----:deny 427> group:43:-w--D---------:-------:deny 428> group@:-----da-------:-------:allow 429> group:44:r-------------:-------:deny 430> group:44:r----da-------:-------:allow 431> owner@:--------------:-------:deny 432> owner@:-------A-W-Co-:-------:allow 433> group@:--------------:-------:deny 434> group@:--------------:-------:allow 435> everyone@:-------A-W-Co-:-------:deny 436> everyone@:-w-p--a-R-c--s:f-i----:allow 437> owner@:rw-p----------:-------:deny 438> owner@:--x----A-W-Co-:-------:allow 439> group@:r-x-----------:-------:deny 440> group@:-w-p----------:-------:allow 441> everyone@:-wxp---A-W-Co-:-------:deny 442> everyone@:r-----a-R-c--s:-------:allow 443 444$ rmdir ddd 445$ mkdir ddd 446$ setfacl -a0 group:44:rwapd:allow ddd 447$ setfacl -a0 group:43:write_data/delete_child:d:deny,group@:ad:allow ddd 448$ setfacl -a0 user:42:rx:allow,user:42:rx:fi:allow,group:42:write_data/delete_child:d:allow ddd 449$ setfacl -m everyone@:-w-p--a-R-c--s:fi:allow ddd 450$ chmod 412 ddd 451$ getfacl -n ddd 452> # file: ddd 453> # owner: root 454> # group: wheel 455> user:42:r-------------:-------:deny 456> user:42:r-x-----------:-------:allow 457> user:42:r-x-----------:f-i----:allow 458> group:42:-w--D---------:-di----:allow 459> group:42:-w------------:-------:deny 460> group:42:-w--D---------:-------:allow 461> group:43:-w--D---------:-di----:deny 462> group:43:-w--D---------:-------:deny 463> group@:-----da-------:-------:allow 464> group:44:rw-p----------:-------:deny 465> group:44:rw-p-da-------:-------:allow 466> owner@:--------------:-------:deny 467> owner@:-------A-W-Co-:-------:allow 468> group@:--------------:-------:deny 469> group@:--------------:-------:allow 470> everyone@:-------A-W-Co-:-------:deny 471> everyone@:-w-p--a-R-c--s:f-i----:allow 472> owner@:-wxp----------:-------:deny 473> owner@:r------A-W-Co-:-------:allow 474> group@:rw-p----------:-------:deny 475> group@:--x-----------:-------:allow 476> everyone@:r-x----A-W-Co-:-------:deny 477> everyone@:-w-p--a-R-c--s:-------:allow 478 479$ rmdir ddd 480$ mkdir ddd 481$ setfacl -a0 group:44:rwapd:allow ddd 482$ setfacl -a0 group:43:write_data/delete_child:d:deny,group@:ad:allow ddd 483$ setfacl -a0 user:42:rx:allow,user:42:rx:fi:allow,group:42:write_data/delete_child:d:allow ddd 484$ setfacl -m everyone@:-w-p--a-R-c--s:fi:allow ddd 485$ chown 42 ddd 486$ chmod 412 ddd 487$ getfacl -n ddd 488> # file: ddd 489> # owner: 42 490> # group: wheel 491> user:42:--x-----------:-------:deny 492> user:42:r-x-----------:-------:allow 493> user:42:r-x-----------:f-i----:allow 494> group:42:-w--D---------:-di----:allow 495> group:42:-w------------:-------:deny 496> group:42:-w--D---------:-------:allow 497> group:43:-w--D---------:-di----:deny 498> group:43:-w--D---------:-------:deny 499> group@:-----da-------:-------:allow 500> group:44:rw-p----------:-------:deny 501> group:44:rw-p-da-------:-------:allow 502> owner@:--------------:-------:deny 503> owner@:-------A-W-Co-:-------:allow 504> group@:--------------:-------:deny 505> group@:--------------:-------:allow 506> everyone@:-------A-W-Co-:-------:deny 507> everyone@:-w-p--a-R-c--s:f-i----:allow 508> owner@:-wxp----------:-------:deny 509> owner@:r------A-W-Co-:-------:allow 510> group@:rw-p----------:-------:deny 511> group@:--x-----------:-------:allow 512> everyone@:r-x----A-W-Co-:-------:deny 513> everyone@:-w-p--a-R-c--s:-------:allow 514 515# Test applying ACL to mode. 516$ rmdir ddd 517$ mkdir ddd 518$ setfacl -a0 u:42:rwx:fi:allow ddd 519$ ls -ld ddd | cut -d' ' -f1 520> drwxr-xr-x+ 521 522$ rmdir ddd 523$ mkdir ddd 524$ chmod 0 ddd 525$ setfacl -a0 owner@:r:allow,group@:w:deny,group@:wx:allow ddd 526$ ls -ld ddd | cut -d' ' -f1 527> dr----x---+ 528 529$ rmdir ddd 530$ mkdir ddd 531$ chmod 0 ddd 532$ setfacl -a0 owner@:r:allow,group@:w:fi:deny,group@:wx:allow ddd 533$ ls -ld ddd | cut -d' ' -f1 534> dr---wx---+ 535 536$ rmdir ddd 537$ mkdir ddd 538$ chmod 0 ddd 539$ setfacl -a0 owner@:r:allow,group:43:w:deny,group:43:wx:allow ddd 540$ ls -ld ddd | cut -d' ' -f1 541> dr--------+ 542 543$ rmdir ddd 544$ mkdir ddd 545$ chmod 0 ddd 546$ setfacl -a0 owner@:r:allow,user:43:w:deny,user:43:wx:allow ddd 547$ ls -ld ddd | cut -d' ' -f1 548> dr--------+ 549 550# Test inheritance. 551$ rmdir ddd 552$ mkdir ddd 553$ setfacl -a0 group:43:write_data/write_acl:fin:deny,u:43:rwxp:allow ddd 554$ setfacl -a0 user:42:rx:fi:allow,group:42:write_data/delete_child:dn:deny ddd 555$ setfacl -a0 user:42:write_acl/write_owner:fi:allow ddd 556$ setfacl -a0 group:41:read_data/read_attributes:dni:allow ddd 557$ setfacl -a0 user:41:write_data/write_attributes:fn:allow ddd 558$ getfacl -qn ddd 559> user:41:-w-----A------:f--n---:allow 560> group:41:r-----a-------:-din---:allow 561> user:42:-----------Co-:f-i----:allow 562> user:42:r-x-----------:f-i----:allow 563> group:42:-w--D---------:-d-n---:deny 564> group:43:-w---------C--:f-in---:deny 565> user:43:rwxp----------:-------:allow 566> owner@:--------------:-------:deny 567> owner@:rwxp---A-W-Co-:-------:allow 568> group@:-w-p----------:-------:deny 569> group@:r-x-----------:-------:allow 570> everyone@:-w-p---A-W-Co-:-------:deny 571> everyone@:r-x---a-R-c--s:-------:allow 572 573$ cd ddd 574$ touch xxx 575$ getfacl -qn xxx 576> user:41:-w------------:-------:deny 577> user:41:-w-----A------:-------:allow 578> user:42:--------------:-------:deny 579> user:42:--------------:-------:allow 580> user:42:--x-----------:-------:deny 581> user:42:r-x-----------:-------:allow 582> group:43:-w---------C--:-------:deny 583> owner@:--x-----------:-------:deny 584> owner@:rw-p---A-W-Co-:-------:allow 585> group@:-wxp----------:-------:deny 586> group@:r-------------:-------:allow 587> everyone@:-wxp---A-W-Co-:-------:deny 588> everyone@:r-----a-R-c--s:-------:allow 589 590$ rm xxx 591$ umask 077 592$ touch xxx 593$ getfacl -qn xxx 594> user:41:-w------------:-------:deny 595> user:41:-w-----A------:-------:allow 596> user:42:--------------:-------:deny 597> user:42:--------------:-------:allow 598> user:42:r-x-----------:-------:deny 599> user:42:r-x-----------:-------:allow 600> group:43:-w---------C--:-------:deny 601> owner@:--x-----------:-------:deny 602> owner@:rw-p---A-W-Co-:-------:allow 603> group@:rwxp----------:-------:deny 604> group@:--------------:-------:allow 605> everyone@:rwxp---A-W-Co-:-------:deny 606> everyone@:------a-R-c--s:-------:allow 607 608$ rm xxx 609$ umask 770 610$ touch xxx 611$ getfacl -qn xxx 612> user:41:-w------------:-------:deny 613> user:41:-w-----A------:-------:allow 614> user:42:--------------:-------:deny 615> user:42:--------------:-------:allow 616> user:42:r-x-----------:-------:deny 617> user:42:r-x-----------:-------:allow 618> group:43:-w---------C--:-------:deny 619> owner@:rwxp----------:-------:deny 620> owner@:-------A-W-Co-:-------:allow 621> group@:rwxp----------:-------:deny 622> group@:--------------:-------:allow 623> everyone@:--x----A-W-Co-:-------:deny 624> everyone@:rw-p--a-R-c--s:-------:allow 625 626$ rm xxx 627$ umask 707 628$ touch xxx 629$ getfacl -qn xxx 630> user:41:--------------:-------:deny 631> user:41:-w-----A------:-------:allow 632> user:42:--------------:-------:deny 633> user:42:--------------:-------:allow 634> user:42:--x-----------:-------:deny 635> user:42:r-x-----------:-------:allow 636> group:43:-w---------C--:-------:deny 637> owner@:rwxp----------:-------:deny 638> owner@:-------A-W-Co-:-------:allow 639> group@:--x-----------:-------:deny 640> group@:rw-p----------:-------:allow 641> everyone@:rwxp---A-W-Co-:-------:deny 642> everyone@:------a-R-c--s:-------:allow 643 644$ umask 077 645$ mkdir yyy 646$ getfacl -qn yyy 647> group:41:r-------------:-------:deny 648> group:41:r-----a-------:-------:allow 649> user:42:-----------Co-:f-i----:allow 650> user:42:r-x-----------:f-i----:allow 651> group:42:-w--D---------:-------:deny 652> owner@:--------------:-------:deny 653> owner@:rwxp---A-W-Co-:-------:allow 654> group@:rwxp----------:-------:deny 655> group@:--------------:-------:allow 656> everyone@:rwxp---A-W-Co-:-------:deny 657> everyone@:------a-R-c--s:-------:allow 658 659$ rmdir yyy 660$ umask 770 661$ mkdir yyy 662$ getfacl -qn yyy 663> group:41:r-------------:-------:deny 664> group:41:r-----a-------:-------:allow 665> user:42:-----------Co-:f-i----:allow 666> user:42:r-x-----------:f-i----:allow 667> group:42:-w--D---------:-------:deny 668> owner@:rwxp----------:-------:deny 669> owner@:-------A-W-Co-:-------:allow 670> group@:rwxp----------:-------:deny 671> group@:--------------:-------:allow 672> everyone@:-------A-W-Co-:-------:deny 673> everyone@:rwxp--a-R-c--s:-------:allow 674 675$ rmdir yyy 676$ umask 707 677$ mkdir yyy 678$ getfacl -qn yyy 679> group:41:--------------:-------:deny 680> group:41:------a-------:-------:allow 681> user:42:-----------Co-:f-i----:allow 682> user:42:r-x-----------:f-i----:allow 683> group:42:-w--D---------:-------:deny 684> owner@:rwxp----------:-------:deny 685> owner@:-------A-W-Co-:-------:allow 686> group@:--------------:-------:deny 687> group@:rwxp----------:-------:allow 688> everyone@:rwxp---A-W-Co-:-------:deny 689> everyone@:------a-R-c--s:-------:allow 690 691# There is some complication regarding how write_acl and write_owner flags 692# get inherited. Make sure we got it right. 693$ setfacl -b . 694$ setfacl -a0 u:42:Co:f:allow . 695$ setfacl -a0 u:43:Co:d:allow . 696$ setfacl -a0 u:44:Co:fd:allow . 697$ setfacl -a0 u:45:Co:fi:allow . 698$ setfacl -a0 u:46:Co:di:allow . 699$ setfacl -a0 u:47:Co:fdi:allow . 700$ setfacl -a0 u:48:Co:fn:allow . 701$ setfacl -a0 u:49:Co:dn:allow . 702$ setfacl -a0 u:50:Co:fdn:allow . 703$ setfacl -a0 u:51:Co:fni:allow . 704$ setfacl -a0 u:52:Co:dni:allow . 705$ setfacl -a0 u:53:Co:fdni:allow . 706$ umask 022 707$ rm xxx 708$ touch xxx 709$ getfacl -nq xxx 710> user:53:--------------:-------:deny 711> user:53:--------------:-------:allow 712> user:51:--------------:-------:deny 713> user:51:--------------:-------:allow 714> user:50:--------------:-------:deny 715> user:50:--------------:-------:allow 716> user:48:--------------:-------:deny 717> user:48:--------------:-------:allow 718> user:47:--------------:-------:deny 719> user:47:--------------:-------:allow 720> user:45:--------------:-------:deny 721> user:45:--------------:-------:allow 722> user:44:--------------:-------:deny 723> user:44:--------------:-------:allow 724> user:42:--------------:-------:deny 725> user:42:--------------:-------:allow 726> owner@:--x-----------:-------:deny 727> owner@:rw-p---A-W-Co-:-------:allow 728> group@:-wxp----------:-------:deny 729> group@:r-------------:-------:allow 730> everyone@:-wxp---A-W-Co-:-------:deny 731> everyone@:r-----a-R-c--s:-------:allow 732 733$ rmdir yyy 734$ mkdir yyy 735$ getfacl -nq yyy 736> user:53:--------------:-------:deny 737> user:53:--------------:-------:allow 738> user:52:--------------:-------:deny 739> user:52:--------------:-------:allow 740> user:50:--------------:-------:deny 741> user:50:--------------:-------:allow 742> user:49:--------------:-------:deny 743> user:49:--------------:-------:allow 744> user:47:-----------Co-:fdi----:allow 745> user:47:--------------:-------:deny 746> user:47:--------------:-------:allow 747> user:46:-----------Co-:-di----:allow 748> user:46:--------------:-------:deny 749> user:46:--------------:-------:allow 750> user:45:-----------Co-:f-i----:allow 751> user:44:-----------Co-:fdi----:allow 752> user:44:--------------:-------:deny 753> user:44:--------------:-------:allow 754> user:43:-----------Co-:-di----:allow 755> user:43:--------------:-------:deny 756> user:43:--------------:-------:allow 757> user:42:-----------Co-:f-i----:allow 758> owner@:--------------:-------:deny 759> owner@:rwxp---A-W-Co-:-------:allow 760> group@:-w-p----------:-------:deny 761> group@:r-x-----------:-------:allow 762> everyone@:-w-p---A-W-Co-:-------:deny 763> everyone@:r-x---a-R-c--s:-------:allow 764 765$ setfacl -b . 766$ setfacl -a0 u:42:Co:f:deny . 767$ setfacl -a0 u:43:Co:d:deny . 768$ setfacl -a0 u:44:Co:fd:deny . 769$ setfacl -a0 u:45:Co:fi:deny . 770$ setfacl -a0 u:46:Co:di:deny . 771$ setfacl -a0 u:47:Co:fdi:deny . 772$ setfacl -a0 u:48:Co:fn:deny . 773$ setfacl -a0 u:49:Co:dn:deny . 774$ setfacl -a0 u:50:Co:fdn:deny . 775$ setfacl -a0 u:51:Co:fni:deny . 776$ setfacl -a0 u:52:Co:dni:deny . 777$ setfacl -a0 u:53:Co:fdni:deny . 778$ umask 022 779$ rm xxx 780$ touch xxx 781$ getfacl -nq xxx 782> user:53:-----------Co-:-------:deny 783> user:51:-----------Co-:-------:deny 784> user:50:-----------Co-:-------:deny 785> user:48:-----------Co-:-------:deny 786> user:47:-----------Co-:-------:deny 787> user:45:-----------Co-:-------:deny 788> user:44:-----------Co-:-------:deny 789> user:42:-----------Co-:-------:deny 790> owner@:--x-----------:-------:deny 791> owner@:rw-p---A-W-Co-:-------:allow 792> group@:-wxp----------:-------:deny 793> group@:r-------------:-------:allow 794> everyone@:-wxp---A-W-Co-:-------:deny 795> everyone@:r-----a-R-c--s:-------:allow 796 797$ rmdir yyy 798$ mkdir yyy 799$ getfacl -nq yyy 800> user:53:-----------Co-:-------:deny 801> user:52:-----------Co-:-------:deny 802> user:50:-----------Co-:-------:deny 803> user:49:-----------Co-:-------:deny 804> user:47:-----------Co-:fdi----:deny 805> user:47:-----------Co-:-------:deny 806> user:46:-----------Co-:-di----:deny 807> user:46:-----------Co-:-------:deny 808> user:45:-----------Co-:f-i----:deny 809> user:44:-----------Co-:fdi----:deny 810> user:44:-----------Co-:-------:deny 811> user:43:-----------Co-:-di----:deny 812> user:43:-----------Co-:-------:deny 813> user:42:-----------Co-:f-i----:deny 814> owner@:--------------:-------:deny 815> owner@:rwxp---A-W-Co-:-------:allow 816> group@:-w-p----------:-------:deny 817> group@:r-x-----------:-------:allow 818> everyone@:-w-p---A-W-Co-:-------:deny 819> everyone@:r-x---a-R-c--s:-------:allow 820 821$ rmdir yyy 822$ rm xxx 823$ cd .. 824$ rmdir ddd 825$ rm xxx 826 827# Test basic recursive setting of ACLs. 828$ mkdir ddd 829$ touch ddd/xxx 830$ mkdir ddd/eee 831$ touch ddd/eee/yyy 832$ setfacl -R -m owner@:full_set:f:allow,group@:full_set::allow,everyone@:full_set::allow ddd 833$ getfacl -q ddd 834> owner@:--------------:-------:deny 835> owner@:rwxpDdaARWcCos:f------:allow 836> group@:-w-p----------:-------:deny 837> group@:rwxpDdaARWcCos:-------:allow 838> everyone@:-w-p---A-W-Co-:-------:deny 839> everyone@:rwxpDdaARWcCos:-------:allow 840$ getfacl -q ddd/xxx 841> owner@:--x-----------:-------:deny 842> owner@:rwxpDdaARWcCos:-------:allow 843> group@:-wxp----------:-------:deny 844> group@:rwxpDdaARWcCos:-------:allow 845> everyone@:-wxp---A-W-Co-:-------:deny 846> everyone@:rwxpDdaARWcCos:-------:allow 847$ getfacl -q ddd/eee 848> owner@:--------------:-------:deny 849> owner@:rwxpDdaARWcCos:f------:allow 850> group@:-w-p----------:-------:deny 851> group@:rwxpDdaARWcCos:-------:allow 852> everyone@:-w-p---A-W-Co-:-------:deny 853> everyone@:rwxpDdaARWcCos:-------:allow 854$ getfacl -q ddd/eee/yyy 855> owner@:--x-----------:-------:deny 856> owner@:rwxpDdaARWcCos:-------:allow 857> group@:-wxp----------:-------:deny 858> group@:rwxpDdaARWcCos:-------:allow 859> everyone@:-wxp---A-W-Co-:-------:deny 860> everyone@:rwxpDdaARWcCos:-------:allow 861 862$ rm -r ddd 863