<div dir="ltr">Xavier,<div><br></div><div>The point is -- in general, augeas barfs whenever there's a Match block.  With the lens file that ships with augtool.  (This is documented in the lens file.)</div><div><br></div><div>That's a problem for a general-purpose parsing of a sshd_config file, when you don't know a priori whether the sshd_config file has a Match block or not.</div><div><br></div><div>Yes, there are some exotic edge cases in which augeas can tolerate Match blocks.  I've found 1-2 myself.  But in the main,  the lens file doesn't tolerate Match blocks.</div><div><br></div><div>I was proposing a miniscule restriction to the sshd_config syntax that should allow the lens file to be embellished to handle Match blocks.</div><div><br></div><div>Spike</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Apr 23, 2021 at 2:06 AM Mol, Xavier (SCC) <<a href="mailto:xavier.mol@kit.edu">xavier.mol@kit.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="DE"><div class="gmail-m_-5108566129675119644WordSection1"><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">Hi Spike,<u></u><u></u></span></font></p><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p><p class="MsoNormal"><font size="2" face="Calibri"><span lang="EN-US" style="font-size:11pt">I don’t know your use case, but wouldn’t it be easier to tell Augeas to add </span></font><span class="gmail-m_-5108566129675119644SpellE"><span lang="EN-US">UsePrivilegeSeparation</span></span><span lang="EN-US"> before the first Match block?<u></u><u></u></span></p><p class="MsoNormal"><font size="2" face="Calibri"><span lang="EN-US" style="font-size:11pt"><u></u> <u></u></span></font></p><p class="MsoNormal"><span class="gmail-m_-5108566129675119644SpellE"><font size="2" face="Calibri"><span lang="EN-US" style="font-size:11pt">augtool</span></font></span><span lang="EN-US">> ins <span class="gmail-m_-5108566129675119644SpellE">UsePrivilegeSeparation</span> before /files/<span class="gmail-m_-5108566129675119644SpellE">etc</span>/<span class="gmail-m_-5108566129675119644SpellE">ssh</span>/<span class="gmail-m_-5108566129675119644SpellE">sshd_config</span>/Match[1]<u></u><u></u></span></p><p class="MsoNormal"><span class="gmail-m_-5108566129675119644SpellE"><font size="2" face="Calibri"><span lang="EN-US" style="font-size:11pt">augtool</span></font></span><span lang="EN-US">> set /files/<span class="gmail-m_-5108566129675119644SpellE">etc</span>/<span class="gmail-m_-5108566129675119644SpellE">ssh</span>/<span class="gmail-m_-5108566129675119644SpellE">sshd_config</span>/<span class="gmail-m_-5108566129675119644SpellE">UsePrivilegeSeparation</span> yes<u></u><u></u></span></p><p class="MsoNormal"><font size="2" face="Calibri"><span lang="EN-US" style="font-size:11pt"><u></u> <u></u></span></font></p><p class="MsoNormal"><font size="2" face="Calibri"><span lang="EN-US" style="font-size:11pt">Of course, this doesn’t work out anymore when you are not sure <span class="gmail-m_-5108566129675119644SpellE">UsePrivilegeSeparation</span> wasn’t set before already. <span class="gmail-m_-5108566129675119644SpellE">sshd_config</span> will be correct anyway, but this approach would add another ‘<span class="gmail-m_-5108566129675119644SpellE">UsePrivilegeSeparation</span> = yes’ line every time.<u></u><u></u></span></font></p><p class="MsoNormal"><font size="2" face="Calibri"><span lang="EN-US" style="font-size:11pt"><u></u> <u></u></span></font></p><p class="MsoNormal"><font size="2" face="Calibri"><span lang="EN-US" style="font-size:11pt">Ciao,<u></u><u></u></span></font></p><p class="MsoNormal"><font size="2" face="Calibri"><span lang="EN-US" style="font-size:11pt">Xavier.<u></u><u></u></span></font></p><p class="MsoNormal"><font size="2" face="Calibri"><span lang="EN-US" style="font-size:11pt"><u></u> <u></u></span></font></p><p class="MsoNormal"><b><font size="2" face="Calibri"><span style="font-size:11pt;font-weight:bold">Von:</span></font></b><span> <a href="mailto:augeas-devel-bounces@redhat.com" target="_blank">augeas-devel-bounces@redhat.com</a> <<a href="mailto:augeas-devel-bounces@redhat.com" target="_blank">augeas-devel-bounces@redhat.com</a>> <b><span style="font-weight:bold">Im Auftrag von </span></b>Spike White<br><b><span style="font-weight:bold">Gesendet:</span></b> Donnerstag, 22. April 2021 20:00<br><b><span style="font-weight:bold">An:</span></b> <a href="mailto:augeas-devel@redhat.com" target="_blank">augeas-devel@redhat.com</a><br><b><span style="font-weight:bold">Betreff:</span></b> [augeas-devel] Partial answer to augeas not being able to parse / deal with sshd_config Match blocks...<u></u><u></u></span></p><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">Augeas people,<u></u><u></u></span></font></p><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">augeas has a problem dealing with Match blocks in /etc/ssh/sshd_config.  It's even documented in the notes in the lens file for that file.<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">I know that a general purpose parsing of a Match block in augeas is a problem.  I've tried.  The problem is that augeas by default appends new lines (where they're missing in original file) to the end of the file.<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">Thus if you have an existing Match block at the end of the sshd_config file such as:<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">Match User servicepptprdvra<br>   MaxSessions 999<br>   ClientAliveInterval 360<br>   ClientAliveCountMax 3<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">and you want augeaus to add UsePrivilegeSeparation yes as so:<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">  Match User servicepptprdvra<br>   MaxSessions 999<br>   ClientAliveInterval 360<br>   ClientAliveCountMax 3<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">  UsePrivilegeSeparation yes <u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">  <u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">then this UsePrivilegeSeparation will not apply to all users & hosts (as desired), but only to the user specified in the Match block condition.<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">In a nutshell, I think that's the problem with augeas dealing with a Match block.  <u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">Is this a partial solution?:<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">If you restrict augeas so that every match block it writes and every Match block it parses ends with a line:<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">Match All<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">to close an existing Match block,   That is if you have this:<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">  Match User servicepptprdvra<br>   MaxSessions 999<br>   ClientAliveInterval 360<br>   ClientAliveCountMax 3<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">  Match All<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">  and you want augeaus to add UsePrivilegeSeparation yes as so: <u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">  Match User servicepptprdvra<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">   MaxSessions 999<br>   ClientAliveInterval 360<br>   ClientAliveCountMax 3<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">  Match All<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">  UsePrivilegeSeparation yes <u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">Then this UsePrivilegeSeparation will be applied to all users &   hosts, as desired.<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">This is a small restriction on the sshd_config syntax when using augeas, but not egregiously so.<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt">Spike White<u></u><u></u></span></font></p></div><div><p class="MsoNormal"><font size="2" face="Calibri"><span style="font-size:11pt"><u></u> <u></u></span></font></p></div></div></div></div></blockquote></div>