From: Vitaly Chikunov <vt@altlinux.org> To: ALT Linux kernel packages development <devel-kernel@lists.altlinux.org> Subject: Re: [d-kernel] [PATCH] AltHa: handle setcap binaries in the same way as setuid ones Date: Fri, 20 May 2022 01:37:33 +0300 Message-ID: <20220519223733.dbqtt3attdsq5zhb@altlinux.org> (raw) In-Reply-To: <YoZFAUH3WO5WkhHq@portlab> Vladimir, On Thu, May 19, 2022 at 04:24:17PM +0300, Vladimir D. Seleznev wrote: > On Thu, May 19, 2022 at 03:09:23AM +0300, Vitaly Chikunov wrote: > > > /* when it's not a shebang issued script interpreter */ > > > if (rstrscript_enabled && bprm->executable == bprm->interpreter) { > > > char *path_p; > > > @@ -267,11 +277,30 @@ static int altha_bprm_creds_from_file(struct linux_binprm *bprm, struct file * f > > > up_read(&interpreters_sem); > > > kfree(path_buffer); > > > } > > > - if (unlikely(nosuid_enabled && > > > - !uid_eq(bprm->cred->uid, bprm->cred->euid))) { > > > + if (nosuid_enabled) { > > > char *path_p; > > > char *path_buffer; > > > - uid_t cur_uid; > > > + int is_setuid = 0, is_setcap = 0; > > > + uid_t cur_uid, cur_euid; > > > + > > > + is_setuid = !uid_eq(bprm->cred->uid, bprm->cred->euid); > > > > It seems we want to restrict root to suid into user too, because this > > way of switching users is never used. Perhaps, this decision should be > > documented in comments. > > Or we can restrict only switching to superuser. What do you think would > be a correct way? I'm not that perfectionist. > > > > + > > > + if (!is_setuid) { > > > + cur_euid = from_kuid(bprm->cred->user_ns, bprm->cred->euid); > > > + if (cur_euid != (uid_t) 0) > > > + is_setcap = has_any_caps(bprm->cred); > > > > Perhaps, this should also be documented in comment why such complicated > > logic of setting `is_setcap`. -- Because, exec by root always have > > capabilities which does not imply setcap and you want to avoid this > > situation and accidental drop of legitimate root capabilities. > > Isn't that obvious? It's obvious only for people who know well what is bprm->cred at the time of this LSM hook. > > > + /* If no suid and no caps detected, exit. */ > > > + if (!is_setuid && !is_setcap) > > > + return 0; > > > ... > > > + if (is_setuid) > > > + bprm->cred->euid = bprm->cred->uid; > > > + cap_clear(bprm->cred->cap_permitted); > > > + cap_clear(bprm->cred->cap_effective); > > > > Any exec under root will drop privileges, is it intended? > > No, this code does not run if there is no either setuid or setcap. > Everything is fine. You are right. Thanks,
next prev parent reply other threads:[~2022-05-19 22:37 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-05-18 15:24 [d-kernel] AltHa: handle setcap binaries in the same way as setuid ones (Was: AltHa: nosuid handles capabilities as well) Vladimir D. Seleznev 2022-05-18 15:24 ` [d-kernel] [PATCH] AltHa: handle setcap binaries in the same way as setuid ones Vladimir D. Seleznev 2022-05-19 0:09 ` Vitaly Chikunov 2022-05-19 13:24 ` Vladimir D. Seleznev 2022-05-19 22:37 ` Vitaly Chikunov [this message] 2022-05-18 22:25 ` [d-kernel] AltHa: handle setcap binaries in the same way as setuid ones (Was: AltHa: nosuid handles capabilities as well) Vitaly Chikunov
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=20220519223733.dbqtt3attdsq5zhb@altlinux.org \ --to=vt@altlinux.org \ --cc=devel-kernel@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 kernel packages development This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel-kernel/0 devel-kernel/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-kernel devel-kernel/ http://lore.altlinux.org/devel-kernel \ devel-kernel@altlinux.org devel-kernel@altlinux.ru devel-kernel@altlinux.com public-inbox-index devel-kernel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel-kernel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git