Date: Sun, 2 Feb 1997 04:57:29 +1100 (EST) From: Julian Assange <proff@iq.org> To: FreeBSD-gnats-submit@freebsd.org, rms@gnu.ai.mit.edu, dyson@freebsd.org Subject: bin/2634: <Synopsis of the problem (one line)> rtld patches for easy creation of chroot enviroments Message-ID: <199702011757.EAA07388@profane.iq.org> Resent-Message-ID: <199702011800.KAA02204@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 2634 >Category: bin >Synopsis: rtld patches for easy creation of chroot enviroments >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Class: change-request >Submitter-Id: current-users >Arrival-Date: Sat Feb 1 10:00:01 PST 1997 >Last-Modified: >Originator: Julian Assange >Organization: >Release: FreeBSD 3.0-CURRENT i386 >Environment: >Description: [note to rms: can you bounce this to whoever is responsible for gnu rtld? my distribution doesn't have any contact details :(] Creation of chrooted() enviroments is normally quite a difficult affair and impossible to do securely without source modification of the program to be executed [otherwise you have executeables or shared library images in the chrooted() area]. The following patches allow very easy creation of chrooted areas, without source modification, or unsafe static linking or copying of library images. e.g # export LD_CHROOT=/usr/local/chroot/named # named >How-To-Repeat: >Fix: --- src/gnu/usr.bin/ld/rtld/rtld.c~ Sun Feb 2 04:29:16 1997 +++ src/gnu/usr.bin/ld/rtld/rtld.c Sun Feb 2 04:21:36 1997 @@ -194,6 +194,7 @@ static char *ld_tracing; static char *ld_suppress_warnings; static char *ld_warn_non_pure_code; +static char *ld_chroot; struct so_map *link_map_head; struct so_map *link_map_tail; @@ -411,6 +412,13 @@ (void)close(crtp->crt_ldfd); anon_close(); + if (ld_chroot) { + if (chdir(ld_chroot) !=0 || + chroot(ld_chroot) !=0 || + chdir("/") !=0) + err(1, "LD_CHROOT(%s) failed", ld_chroot); + } + return LDSO_VERSION_HAS_DLEXIT; } @@ -2037,6 +2045,7 @@ L("LD_BIND_NOW=", 0, &ld_bind_now) L("LD_SUPPRESS_WARNINGS=", 0, &ld_suppress_warnings) L("LD_WARN_NON_PURE_CODE=", 0, &ld_warn_non_pure_code) + L("LD_CHROOT=", 1, &ld_chroot) { NULL, 0, NULL } }; #undef L --- src/gnu/usr.bin/ld/rtld/rtld.1~ Sun Feb 2 04:29:10 1997 +++ src/gnu/usr.bin/ld/rtld/rtld.1 Sun Feb 2 04:24:51 1997 @@ -117,6 +117,9 @@ the directories specified by LD_LIBRARY_PATH will be searched first followed by the set of built-in standard directories. This is ignored for set-user-ID and set-group-ID programs. +.It Ev LD_CHROOT +Directory to chroot() to immediately after linking. +This is ignored for set-user-ID and set-group-ID programs. .It Ev LD_BIND_NOW When set to a nonempty string, causes .Nm @@ -219,6 +222,7 @@ .Sh SEE ALSO .Xr ld 1 , .Xr link 5 , -.Xr ldconfig 8 +.Xr ldconfig 8 , +.Xr chroot 2 .Sh HISTORY The shared library model employed first appeared in SunOS 4.0 >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199702011757.EAA07388>