From: Alexey Sheplyakov <asheplyakov@basealt.ru> To: ALT Linux Team development discussions <devel@lists.altlinux.org> Subject: Re: [devel] Понижение прав с root не работает в alt-p8-rootfs-systemd Date: Mon, 20 Apr 2020 18:44:42 +0400 Message-ID: <20200420144442.GA11274@alexnuc> (raw) In-Reply-To: <284386a0-c81c-d81b-98fe-d3a46ca5aa86@rosalinux.ru> 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'а?
prev parent reply other threads:[~2020-04-20 14:44 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-04-18 14:12 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 [this message]
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200420144442.GA11274@alexnuc \ --to=asheplyakov@basealt.ru \ --cc=devel@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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