{"id":11,"date":"2025-12-31T16:00:00","date_gmt":"2025-12-31T15:00:00","guid":{"rendered":"https:\/\/airex.se\/blogg\/zabbix-agent-permission-denied\/"},"modified":"2026-08-02T15:44:13","modified_gmt":"2026-08-02T13:44:13","slug":"zabbix-agent-permission-denied","status":"publish","type":"post","link":"https:\/\/airex.se\/blogg\/zabbix-agent-permission-denied\/","title":{"rendered":"Zabbix-agenten startar inte: cannot include \u2026 permission denied"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u00d6vervakningsagenten p\u00e5 en av servrarna v\u00e4grade starta. Felmeddelandet var ovanligt hj\u00e4lpsamt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ERROR: Cannot read configuration: cannot include\n\"\/etc\/zabbix\/zabbix_agent2.d\/&lt;fil&gt;.conf\": permission denied<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tv\u00e5 fel, egentligen. Det f\u00f6rsta tog tv\u00e5 minuter att l\u00f6sa. Det andra tog l\u00e4ngre tid, f\u00f6r det gav ett symptom som pekade \u00e5t fel h\u00e5ll.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fel ett: r\u00e4ttigheter, inget annat<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Konfigurationsfilen hade l\u00e4get <code>600<\/code> \u2014 l\u00e4sbar enbart f\u00f6r root. Agenten k\u00f6rs som en egen, mindre privilegierad anv\u00e4ndare. Den kunde allts\u00e5 se att filen fanns, men inte l\u00e4sa den, och v\u00e4grade d\u00e5 starta \u00f6verhuvudtaget i st\u00e4llet f\u00f6r att hoppa \u00f6ver raden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixen \u00e4r en rad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 644 \/etc\/zabbix\/zabbix_agent2.d\/&lt;fil&gt;.conf\nsystemctl restart zabbix-agent2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Det intressanta \u00e4r inte fixen utan hur filen hamnade d\u00e4r. Den lades dit av en automatiserad utrullning som k\u00f6rde som root, och den \u00e4rvde r\u00e4ttigheterna fr\u00e5n den som skrev den. Ingen m\u00e4nniska valde <code>600<\/code>. Det bara blev s\u00e5.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Det h\u00e4r \u00e4r den vanligaste klassen av fel jag ser numera, n\u00e4r jag inte l\u00e4ngre skriver konfigurationen f\u00f6r hand utan l\u00e5ter agenter g\u00f6ra jobbet: inneh\u00e5llet i filen \u00e4r korrekt, placeringen \u00e4r korrekt, syntaxen \u00e4r korrekt \u2014 och r\u00e4ttigheterna \u00e4r fel, f\u00f6r de var aldrig en del av uppgiften. Den som skriver en fil som root t\u00e4nker s\u00e4llan p\u00e5 vem som ska l\u00e4sa den sedan. Vill man undvika det ska \u00f6nskad \u00e4gare och l\u00e4ge st\u00e5 i uppgiften, inte antas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En detalj v\u00e4rd att notera: agenten <em>v\u00e4grade starta<\/em> snarare \u00e4n att starta med en varning. Det \u00e4r r\u00e4tt beteende. En \u00f6vervakningsagent som tyst hoppar \u00f6ver halva sin konfiguration \u00e4r farligare \u00e4n en som \u00e4r nere, eftersom en nere agent larmar och en halvkonfigurerad ser frisk ut.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fel tv\u00e5: &#8221;Timeout occurred while gathering data&#8221;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Med agenten ig\u00e5ng b\u00f6rjade m\u00e4tv\u00e4rdena komma in \u2014 utom f\u00f6r de kontroller som var sj\u00e4lva anledningen till att filen fanns. De rapporterade timeout.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Orsaken var enkel: kontrollerna k\u00f6r ett skript som tar tv\u00e5 till tre sekunder, och standardv\u00e4rdet f\u00f6r timeout var tre sekunder p\u00e5 agentsidan. Marginalen var allts\u00e5 noll, och utfallet berodde p\u00e5 hur upptagen maskinen r\u00e5kade vara.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">H\u00e4r ligger f\u00e4llan, och den kostade mest tid: <strong>timeout har tv\u00e5 \u00e4ndar.<\/strong> B\u00e5de agenten och servern har ett eget tak, och servern ger upp oberoende av vad agenten h\u00e5ller p\u00e5 med. H\u00f6jer man bara p\u00e5 den ena sidan f\u00e5r man exakt samma felmeddelande som innan, vilket l\u00e4tt tolkas som att h\u00f6jningen inte hj\u00e4lpte. B\u00e5da m\u00e5ste upp.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ett rimligt v\u00e4rde \u00e4r rej\u00e4lt tilltaget snarare \u00e4n precis \u00f6ver m\u00e4tningen. Ett skript som tar tre sekunder p\u00e5 en ledig maskin tar g\u00e4rna tolv n\u00e4r disken har fullt upp med n\u00e5got annat, och det \u00e4r just d\u00e5 man vill ha m\u00e4tv\u00e4rdet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">S\u00e5 vet du att det funkar<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Att tj\u00e4nsten \u00e4r ig\u00e5ng betyder ingenting i sig. <code>systemctl status<\/code> s\u00e4ger &#8221;active&#8221; \u00e4ven n\u00e4r agenten samlar in noll av de kontroller den installerades f\u00f6r.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kontrollera i st\u00e4llet tre saker, i den h\u00e4r ordningen:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Att tj\u00e4nsten \u00e4r kvar efter en omstart av maskinen<\/strong> \u2014 inte bara efter en omstart av tj\u00e4nsten.<\/li>\n<li><strong>Att varje enskilt m\u00e4tv\u00e4rde faktiskt har ett v\u00e4rde<\/strong>, med en tidsst\u00e4mpel som \u00e4r f\u00e4rsk. Ett item som aldrig fyllts i ser i m\u00e5nga vyer ut precis som ett item som \u00e4r i sin ordning.<\/li>\n<li><strong>Att det h\u00e5ller under belastning.<\/strong> K\u00f6r kontrollen medan maskinen har n\u00e5got annat f\u00f6r sig och se om den fortfarande hinner klart.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Vad jag tar med mig<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>L\u00e4s felmeddelandet bokstavligt.<\/strong> &#8221;Permission denied&#8221; p\u00e5 en inkluderad fil betyder r\u00e4ttigheter. Inte brandv\u00e4gg, inte SELinux, inte en trasig installation. Den enklaste f\u00f6rklaringen var den r\u00e4tta, men jag lade \u00e4nd\u00e5 n\u00e5gra minuter p\u00e5 att misst\u00e4nka finare saker f\u00f6rst.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Automatisering \u00e4rver r\u00e4ttigheter, den v\u00e4ljer dem inte.<\/strong> N\u00e4r konfiguration skrivs av n\u00e5got som k\u00f6r som root blir resultatet l\u00e4sbart f\u00f6r root. Ska n\u00e5gon annan l\u00e4sa filen m\u00e5ste det st\u00e5 i uppgiften.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00d6vervakning som inte \u00f6vervakas \u00e4r en \u00e5sikt.<\/strong> Tv\u00e5 fel i rad gjorde att en upps\u00e4ttning s\u00e4kerhetskontroller s\u00e5g ut att vara p\u00e5 plats utan att samla in ett enda v\u00e4rde. Ingenting larmade om det, f\u00f6r det som inte m\u00e4ts kan inte larma om sin egen fr\u00e5nvaro. Det \u00e4r d\u00e4rf\u00f6r sista steget alltid m\u00e5ste vara att titta efter data \u2014 inte efter gr\u00f6nt.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Tv\u00e5 fel i rad gjorde att en upps\u00e4ttning s\u00e4kerhetskontroller s\u00e5g ut att vara p\u00e5 plats utan att samla in ett enda v\u00e4rde. Om r\u00e4ttigheter, timeouts med tv\u00e5 \u00e4ndar, och varf\u00f6r gr\u00f6nt inte \u00e4r ett bevis.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-11","post","type-post","status-publish","format-standard","hentry","category-drift"],"_links":{"self":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/posts\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/comments?post=11"}],"version-history":[{"count":1,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/posts\/11\/revisions"}],"predecessor-version":[{"id":15,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/posts\/11\/revisions\/15"}],"wp:attachment":[{"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/media?parent=11"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/categories?post=11"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/airex.se\/blogg\/wp-json\/wp\/v2\/tags?post=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}