<div dir="ltr"><div class="gmail_quote"><div dir="ltr"><div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 20, 2021, 12:17 PM Hal Murray via devel <<a href="mailto:devel@ntpsec.org" target="_blank">devel@ntpsec.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
James Browning said:<br>
> The permissions required by NTPsec are a mess partly because it is not a do<br>
> one thing well daemon. Instead, you have the Lernean Hydra, which has too<br>
> many heads and gaining more.<br>
<br>
I don't get it.  Could you please say more?  ntpd needs file permissions for <br>
all the files it uses.  That much seems pretty obvious.  Is the problem that <br>
the files are scattered all over the place?<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Back in the days of ntp1 it was almost that simple. Ntp2 added auth<br>and monitoring and now we have autokey or nts. I was not using it<br>before v4.<br></div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The one tricky case I can think of is ntpd.log (or whatever you call it).  If <br>
you start on a bare system, it gets created with owner root.  Then when <br>
logrotate comes along, ntpd as user ntpd can't open the new file.  We could <br>
fix that with a bit of code.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Create the log with a date suffix and link ntp.log to it or<br>something? There's code for that there I think...<br></div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
If it is going to drop-root (a good thing), then ntpd also needs permission to <br>
set the clock.  That part is ugly because it varies with the OS.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">With a bit of spin from ip/nftables u32 thing[1] all root is needed<br>for is frobbing time, logs, and shm0/1. <br></div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Would it help if we wrote a script to scan ntp.conf and check the file <br>
permissions and/or the permission for updating the clock?<br>
<br>
> I was writing a long blob on how doing too many<br>
> things was bloating the list of required permissions, but I decided t scrap<br>
> it.<br>
<br>
If you still have the text, a short version might be very helpful.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">I threw it away.</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
> Also, a rewrite would allow and encourage skipping the problematic parts<br>
> of singlesock, events, and goprep. <br>
<br>
Please say more.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">I was thinking a complete rewrite would be designed differently and<br>not be in c. Starting from golang would give us low entry strings,<br>memory, logging, etc.<br><br>====<br><br>I imagined that all of the associated time sources except<br>localclock would be external and feed data to the client via JSON<br>IPC. The client would then frob the time and feed data via JSON IPC<br>to the server head(s). The server heads would then possibly only<br>serve a specific version of a time protocol. I saw<br>monitoring/control and nts-ke heads off to the side, g/setting data<br>via the same IPC.<br></div><div dir="auto"><br></div><div dir="auto">[1] "U32 tests whether quantities of up to 4 bytes extracted from a<br>packet have specified values. The specification of what to extract<br>is general enough to find data at given offsets from TCP headers or<br>payloads."  from iptables-extensions(8)<br></div><div dir="auto"><br></div><div>Let me try sending that to something resembling the right account...</div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>
</div>
</div></div>