Når jeg bruger setfacl til at styre, hvilke tilladelser børefilerne / mapperne skal have, af en eller anden grund har filerne alle tilladelser undtagen udførelsen (“x”).

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ getfacl . # file: . # owner: someuser # group: webs # flags: -s- user::rwx group::rwx other::rwx default:user::rwx default:group::rwx default:other::rwx someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rw-rw-rw- 1 someuser webs 0 paź 31 13:35 file 

Jeg troede, det har noget at gøre med umask, men at ændre det på forskellige måder giver aldrig det forventede resultat, medmindre jeg mangler noget.

Hvordan kan dette løses?

Svar

Hauke Lagings svar forsøger at sige:

Ethvert program, der opretter en fil eller et bibliotek, angiver den tilstand (tilladelser), det vil have, at filen skal have. Dette er næsten altid hårdkodet i C-programmet (eller hvilket sprog der bruges ) og er næsten aldrig direkte tilgængelig for brugeren. Derefter kan umask -værdien og standard-ACL deaktivere tilladelsesbits, men ikke tilføj dem.

Dit problem er, at mens mkdir angiver en tilstand på 777 (rwxrwxrwx), næsten alle programmer, der opretter filer, angiver 666 (rw-rw-rw-). Dette inkluderer touch, skallen (til I / O-omdirigering; f.eks. program > file), redaktørerne (vi, vim, emacs osv …), dd, split og så videre. Derfor får du ikke tilladelser til rwxrwxrwx på en almindelig fil umiddelbart efter oprettelsen (af et af disse programmer), uanset hvad du gør med ACLer; du skal oprette filen og derefter chmod den.

Der er et par undtagelser fra denne regel:

  • cp og relaterede programmer (f.eks. cpio, tar osv.), der kopierer eller på anden måde re -oprett en fil, som (forsøger at) indstille den nye fil til samme tilstand som den originale fil.
  • Kompilatorer, der opretter binære eksekverbare filer, angiver en tilstand på 777 (i det mindste, hvis kompilering lykkes), så brugeren faktisk kan udføre det program, de lige har kompileret.

Kommentarer

  • Jeg antager kun dette gælder for de traditionelle Unix-tilladelsestilstande, der svarer til user, group og other ACL-poster. Hvis du har standard ACL-poster for navngivne brugere eller grupper, skal de ‘ arves som angivet, ikke?
  • Er dette et tilbud fra et eller andet sted? I så fald skal du tilføje kilden, og hvis ikke, skal du fjerne citatformateringen.
  • @terdon: Det er ikke et tilbud; det er (som beskrevet) en omskrivning af Hauke Lagings svar . Hvordan skal dette håndteres? (1) Jeg kunne have redigeret det andet svar, men jeg ved, at massive omskrivninger af andres indlæg er forkert. (Og bemærk, FWIW, at min rep på dette websted var < 2000 i oktober 2014.) (2) Jeg kunne have sendt det som en kommentar til det andet svar. Eller rettere, jeg kunne have sendt det som en serie med tre kommentarer, da det er > 1200 tegn. Men det er ikke i overensstemmelse med min forståelse af formålet med kommentarer. … (fortsat)
  • Hej, det var ikke ‘ t en klage! Dette er et fint svar, og jeg fandt det kun, fordi jeg undrede mig over det samme. Jeg ville bare fjerne citatformateringen, som ‘ er alt sammen. Det er fint at sende et svar, der præciserer et eksisterende, så længe du nævner originalen (som du gjorde). Ja, det ville være en god ide at tilføje et link, men det er ‘. Du kopierer tydeligvis ikke bare hans svar til dit.
  • Jeg troede ikke, det var en klage; tak for ros. Men helt sikkert er du klar over, at enhver anmodning fra en romb-person har luften af en jernhånd i en fløjlhandske. 🙂 P.S. Jeg har redigeret mit svar i overensstemmelse med dit forslag.

Svar

Du nævner ikke hvad ” forventet resultat “er. Jeg antager, at det er filerne, der har x -sæt.

Du kan ikke håndhæve det som standard ACL (som umask) bare forhindrer tilladelser, men indstiller dem ikke selv. En ny mappe eller fil får ikke flere tilladelser (for bruger, gruppe og andet) end open() eller mkdir() -opkald, der opretter anmodninger.

For filer kræves der normalt kun læse- og skrivetilladelse. Men hvis en kompilator opretter en binær fil, anmoder den også om eksekveringstilladelse.

Kommentarer

  • Dit svar er ret kaotisk set fra engelsk synspunkt. Kan du venligst rette det? Også er jeg ‘ ikke sikker hvad du mener. Se på min kode. For mapper fungerer det altid.For filer fungerer det også altid undtagen ” x ” bit. Også hvis det ‘ ikke er den rigtige måde at gøre dette på, hvad er der undtagen at indstille en umask hver gang en mappe åbnes?

Svar

$ touch file && chmod a+x file

Forklaringerne i andre svar er fremragende. Jeg vil tilføje noget, der faktisk giver et svar på spørgsmålet,

Hvordan kan dette løses?

med specifik kode. @Scott fortalte, hvordan man gør dette,

du skal oprette filen og derefter chmod den.

Koden i mit svar viser, hvordan man gør det og fremhæver det ved at sætte det først.


Flere forklaringer

For at begynde med tilføjer jeg simpelthen til touch kommando givet af OP, specifikt touch file bliver touch file && chmod a+x file.

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file && chmod a+x file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rwxrwxrwx 1 someuser webs 0 paź 31 13:35 file 

Her vil jeg oprette den samme situation på min maskine (Cygwin) for at vise, at den fungerer, og gør det samme i en virtuel Ubuntu-boks for at vise forskellene i opsætningen . (Bemærk, at den egentlige kommando til at rette ting ikke ændrer sig, jeg vil blot vise nogle forskelle, der kan komme op med setfacl, samt at kontrollere for mig selv, at det fungerer .)

$ uname -a | head -n 1 CYGWIN_NT-10.0 my_machine 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin $ pwd /home/me $ mkdir user294034 $ setfacl -m u::rwx user294034/ $ setfacl -m d:u::rwx user294034/ $ setfacl -m g::rwX user294034/ setfacl: illegal acl entries $ setfacl -m g::rws user294034/ setfacl: illegal acl entries $ # I guess I don"t know how to get the `flags: -s-` on Cygwin $ setfacl -m g::rwx user294034/ $ setfacl -m d:g::rwx user294034/ $ setfacl -m o::rwx user294034/ $ setfacl -m d:o::rwx user294034/ $ cd user294034 $ getfacl . # file: . # owner: me # group: my_group user::rwx group::rwx other:rwx default:user::rwx default:group::rwx default:other:rwx $ # I admitted that I don"t know how to get `# flags: -s-` $ umask 0022 $ umask 0000 $ touch file $ mkdir dir $ # Here, we"ll see the same problem $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rw-rw-rw- 1 me my_group 0 Sep 18 20:31 file $ # Here, we"ll fix the problem $ rm file $ touch file && chmod a+x file $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rwxrwxrwx 1 me my_group 0 Sep 18 20:32 file 

Svar

Du kan prøve dette enkle script erstatter ACL-poster for hver fil og mappe, hvilket giver de angivne standardtilladelser.

$ cd ~ $ mkdir .config $ cat <<"EOF" >> .config/dacl user::rwx group::rwx other:r-x default:user::rwx default:group::rwx default:other:r-x EOF $ cat <<"EOF" >> .config/facl user::rw- group::rw- other:r-- default:user::rw- default:group::rw- default:other:r-- EOF $ cd / $ find $1 -type d -exec setfacl -f ~/.config/dacl {} \; $ find $1 -type f -exec setfacl -f ~/.config/facl {} \; $ getfacl . # file: . # owner: MyUser # group: Administrators user::rwx group::rwx other::r-x default:user::rwx default:group::rwx default:other::r-x 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *