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