* [devel] Понижение прав с root не работает в alt-p8-rootfs-systemd @ 2020-04-18 14:12 Mikhail Novosyolov 2020-04-18 14:23 ` Alexey Sheplyakov 0 siblings, 1 reply; 6+ messages in thread From: Mikhail Novosyolov @ 2020-04-18 14:12 UTC (permalink / raw) To: ALT Linux Team development discussions Сделал chroot на основе http://ftp.altlinux.org/pub/distributions/ALTLinux/images/p8/cloud/alt-p8-rootfs-systemd-x86_64.tar.xz Создал пользователя (useradd --uid 1000 user) но не могу войти под этим пользователем: [root@pay2 /]# su - user su: exec failed [root@pay2 /]# strace -f su - user -c /bin/bash 2>&1 | grep bin/bash execve("/bin/su", ["su", "-", "user", "-c", "/bin/bash"], 0x7ffccf65b4a8 /* 30 vars */) = 0 [pid 37104] execve("/bin/bash", ["-bash", "-c", "/bin/bash"], 0x12fa9a0 /* 17 vars */) = -1 EAGAIN (Ресурс временно недоступен) [root@pay2 /]# sudo -u user -i -bash: fork: Ресурс временно недоступен -bash-3.2$ ls -bash: fork: Ресурс временно недоступен Как такое может быть?! control su public ожидаемо не помог. В /etc/pam.d/ ничего подозрительного не нашел. pam_securetty отключен. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] Понижение прав с root не работает в alt-p8-rootfs-systemd 2020-04-18 14:12 [devel] Понижение прав с root не работает в alt-p8-rootfs-systemd Mikhail Novosyolov @ 2020-04-18 14:23 ` Alexey Sheplyakov 2020-04-18 15:37 ` Mikhail Novosyolov 0 siblings, 1 reply; 6+ messages in thread From: Alexey Sheplyakov @ 2020-04-18 14:23 UTC (permalink / raw) To: ALT Linux Team development discussions On Sat, Apr 18, 2020 at 05:12:52PM +0300, Mikhail Novosyolov wrote: > Сделал chroot на основе http://ftp.altlinux.org/pub/distributions/ALTLinux/images/p8/cloud/alt-p8-rootfs-systemd-x86_64.tar.xz > > Создал пользователя (useradd --uid 1000 user) > > но не могу войти под этим пользователем: > > [root@pay2 /]# su - user > su: exec failed > > [root@pay2 /]# strace -f su - user -c /bin/bash 2>&1 | grep bin/bash > execve("/bin/su", ["su", "-", "user", "-c", "/bin/bash"], 0x7ffccf65b4a8 /* 30 vars */) = 0 > [pid 37104] execve("/bin/bash", ["-bash", "-c", "/bin/bash"], 0x12fa9a0 /* 17 vars */) = -1 EAGAIN (Ресурс временно недоступен) > > [root@pay2 /]# sudo -u user -i > -bash: fork: Ресурс временно недоступен > -bash-3.2$ ls > -bash: fork: Ресурс временно недоступен > > Как такое может быть?! ulimit -a Лимит на число процессов (на самом деле -- потоков) зачем-то выставлен в 512. Если у Вас в хост системе уже есть пользователь с UID 1000, и, например, запущен firefox с 100+ вкладок, desktop environment, и т.п., то шансов вписаться этот жлобский^W скудный лимит крайне мало. Пример. $ ps -T -u `whoami` |wc -l 806 Хранятся эти настройки в /etc/security/limits.conf (и еще в каком-то месте). ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] Понижение прав с root не работает в alt-p8-rootfs-systemd 2020-04-18 14:23 ` Alexey Sheplyakov @ 2020-04-18 15:37 ` Mikhail Novosyolov 2020-04-18 17:12 ` Ivan A. Melnikov 2020-04-20 14:44 ` Alexey Sheplyakov 0 siblings, 2 replies; 6+ messages in thread From: Mikhail Novosyolov @ 2020-04-18 15:37 UTC (permalink / raw) To: devel 18.04.2020 17:23, Alexey Sheplyakov пишет: > On Sat, Apr 18, 2020 at 05:12:52PM +0300, Mikhail Novosyolov wrote: >> Сделал chroot на основе http://ftp.altlinux.org/pub/distributions/ALTLinux/images/p8/cloud/alt-p8-rootfs-systemd-x86_64.tar.xz >> >> Создал пользователя (useradd --uid 1000 user) >> >> но не могу войти под этим пользователем: >> >> [root@pay2 /]# su - user >> su: exec failed >> >> [root@pay2 /]# strace -f su - user -c /bin/bash 2>&1 | grep bin/bash >> execve("/bin/su", ["su", "-", "user", "-c", "/bin/bash"], 0x7ffccf65b4a8 /* 30 vars */) = 0 >> [pid 37104] execve("/bin/bash", ["-bash", "-c", "/bin/bash"], 0x12fa9a0 /* 17 vars */) = -1 EAGAIN (Ресурс временно недоступен) >> >> [root@pay2 /]# sudo -u user -i >> -bash: fork: Ресурс временно недоступен >> -bash-3.2$ ls >> -bash: fork: Ресурс временно недоступен >> >> Как такое может быть?! > ulimit -a > > Лимит на число процессов (на самом деле -- потоков) зачем-то выставлен в 512. > Если у Вас в хост системе уже есть пользователь с UID 1000, и, например, > запущен firefox с 100+ вкладок, desktop environment, и т.п., то шансов > вписаться этот жлобский^W скудный лимит крайне мало. Пример. > > $ ps -T -u `whoami` |wc -l > 806 > > Хранятся эти настройки в /etc/security/limits.conf (и еще в каком-то месте). Не. Дело не в ulimit. В соседнем контейнере с запуском от UID=1000 нет проблем. Это именно в контейнере что-то не то. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] Понижение прав с root не работает в alt-p8-rootfs-systemd 2020-04-18 15:37 ` Mikhail Novosyolov @ 2020-04-18 17:12 ` Ivan A. Melnikov 2020-04-18 17:19 ` Vladimir D. Seleznev 2020-04-20 14:44 ` Alexey Sheplyakov 1 sibling, 1 reply; 6+ messages in thread From: Ivan A. Melnikov @ 2020-04-18 17:12 UTC (permalink / raw) To: ALT Linux Team development discussions On Sat, Apr 18, 2020 at 06:37:55PM +0300, Mikhail Novosyolov wrote: > 18.04.2020 17:23, Alexey Sheplyakov пишет: > > On Sat, Apr 18, 2020 at 05:12:52PM +0300, Mikhail Novosyolov wrote: > >> Сделал chroot на основе http://ftp.altlinux.org/pub/distributions/ALTLinux/images/p8/cloud/alt-p8-rootfs-systemd-x86_64.tar.xz > >> > >> Создал пользователя (useradd --uid 1000 user) > >> > >> но не могу войти под этим пользователем: > >> > >> [root@pay2 /]# su - user > >> su: exec failed > >> > >> [root@pay2 /]# strace -f su - user -c /bin/bash 2>&1 | grep bin/bash > >> execve("/bin/su", ["su", "-", "user", "-c", "/bin/bash"], 0x7ffccf65b4a8 /* 30 vars */) = 0 > >> [pid 37104] execve("/bin/bash", ["-bash", "-c", "/bin/bash"], 0x12fa9a0 /* 17 vars */) = -1 EAGAIN (Ресурс временно недоступен) > >> > >> [root@pay2 /]# sudo -u user -i > >> -bash: fork: Ресурс временно недоступен > >> -bash-3.2$ ls > >> -bash: fork: Ресурс временно недоступен > >> > >> Как такое может быть?! > > ulimit -a > > > > Лимит на число процессов (на самом деле -- потоков) зачем-то выставлен в 512. > > Если у Вас в хост системе уже есть пользователь с UID 1000, и, например, > > запущен firefox с 100+ вкладок, desktop environment, и т.п., то шансов > > вписаться этот жлобский^W скудный лимит крайне мало. Пример. > > > > $ ps -T -u `whoami` |wc -l > > 806 > > > > Хранятся эти настройки в /etc/security/limits.conf (и еще в каком-то месте). > Не. Дело не в ulimit. Если execve вернул EAGAIN, то скорее всего дело именно в нём. В том месте, где у Вас ls не запускается, посмотрите на ulimit -a, это builtin, ему вроде форк не нужен. > В соседнем контейнере с запуском от UID=1000 нет проблем. Так может он всё и исчерпал? -- wbr, iv m. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] Понижение прав с root не работает в alt-p8-rootfs-systemd 2020-04-18 17:12 ` Ivan A. Melnikov @ 2020-04-18 17:19 ` Vladimir D. Seleznev 0 siblings, 0 replies; 6+ messages in thread From: Vladimir D. Seleznev @ 2020-04-18 17:19 UTC (permalink / raw) To: ALT Linux Team development discussions On Sat, Apr 18, 2020 at 09:12:53PM +0400, Ivan A. Melnikov wrote: > On Sat, Apr 18, 2020 at 06:37:55PM +0300, Mikhail Novosyolov wrote: > > 18.04.2020 17:23, Alexey Sheplyakov пишет: > > > On Sat, Apr 18, 2020 at 05:12:52PM +0300, Mikhail Novosyolov wrote: > > >> Сделал chroot на основе http://ftp.altlinux.org/pub/distributions/ALTLinux/images/p8/cloud/alt-p8-rootfs-systemd-x86_64.tar.xz > > >> > > >> Создал пользователя (useradd --uid 1000 user) > > >> > > >> но не могу войти под этим пользователем: > > >> > > >> [root@pay2 /]# su - user > > >> su: exec failed > > >> > > >> [root@pay2 /]# strace -f su - user -c /bin/bash 2>&1 | grep bin/bash > > >> execve("/bin/su", ["su", "-", "user", "-c", "/bin/bash"], 0x7ffccf65b4a8 /* 30 vars */) = 0 > > >> [pid 37104] execve("/bin/bash", ["-bash", "-c", "/bin/bash"], 0x12fa9a0 /* 17 vars */) = -1 EAGAIN (Ресурс временно недоступен) > > >> > > >> [root@pay2 /]# sudo -u user -i > > >> -bash: fork: Ресурс временно недоступен > > >> -bash-3.2$ ls > > >> -bash: fork: Ресурс временно недоступен > > >> > > >> Как такое может быть?! > > > ulimit -a > > > > > > Лимит на число процессов (на самом деле -- потоков) зачем-то выставлен в 512. > > > Если у Вас в хост системе уже есть пользователь с UID 1000, и, например, > > > запущен firefox с 100+ вкладок, desktop environment, и т.п., то шансов > > > вписаться этот жлобский^W скудный лимит крайне мало. Пример. > > > > > > $ ps -T -u `whoami` |wc -l > > > 806 > > > > > > Хранятся эти настройки в /etc/security/limits.conf (и еще в каком-то месте). > > Не. Дело не в ulimit. > > Если execve вернул EAGAIN, то скорее всего дело именно в нём. > В том месте, где у Вас ls не запускается, посмотрите на > ulimit -a, это builtin, ему вроде форк не нужен. > > > В соседнем контейнере с запуском от UID=1000 нет проблем. > > Так может он всё и исчерпал? Очень удобно, что limits не виртуализируется. -- WBR, Vladimir D. Seleznev ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [devel] Понижение прав с root не работает в alt-p8-rootfs-systemd 2020-04-18 15:37 ` Mikhail Novosyolov 2020-04-18 17:12 ` Ivan A. Melnikov @ 2020-04-20 14:44 ` Alexey Sheplyakov 1 sibling, 0 replies; 6+ messages in thread From: Alexey Sheplyakov @ 2020-04-20 14:44 UTC (permalink / raw) To: ALT Linux Team development discussions On Sat, Apr 18, 2020 at 06:37:55PM +0300, Mikhail Novosyolov wrote: > [root@pay2 /]# strace -f su - user -c /bin/bash 2>&1 | grep bin/bash > execve("/bin/su", ["su", "-", "user", "-c", "/bin/bash"], 0x7ffccf65b4a8 /* 30 vars */) = 0 > [pid 37104] execve("/bin/bash", ["-bash", "-c", "/bin/bash"], 0x12fa9a0 /* 17 vars */) = -1 EAGAIN (Ресурс временно недоступен) Единственная ситуация, когда exec* возвращает EAGAIN -- превышение лимита RLIMIT_NPROC. Подробности описаны в `execve() and EAGAIN` в man execve [1] Кратко: когда-то давно seteeuid, setresuid со товарищи возвращали ошибку при превышении лимитов ресурсов (тем UID, на который пытались переключиться). Тем самым создавая предпосылки для дыр имени sendmail setuid [2]. Разработчики ядра решили, что сброс привилегий всегда должен работать, и перенесли проверку RLIMIT_NPROC из set*[ug]id в exec*. С тех пор exec* в случае превышения числа процессов^W потоков возвращает EAGAIN. [1] http://man7.org/linux/man-pages/man2/execve.2.html [2] https://seclists.org/bugtraq/2000/Jun/98 # strace -f -e setuid,execve su -l user -s /bin/true execve("/bin/su", ["su", "-l", "user", "-s", "/bin/true"], 0x7ffd053a22c8 /* 31 vars */) = 0 strace: Process 5089 attached [pid 5089] +++ exited with 0 +++ --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=5089, si_uid=0, si_status=0, si_utime=0, si_stime=0} --- setuid(0) = 0 strace: Process 5090 attached [pid 5090] setuid(1000) = 0 [pid 5090] execve("/bin/true", ["-true"], 0x1de9c40 /* 18 vars */) = -1 EAGAIN (Resource temporarily unavailable) su: exec failed [pid 5090] +++ exited with 1 +++ +++ exited with 1 +++ А теперь уберем лимиты: # mv /etc/security/limits.d /etc/security/limits.d.NONONO И попробуем еще раз # strace -f -e setuid,execve su -l user -s /bin/true execve("/bin/su", ["su", "-l", "user", "-s", "/bin/true"], 0x7ffd7883da48 /* 31 vars */) = 0 strace: Process 5151 attached [pid 5151] +++ exited with 0 +++ --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=5151, si_uid=0, si_status=0, si_utime=0, si_stime=0} --- setuid(0) = 0 strace: Process 5152 attached [pid 5152] setuid(1000) = 0 [pid 5152] execve("/bin/true", ["-true"], 0x1135c40 /* 18 vars */) = 0 [pid 5152] +++ exited with 0 +++ +++ exited with 0 +++ Замечу, что в обоих случаях собственно сборс привилегий (setuid(1000)) прошел успешно. > Не. Дело не в ulimit. Возможно. Не хватает информации, чтобы сделать такой вывод (возможно, Вы поменяли зловредные настройки по умолчанию). И для обратного заключения тоже не хватает информации. Поделитесь, пожалуйста, 1) выводом strace -f -e setuid,execve su -l user -s /bin/true 2) выводом sudo -u user -i ulimit -a (в этом chroot'е) 3) содержимым /etc/security/limits.conf /etc/security/limits.d/*.conf 4) если Ваш UID в хост системе тоже 1000, то и выводом ps -T -u `whoami` | wc -l (в host системе) > В соседнем контейнере с запуском от UID=1000 нет проблем. Это именно в контейнере что-то не то. В контейнере или chroot'е? (А еще точнее, UID namespace есть?) И там ровно те же настройки (limits.d/*.conf и прочий PAM)? А запускаете одновременно оба chroot'а? ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-04-20 14:44 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-04-18 14:12 [devel] Понижение прав с root не работает в alt-p8-rootfs-systemd Mikhail Novosyolov 2020-04-18 14:23 ` Alexey Sheplyakov 2020-04-18 15:37 ` Mikhail Novosyolov 2020-04-18 17:12 ` Ivan A. Melnikov 2020-04-18 17:19 ` Vladimir D. Seleznev 2020-04-20 14:44 ` Alexey Sheplyakov
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git