ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [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