Protokolo, kiu daŭre kreskas, ĉesas kreski en la momento, kiam io rekreas ĝin, kaj la eraro diras permeso rifuzita. La alloga konkludo estas, ke la dosiero mem bezonas pli da permesoj, kvankam la dosiero eble jam estas skribebla de la sama konto. Aldoni al ekzistanta nomo kaj krei novan estas malsamaj kontroloj, kaj nur la dua konsultas la dosierujon.

Aldono kaj kreo estas malsamaj kontroloj

Malfermi ekzistantan dosieron por aldono bezonas skriban aliron al tiu dosiero kaj serĉan aliron laŭ ĉiu dosierujo en ĝia vojo. Krei dosieron bezonas skriban kaj serĉan aliron al la enhavanta dosierujo, ĉar la operacio aldonas nomon al ĝi. Anstataŭigi dosieron per renomado tuŝas ambaŭ dosierujojn kaj iliajn regulojn pri sticky bit.

OperationWhat must permit itTypical failure message
Append to an existing logFile write access, path traversalPermission denied on the file
Create a missing logDirectory write and search accessPermission denied on the path
Rename a replacement into placeBoth directories, plus sticky restrictionsPermission denied or operation not permitted

Jam malfermita priskribilo aldonas kvaran kazon. Procezo povas teni skribeblan tenilon malfermitan antaŭ ol ĝi forlasis siajn privilegiojn kaj tamen malsukcesi remalfermi la saman vojon sub sia posta identeco. La sukcesaj aldonoj kaj la malsukcesa kreo povas ambaŭ esti veraj samtempe por la sama procezo.

Defaŭltaj ACL-oj herediĝas, ili ne donas

Ero komenciĝanta per la defaŭlta prefikso priskribas, kion novaj objektoj heredas de la dosierujo. Ĝi donas nenion al la dosierujo mem, kaj ĝi ne riparas la ACL de dosiero, kiu jam ekzistas.

namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log

Legu la alirajn erojn aparte de la defaŭltaj, kaj legu la maskon. Nomita ero, kiu listigas plenajn rajtojn, ankoraŭ povas esti limigita de la masko, kaj tial la komento pri efikeco gravas pli ol la literoj en la unua linio.

Uzu la solvitan vojon anstataŭ la vojo en la agordo. Simbola ligilo, muntpunkto aŭ rotaciita dosierujo povas meti la realan dosieron ie, kien la permeso, kiun vi donis, neniam atingas. Trapasu la vojon unue per namei, poste komparu ĉiun nivelon kun la koncerna konto. Diveni la plej supran dosierujon estas kiel riparo surteriĝas unu nivelon tro alte.

Identigu, kiu skribas en tiu momento

Kontrolu la servan unuon, ĝiajn drop-in-ojn kaj la proprajn kontagordojn de la demono antaŭ ol ŝanĝi ion ajn. La procezo, kiu aldonas, kaj la procezo, kiu rekreas, povas esti malsamaj: rotacia helpilo, statusa skribanto kaj reta leganto malofte kunhavas identecon.

Testa rulo el radika ŝelo ne reproduktas limigitan servon, kaj ĝi sukcesos dum la servo daŭre malsukcesas. Reproduktu la malsukcesan operacion sub la sama unuo, kun la sama konto kaj la samaj sandbox-agordoj. Se vi ne povas, startigu la unuon per provizora ŝelo kaj kontrolu la identecon, kiun ĝi raportas. Ĉio alia mezuras vian terminalon anstataŭ la servon.

Se kreo vere necesas, donu al la skribanto aliron al la dediĉita protokola dosierujo kaj tenu la legan aliron por konsumantoj aparta. Fari komunan konton aŭ tutan aplikaĵan arbon skribebla por kontentigi unu protokolan vokon interŝanĝas malgrandan problemon kontraŭ granda.

Rotaciu sen reenkonduki la eraron

Kiu rekreas la dosieron, tiu decidas ĝian posedanton kaj modon por la sekva ciklo, do kunordigu la riparon kun la rotacia agordo. Anstataŭaĵo kreita sub alia konto aŭ kun freŝa ACL revenigas la eraron post sukcesa korekto.

Agordu la modon kaj la grupon ĉe kreo, ne poste, kaj kontrolu la sekvan rotacion anstataŭ la sekvan aldonon. Aldono nur ripetas la teston, kiu jam pasis. Se la rotacia ilo ofertas agordon por kreo-modo, uzu ĝin anstataŭ posta chmod. La breĉo inter kreo kaj chmod estas ĝuste kiam la sekva skribo povas malsukcesi.

Kiam tranĉo tamen malsukcesas, ĉesu aldoni permesojn

Malsukceso tranĉi dosieron, kiun vi povas skribi, ne estas klarigita de dosierujaj permesoj, kaj aldoni pli da ili ne helpos. Rigardu anstataŭe la atributojn kaj la enfermon: atributo append-only permesas skribojn nur en aldona modo, kaj nurlega muntado aŭ serva sandbox povas rifuzi operacion, kiun la ACL permesas.

Kontrolu la dosiersistemajn limigojn de la unuo kaj la muntajn opciojn por la vojo, poste reproduktu la ĝustan operacion, kiu malsukcesis. Larĝigi permeson, kiu neniam estis konsultita, nur kaŝas, kiu limigo estis reala. Forigu unu limigon samtempe en forĵetebla unuo, kaj restarigu ĝin antaŭ ol ŝanĝi ion daŭran.

Rilataj artikoloj