Re: [PATCH] Do not bind to reserved ports registered in /etc/services

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> On Feb 8, 2018, at 1:07 PM, Chuck Lever <chucklever@xxxxxxxxx> wrote:
> 
> On Fri, Jan 12, 2018 at 2:19 PM, Tom Talpey <tom@xxxxxxxxxx> wrote:
>> On 1/12/2018 1:41 PM, Guillem Jover wrote:
>>> 
>>> On Thu, 2018-01-11 at 10:18:46 -0500, Steve Dickson wrote:
>>>> 
>>>> Overall I think this makes sense, but this eliminates 240 privilege
>>>> ports and worried we would run out of port (due to them in TIME_WAIT)
>>>> during a v3 mount storms. A port goes into TIME_WAIT after a v3 mount
>>>> is done... But on the other hand v3 is no longer the default and
>>>> there are 784 available ports.... Hopefully that is enough.
>>> 
>>> 
>>> Hmm, those numbers do not match my own. bindresvport() uses the port
>>> range between 512 and 1023 inclusive. On my Debian stable (stretch)
>> 
>> 
>> Properly speaking, no service should be binding to any port but the
>> one it is assigned to. This includes 0-1023 as well as 1024-49151.
>> 
>> https://tools.ietf.org/html/rfc6335
>> 
>> See last quoted sentence from:
>> 
>> https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
>> 
>>>> Service names are assigned on a first-come, first-served process, as
>>>> documented in [RFC6335].
>>>> 
>>>> Port numbers are assigned in various ways, based on three ranges: System
>>>> Ports (0-1023), User Ports (1024-49151), and the Dynamic and/or Private
>>>> Ports (49152-65535); the difference uses of these ranges is described in
>>>> [RFC6335]. According to Section 8.1.2 of [RFC6335], System Ports are
>>>> assigned by the "IETF Review" or "IESG Approval" procedures described in
>>>> [RFC8126]. User Ports are assigned by IANA using the "IETF Review" process,
>>>> the "IESG Approval" process, or the "Expert Review" process, as per
>>>> [RFC6335]. Dynamic Ports are not assigned.
>>>> 
>>>> The registration procedures for service names and port numbers are
>>>> described in [RFC6335].
>>>> 
>>>> Assigned ports both System and User ports SHOULD NOT be used without
>>>> or prior to IANA registration.
>> 
>> 
>> Tom.
> 
> At Steve's request, I've filed a bug against libtirpc:
> 
> https://bugzilla.linux-nfs.org/show_bug.cgi?id=320
> 
> to document the issue and the rationales for alternate solutions.
> 
> I'm fairly confident that bindresvport(3) is never necessary for
> svc_tli_create(3). It is arguably also not appropriate for
> clnt_tli_create(3). Therefore IMO it should be removed from those code
> paths. That by itself would provide some relief and would eliminate
> the need to alter the current bindresvport(3) implementation (say, by
> introducing a blacklisting mechanism).
> 
> As Tom mentioned above, RFC 6335 describes a port range that will
> never interfere with service ports allocated by IANA. This range is
> known as the Dynamic or Private port range (49152 - 65535). On my
> systems, bind(3) already frequently allocates from the Dynamic port
> range purely by chance.
> 
> To completely prevent the accidental allocation of a well-known
> service port, a special internal wrapper for the bind(3) system call
> (similar to bindresvport(3)) can be constructed for libtirpc that
> allocates only from the Dynamic port range whenever a caller does not
> specify a port, making libtirpc adhere to the Best Common Practices
> outlined in RFC 6335, and thereby closing this window for user space
> RPC services completely.
> 
> A more thorough solution IMO would be to fix up the bind(3) system
> call to allocate only from the Dynamic port range whenever a caller
> does not specify a port. This would take care of not only user space
> RPC services but of all dynamically allocated ports on the system,
> including ports dynamically allocated in the kernel.

Replace "bind(3)" with "bind(2)" throughout. Oops.

--
Chuck Lever
chucklever@xxxxxxxxx



--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux