Support Capabilities for ssh client port forwarding

Alexey alukardd at alukardd.org
Mon Oct 10 23:56:35 AEDT 2016


Hello.

I think openssh-client should allow use port forwarding not only for 
root user.
CAP_NET_BIND_SERVICE enought to use privileged ports.

I do patch for myself, but I think, that you could improve it and apply 
to master.

--- openssh-7.3p1.orig/readconf.c
+++ openssh-7.3p1/readconf.c
@@ -15,6 +15,7 @@
  #include "includes.h"

  #include <sys/types.h>
+#include <sys/capability.h>
  #include <sys/stat.h>
  #include <sys/socket.h>
  #include <sys/wait.h>
@@ -327,7 +328,16 @@ add_local_forward(Options *options, cons
  	extern uid_t original_real_uid;
  	int i;

+	cap_flag_value_t cap_flag_value_e, cap_flag_value_p;
+	cap_t caps;
+
+	caps = cap_get_proc();
+	cap_get_flag(caps, CAP_NET_BIND_SERVICE, CAP_EFFECTIVE, 
&cap_flag_value_e);
+	cap_get_flag(caps, CAP_NET_BIND_SERVICE, CAP_PERMITTED, 
&cap_flag_value_p);
+
  	if (newfwd->listen_port < IPPORT_RESERVED && original_real_uid != 0 &&
+			(cap_flag_value_e != CAP_SET || cap_flag_value_p != CAP_SET) &&
  	    newfwd->listen_path == NULL)
  		fatal("Privileged ports can only be forwarded by root.");
  	/* Don't add duplicates */
--- openssh-7.3p1.orig/configure.ac
+++ openssh-7.3p1/configure.ac
@@ -775,6 +775,9 @@ main() { if (NSVersionOfRunTimeLibrary("
  	use_pie=auto
  	check_for_libcrypt_later=1
  	check_for_openpty_ctty_bug=1
+	# libcap
+	# use capabilities
+	LIBS="$LIBS -lcap"
  	AC_DEFINE([PAM_TTY_KLUDGE], [1],
  		[Work around problematic Linux PAM modules handling of PAM_TTY])
  	AC_DEFINE([LOCKED_PASSWD_PREFIX], ["!"],


And specify one more build dependencie: libcap-dev.

Regards,
Alexey Mochkin.


More information about the openssh-unix-dev mailing list