El registre creix però no es pot recrear: comproveu l’ACL del directori
Afegir a un fitxer no necessita cap nom nou al seu directori; crear-ne un sí. Compareu l’ACL d’accés amb els valors per defecte heretats abans d’ampliar res.
Un registre que creix sense parar deixa de créixer en el moment que alguna cosa el torna a crear, i l’error diu permission denied. La conclusió temptadora és que el fitxer de registre necessita més permisos, però potser el fitxer ja és escribible pel mateix compte. Afegir a un nom existent i crear-ne un de nou són comprovacions diferents, i només la segona consulta el directori.
Afegir i crear són comprovacions diferents
Obrir un fitxer existent per afegir-hi necessita permís d’escriptura sobre aquest fitxer i permís de cerca a cada directori del seu camí. Crear un fitxer necessita escriptura i cerca al directori que el conté, perquè l’operació hi afegeix un nom. Substituir un fitxer mitjançant un reanomenament toca tots dos directoris i les seves regles de sticky bit.
| Operation | What must permit it | Typical failure message |
|---|---|---|
| Append to an existing log | File write access, path traversal | Permission denied on the file |
| Create a missing log | Directory write and search access | Permission denied on the path |
| Rename a replacement into place | Both directories, plus sticky restrictions | Permission denied or operation not permitted |
Un descriptor ja obert afegeix un quart cas. Un procés pot mantenir un descriptor d’escriptura obert abans de renunciar als privilegis i, tot i així, no poder tornar a obrir el mateix camí amb la seva identitat posterior. Les addicions correctes i la creació fallida poden ser certes alhora, per al mateix procés.
Les ACL per defecte s’hereten, no atorguen
Una entrada que comença amb el prefix per defecte descriu què hereten els objectes nous del directori. No atorga res al directori mateix i no repara l’ACL d’un fitxer que ja existeix.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
Llegiu les entrades d’accés per separat de les per defecte, i llegiu la màscara. Una entrada amb nom que llista drets complets encara pot quedar limitada per la màscara, i per això el comentari efectiu importa més que les lletres de la primera línia.
Feu servir el camí resolt en lloc del camí de la configuració. Un enllaç simbòlic, un punt de muntatge o un directori rotat poden posar el fitxer real en un lloc on el permís que heu concedit no arriba mai. Recorreu primer el camí amb l’eina de noms i després compareu cada nivell amb el compte en qüestió. Endevinar el directori superior és com una correcció acaba un nivell massa amunt.
Identifiqueu qui escriu en aquell moment
Comproveu la unitat del servei, els seus drop-ins i la configuració de compte del dimoni abans de canviar res. El procés que afegeix i el que torna a crear poden ser diferents: un auxiliar de rotació, un escriptor d’estat i un lector web poques vegades comparteixen identitat.
Una execució de prova des d’una shell de root no reprodueix un servei restringit, i tindrà èxit mentre el servei continua fallant. Reproduïu l’operació fallida sota la mateixa unitat, amb el mateix compte i la mateixa configuració de sandbox. Si no podeu, inicieu la unitat amb una shell temporal i comproveu la identitat que informa. Qualsevol altra cosa mesura el vostre terminal, no el servei.
Si la creació és realment necessària, doneu a l’escriptor accés al directori de registres dedicat i manteniu separat l’accés de lectura per als consumidors. Fer escribible un compte compartit o tot un arbre d’aplicació per satisfer una sola crida de registre bescanvia un problema petit per un de gran.
Roteu sense reintroduir-ho
Qui torna a crear el fitxer decideix el seu propietari i mode per al cicle següent, així que coordineu la correcció amb la configuració de rotació. Un substitut creat amb un altre compte, o amb una ACL nova, torna a portar la fallada després d’una correcció correcta.
Establiu el mode i el grup en crear, no després, i verifiqueu la rotació següent en lloc de l’addició següent. Una addició només repeteix la prova que ja ha passat. Si l’eina de rotació ofereix un paràmetre de mode de creació, feu-lo servir en lloc d’un chmod posterior. El buit entre la creació i el chmod és exactament quan la propera escriptura pot fallar.
Quan el truncament falla igualment, deixeu d’afegir permisos
Una fallada en truncar un fitxer que podeu escriure no s’explica pels permisos del directori, i afegir-ne més no ajudarà. Mireu més aviat els atributs i el confinament: un atribut d’append-only permet escriure només en mode d’addició, i un muntatge de només lectura o un sandbox de servei poden denegar una operació que l’ACL permet.
Comproveu les restriccions de sistema de fitxers de la unitat i les opcions de muntatge del camí, i després reproduïu exactament l’operació que va fallar. Ampliar un permís que mai s’ha consultat només amaga quina restricció era la real. Traieu una restricció cada vegada en una unitat d’un sol ús i revertiu-la abans de canviar res permanent.