Jak uruchomić polecenie w chroot jail nie jako root i bez sudo?

Konfiguruję minimalny chroot i chcę uniknąć sudo lub su w nim, ale nadal uruchamiam moje procesy jako non-root. Jest to trochę sztuczki, ponieważ uruchamianie chroot wymaga roota. Mógłbym napisać program, który to robi, który wyglądałby mniej więcej tak:

uid = LookupUser(args[username])  // no /etc/passwd in jail
chroot(args[newroot])
cd("/")
setuids(uid)
execve(args[exe:])

To moja najlepsza szansa, czy jest jakieś standardowe narzędzie, które robi to za mnie?


I turned my own here :

Author: Community, 2010-09-17

5 answers

Jeśli wywołasz chroot z roota, opcja chroot--userspec=USER:GROUP uruchomi polecenie pod Nie-root UID/GID.

Przy okazji, opcja '--userspec ' jest po raz pierwszy wprowadzona w coreutils-7.5 zgodnie z repozytorium git git://git.sv.gnu.org/coreutils.

 25
Author: kamae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-08 20:51:00

Fakechroot , w połączeniu z fakeroot, pozwoli Ci to zrobić. Sprawią, że wszystkie uruchomione programy będą działać tak, jakby były uruchamiane w chroot jako root, ale w rzeczywistości będą działać tak, jak ty.

Zobacz także stronę Man fakechroota .

 18
Author: Eric Warmenhoven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-17 20:25:30

Możesz skorzystać z możliwości Linuksa, aby dać swojej binarce możliwość wywołania chroot () bez bycia rootem. Jako przykład można to zrobić z chroot binarnym. Jako non-root, normalnie dostałbyś to:

$ chroot /tmp/
chroot: cannot change root directory to /tmp/: Operation not permitted

Ale po uruchomieniu setcap komendy:

sudo setcap cap_sys_chroot+ep /usr/sbin/chroot 

Pozwoli Ci wykonać wywołanie chroot.

Nie polecam ci tego zrobić w systemie chroot, żebyś zamiast tego zrobił to w swoim własnym programie i wywołał chroot. W ten sposób masz większą kontrolę nad tym, co się dzieje, a Ty może nawet zrezygnować z przywileju cap_sys_chroot po wywołaniu go, więc kolejne wywołania chroot w twoim programie nie powiodą się.

 9
Author: Corey Henderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-20 16:15:15

Niestandardowy chrooter wcale nie jest trudny do napisania:

#define _BSD_SOURCE
#include <stdio.h>
#include <unistd.h>
const char newroot[]="/path/to/chroot";
int main(int c, char **v, char **e) {
    int rc; const char *m;
    if ( (m="chdir" ,rc=chdir(newroot)) == 0
      && (m="chroot",rc=chroot(newroot)) == 0
      && (m="setuid",rc=setuid(getuid())) == 0 )
            m="execve", execve(v[1],v+2,e);
    perror(m);
    return 1;
}

Utwórz ten root setuid i należy do grupy niestandardowej, do której dodajesz ulubionego użytkownika (i nie ma 'innego' dostępu).

 9
Author: jthill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-12 01:41:28

Możesz użyć kontenerów Linuksa do stworzenia środowiska chroot, które jest w zupełnie innej przestrzeni nazw (IPC, filesytem, a nawet sieci)

Istnieje nawet LXD, który jest w stanie zarządzać tworzeniem kontenerów opartych na obrazach i skonfigurować je tak, aby działały jako użytkownicy nieuprzywilejowani, tak że jeśli niezaufany kod uda się jakoś uciec z kontenera, będzie mógł wykonać kod tylko jako nieuprzywilejowany użytkownik, a nie jako główny system.

Wyszukaj 'kontenery Linux' i 'LXD' w Twojej ulubionej wyszukiwarce;)

 2
Author: mike510a,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-18 12:26:53