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 :
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
.
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 .
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ę.
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).
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;)
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