Disable tracing on FreeBSD using procctl. (OpenSSH Portable 8.8)
mike tancsa
mike at sentex.net
Fri Oct 15 21:04:21 AEDT 2021
On 10/14/2021 10:32 PM, Darren Tucker wrote:
> On Fri, 15 Oct 2021 at 13:15, mike tancsa <mike at sentex.net> wrote:
> [...]
>> OK, I think its related to these settings. On my RELENG_13 box, if I set
>> these vals, the sftp fails
>>
>> sftp-server[22121]: fatal: unable to make the process untraceable: No
>> such process
>>
>> sysctl -w security.bsd.see_other_uids=0
>> sysctl -w security.bsd.see_other_gids=0
> The call is:
> procctl(P_PID, 0, PROC_TRACE_CTL, &disable_trace)
>
> The second argument is PID, presumably pid 0 is an alias for its own
> pid although the man page does not mention this. Does it work if you
> replace the 0 with getpid() ?
Thanks Darren! That seems to fix it both in my jailed instance on
RELENG_12 as well as on a couple of RELENG_13 boxes I tested on. I
tested with the attached diff against what was in the portable tarball.
I am not sure including the pid in the fatal error message is safe or
not, but I put it in there but it never got to that stage in my testing.
---Mike
-------------- next part --------------
--- platform-tracing.c 2021-09-26 10:03:19.000000000 -0400
+++ /tmp/platform-tracing.c 2021-10-15 06:00:05.606329000 -0400
@@ -15,7 +15,10 @@
*/
#include "includes.h"
-
+#if defined(HAVE_PROCCTL)
+#include <string.h>
+#include <unistd.h>
+#endif
#include <sys/types.h>
#ifdef HAVE_SYS_PROCCTL_H
#include <sys/procctl.h>
@@ -40,22 +43,25 @@
/* On FreeBSD, we should make this process untraceable */
int disable_trace = PROC_TRACE_CTL_DISABLE;
- if (procctl(P_PID, 0, PROC_TRACE_CTL, &disable_trace) && strict)
- fatal("unable to make the process untraceable");
+ if (procctl(P_PID, getpid(), PROC_TRACE_CTL, &disable_trace) && strict)
+ fatal("unable to make the process untraceable: %s for pid %d",
+ strerror(errno), (int)getpid());
#endif
#if defined(HAVE_PRCTL) && defined(PR_SET_DUMPABLE)
/* Disable ptrace on Linux without sgid bit */
if (prctl(PR_SET_DUMPABLE, 0) != 0 && strict)
- fatal("unable to make the process undumpable");
+ fatal("unable to make the process undumpable: %s",
+ strerror(errno));
#endif
#if defined(HAVE_SETPFLAGS) && defined(__PROC_PROTECT)
/* On Solaris, we should make this process untraceable */
if (setpflags(__PROC_PROTECT, 1) != 0 && strict)
- fatal("unable to make the process untraceable");
+ fatal("unable to make the process untraceable: %s",
+ strerror(errno));
#endif
#ifdef PT_DENY_ATTACH
/* Mac OS X */
if (ptrace(PT_DENY_ATTACH, 0, 0, 0) == -1 && strict)
- fatal("unable to set PT_DENY_ATTACH");
+ fatal("unable to set PT_DENY_ATTACH: %s", strerror(errno));
#endif
}
More information about the openssh-unix-dev
mailing list