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