From: <rsbecker@nexbridge.com> To: "'Junio C Hamano'" <gitster@pobox.com>, "'Carlo Marcelo Arenas Belón'" <carenas@gmail.com> Cc: <git@vger.kernel.org> Subject: RE: [PATCH v2 3/3] t: add tests for safe.directory when running with sudo Date: Thu, 28 Apr 2022 15:53:12 -0400 [thread overview] Message-ID: <000001d85b39$9d5cfc90$d816f5b0$@nexbridge.com> (raw) In-Reply-To: <xmqq7d79du6c.fsf@gitster.g> On April 28, 2022 12:55 PM, Junio C Hamano wrote: >Carlo Marcelo Arenas Belón <carenas@gmail.com> writes: > >> +test_description='verify safe.directory checks while running as root' >> + >> +. ./test-lib.sh >> + >> +if [ "$IKNOWWHATIAMDOING" != "YES" ]; then > >Style. > > if test "$IKNOWWHATIAMDOING" != "YES" > then > >> +is_root() { >> + test -n "$1" && CMD="sudo -n" >> + test $($CMD id -u) = $(id -u root) >> +} > >Style. > > is_root () { > ... body .. > >But more importantly, why do we need this in the first place? >SANITY prerequisite checks if the user is running as root or non-root---can't we >use it here? > >Or perhaps my reading is wrong? I assumed from its name that it was just "see if >we are running as user 'root' and return 0 or non-zero to answer", but if it does >more than that, like priming "sudo", then probably it is misnamed. > >> +test_lazy_prereq SUDO ' >> + is_root sudo && >> + ! sudo grep -E '^[^#].*secure_path' /etc/sudoers ' /etc/sudoers is not standard although usual. This path should come from a knob somewhere. We can't run this test on our x86 system anyway - no access to root or sudo even though it is installed. Also, /etc/sudoers is typically secured 0600 so the grep will fail even if is_root passes - and I'm worried about the portability of is_root, which is mostly Linux. >OK. > >> +test_lazy_prereq ROOT ' >> + is_root >> +' >> + >> +test_expect_success SUDO 'setup' ' >> + sudo rm -rf root && >> + mkdir -p root/r && >> + sudo chown root root && >> + ( >> + cd root/r && >> + git init >> + ) >> +' > >We have a root-owned directory "root" with a subdirectory "r" owned by us. We >want to be able to use our "root/r" directory as a repository. OK. > >The prerequisite allows this test to be started as root, but I do not quite see the >point. It may pass when started as root, but it is not testing what this test is >designed to check (i.e. an ordinary user who has repository at root/r can do things >there). > >> +test_expect_success SUDO 'sudo git status as original owner' ' >> + ( >> + cd root/r && >> + git status && >> + sudo git status >> + ) >> +' > >And the directory can be used by the user under "sudo", too. Good. > >The same "this is allowed to run as root, but why?" question applies. If this was >started by 'root', root, root/r and root/r/.git all are owned by 'root' and we are >checking if 'root' >can run 'git status' as 'root' (or 'root' via sudo) there. Such a test may well pass, but >it is not catching a future regression on the code you wrote for this series. > >> +test_expect_success SUDO 'setup root owned repository' ' >> + sudo mkdir -p root/p && >> + sudo git init root/p >> +' > >Now we go on to create root owned repository at root/p > >> +test_expect_success SUDO,!ROOT 'can access if owned by root' ' >> + ( >> + cd root/p && >> + test_must_fail git status >> + ) >> +' > >And as an ordinary user, we fail to access a repository that is owned by a wrong >person (i.e. root). !ROOT (or SANITY) prereq should be there NOT because the >test written here would fail if run by root, but because running it as root, even if >passed, is totally pointless, because we are *not* testing "person A has a >repository, person B cannot access it" combination. > >The other side of the same coin is that the lack of !ROOT (or >SANITY) prereq in earlier tests I pointed out above misses the point of why we >have prerequisite mechanism in the first place. It is not to mark a test that fails >when the precondition is not met. It is to avoid running code that would NOT test >what we want to test. > >The difference is that a test that passes for a wrong reason (e.g. we wanted to see >of person A can access a repository of their own even when the user identity is >tentatively switched to 'root' >via 'sudo'---if person A is 'root', the access will be granted even if the special code >to handle 'sudo' situation we have is broken) should also be excluded with >prerequisite. > >> +test_expect_success SUDO,!ROOT 'can access with sudo' ' >> + # fail to access using sudo >> + ( >> + # TODO: test_must_fail missing functionality > >Care to explain a bit in the log message or in this comment the reason why we do >not use test_must_fail but use ! here? Are we over-eager to reject anything non >"git" be fed, or something? > >> + cd root/p && >> + ! sudo git status >> + ) >> +' > >The repository is owned by 'root', but because of the 'sudo' >"support", you cannot access the repository with "sudo git". > >The test title needs updating. We expect that the repository cannot be accessed >under sudo. > >> +test_expect_success SUDO 'can access with workaround' ' > >"workarounds", I think. > >> + # provide explicit GIT_DIR >> + ( >> + cd root/p && >> + sudo sh -c " >> + GIT_DIR=.git GIT_WORK_TREE=. git status >> + " >> + ) && >> + # discard SUDO_UID >> + ( >> + cd root/p && >> + sudo sh -c " >> + unset SUDO_UID && >> + git status >> + " >> + ) >> +' > >Again, this lack !ROOT (or SANITY) because tests pass for a wrong reason. > >Overall, I like the simplicity and clarity of "do not start this test as 'root'" in the >previous round much better. > >But other than that, the test coverage given by this patch looks quite sensible. > >Thanks. > >> + >> +test_expect_success SUDO 'cleanup' ' >> + sudo rm -rf root >> +' >> + >> +test_done
next prev parent reply other threads:[~2022-04-28 19:53 UTC|newest] Thread overview: 170+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-04-26 18:31 [RFC PATCH] git-compat-util: avoid failing dir ownership checks if running priviledged Carlo Marcelo Arenas Belón 2022-04-26 19:48 ` Derrick Stolee 2022-04-26 19:56 ` Junio C Hamano 2022-04-26 20:10 ` rsbecker 2022-04-26 20:45 ` Carlo Arenas 2022-04-26 21:10 ` Junio C Hamano 2022-04-26 20:12 ` Carlo Arenas 2022-04-26 20:26 ` Carlo Arenas 2022-04-29 16:16 ` Derrick Stolee 2022-04-27 0:05 ` [PATCH] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-04-27 9:33 ` Phillip Wood 2022-04-27 12:30 ` Phillip Wood 2022-04-27 14:15 ` rsbecker 2022-04-27 15:58 ` Carlo Arenas 2022-04-27 16:14 ` Phillip Wood 2022-04-27 18:54 ` Junio C Hamano 2022-04-27 20:59 ` Carlo Arenas 2022-04-27 21:09 ` rsbecker 2022-04-27 21:25 ` Junio C Hamano 2022-04-28 17:56 ` Phillip Wood 2022-04-27 15:38 ` Carlo Arenas 2022-04-27 15:50 ` rsbecker 2022-04-27 16:19 ` Junio C Hamano 2022-04-27 16:45 ` Carlo Arenas 2022-04-27 17:22 ` Phillip Wood 2022-04-27 17:49 ` rsbecker 2022-04-27 17:54 ` Carlo Arenas 2022-04-27 18:05 ` rsbecker 2022-04-27 18:11 ` Carlo Arenas 2022-04-27 18:16 ` rsbecker 2022-04-27 16:31 ` Phillip Wood 2022-04-27 16:54 ` Carlo Arenas 2022-04-27 17:28 ` Phillip Wood 2022-04-27 17:49 ` Carlo Arenas 2022-04-27 22:26 ` [RFC PATCH v2] " Carlo Marcelo Arenas Belón 2022-04-27 22:33 ` Junio C Hamano 2022-04-28 3:35 ` [PATCH 0/2] fix `sudo make install` regression in maint Carlo Marcelo Arenas Belón 2022-04-28 3:35 ` [PATCH 1/2] Documentation: explain how safe.directory works when running under sudo Carlo Marcelo Arenas Belón 2022-04-28 5:17 ` Junio C Hamano 2022-04-28 5:58 ` Carlo Arenas 2022-04-28 6:41 ` Junio C Hamano 2022-04-28 3:35 ` [PATCH 2/2] t: add tests for safe.directory when running with sudo Carlo Marcelo Arenas Belón 2022-04-28 5:34 ` Junio C Hamano 2022-04-28 4:57 ` [PATCH 0/2] fix `sudo make install` regression in maint Junio C Hamano 2022-04-28 10:58 ` [PATCH v2 0/3] " Carlo Marcelo Arenas Belón 2022-04-28 10:58 ` [PATCH v2 1/3] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-04-28 18:02 ` Phillip Wood 2022-04-28 18:57 ` Carlo Arenas 2022-04-28 10:58 ` [PATCH v2 2/3] Documentation: explain how safe.directory works when running under sudo Carlo Marcelo Arenas Belón 2022-04-30 6:17 ` Bagas Sanjaya 2022-04-30 6:39 ` Junio C Hamano 2022-04-30 14:15 ` Carlo Marcelo Arenas Belón 2022-04-28 10:58 ` [PATCH v2 3/3] t: add tests for safe.directory when running with sudo Carlo Marcelo Arenas Belón 2022-04-28 16:55 ` Junio C Hamano 2022-04-28 18:08 ` Phillip Wood 2022-04-28 18:12 ` Junio C Hamano 2022-05-06 17:50 ` Carlo Arenas 2022-05-06 21:43 ` Junio C Hamano 2022-05-06 22:57 ` Carlo Arenas 2022-05-06 23:55 ` Junio C Hamano 2022-05-07 11:57 ` Carlo Marcelo Arenas Belón 2022-04-28 19:53 ` rsbecker [this message] 2022-04-28 20:22 ` Carlo Arenas 2022-04-28 20:43 ` rsbecker 2022-04-28 20:51 ` Junio C Hamano 2022-04-28 20:56 ` Carlo Arenas 2022-04-28 21:55 ` rsbecker 2022-04-28 22:21 ` Junio C Hamano 2022-04-28 22:45 ` rsbecker 2022-04-28 20:46 ` Junio C Hamano 2022-04-28 20:32 ` Junio C Hamano 2022-04-28 20:40 ` rsbecker 2022-04-28 20:48 ` Carlo Arenas 2022-04-28 21:02 ` Carlo Arenas 2022-04-28 21:07 ` Junio C Hamano 2022-04-29 1:24 ` Carlo Marcelo Arenas Belón 2022-04-29 18:50 ` Junio C Hamano 2022-04-29 20:05 ` Carlo Marcelo Arenas Belón 2022-05-02 18:39 ` [RFC PATCH v3 0/3] fix `sudo make install` regression in maint Carlo Marcelo Arenas Belón 2022-05-02 18:39 ` [RFC PATCH v3 1/3] t: document regression git safe.directory when using sudo Carlo Marcelo Arenas Belón 2022-05-02 21:35 ` Junio C Hamano 2022-05-02 23:07 ` Carlo Arenas 2022-05-02 18:39 ` [RFC PATCH v3 2/3] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-05-02 18:39 ` [RFC PATCH v3 3/3] t0034: enhance framework to allow testing more commands under sudo Carlo Marcelo Arenas Belón 2022-05-02 22:10 ` Junio C Hamano 2022-05-03 0:00 ` Carlo Arenas 2022-05-03 6:54 ` [PATCH v3 0/3] fix `sudo make install` regression in maint Carlo Marcelo Arenas Belón 2022-05-03 6:54 ` [PATCH v3 1/3] t: document regression git safe.directory when using sudo Carlo Marcelo Arenas Belón 2022-05-03 14:03 ` Phillip Wood 2022-05-03 15:56 ` Carlo Marcelo Arenas Belón 2022-05-04 11:15 ` Phillip Wood 2022-05-04 13:02 ` Carlo Arenas 2022-05-04 14:11 ` Phillip Wood 2022-05-05 13:44 ` Johannes Schindelin 2022-05-05 14:34 ` Phillip Wood 2022-05-05 15:50 ` Junio C Hamano 2022-05-05 18:33 ` Junio C Hamano 2022-05-05 19:39 ` Junio C Hamano 2022-05-06 21:03 ` Carlo Arenas 2022-05-09 8:21 ` Phillip Wood 2022-05-09 14:51 ` Carlo Arenas 2022-05-09 15:18 ` Phillip Wood 2022-05-09 16:01 ` Junio C Hamano 2022-05-09 16:21 ` Carlo Arenas 2022-05-06 17:39 ` Carlo Arenas 2022-05-03 6:54 ` [PATCH v3 2/3] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-05-05 14:01 ` Johannes Schindelin 2022-05-05 14:32 ` Phillip Wood 2022-05-06 19:15 ` Carlo Arenas 2022-05-06 20:00 ` Junio C Hamano 2022-05-06 20:22 ` Carlo Arenas 2022-05-06 20:59 ` Junio C Hamano 2022-05-06 21:40 ` Carlo Arenas 2022-05-06 21:07 ` rsbecker 2022-05-05 16:09 ` Junio C Hamano 2022-05-06 20:02 ` Carlo Arenas 2022-05-03 6:54 ` [PATCH v3 3/3] t0034: enhance framework to allow testing more commands under sudo Carlo Marcelo Arenas Belón 2022-05-03 14:12 ` Phillip Wood 2022-05-03 15:27 ` Junio C Hamano 2022-05-06 16:54 ` Carlo Arenas 2022-05-07 16:35 ` [RFC PATCH v4 0/3] fix `sudo make install` regression in maint Carlo Marcelo Arenas Belón 2022-05-07 16:35 ` [RFC PATCH v4 1/3] t: regression git needs safe.directory when using sudo Carlo Marcelo Arenas Belón 2022-05-07 16:35 ` [RFC PATCH v4 2/3] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-05-07 17:34 ` Junio C Hamano 2022-05-07 18:56 ` Carlo Marcelo Arenas Belón 2022-05-09 16:54 ` Junio C Hamano 2022-05-09 17:36 ` rsbecker 2022-05-09 18:48 ` Carlo Arenas 2022-05-09 19:16 ` rsbecker 2022-05-09 19:41 ` Junio C Hamano 2022-05-07 16:35 ` [RFC PATCH v4 3/3] t0034: add negative tests and allow git init to mostly work under sudo Carlo Marcelo Arenas Belón 2022-05-10 14:17 ` [RFC PATCH v4 0/3] fix `sudo make install` regression in maint Phillip Wood 2022-05-10 15:47 ` Carlo Arenas 2022-05-10 17:46 ` [PATCH " Carlo Marcelo Arenas Belón 2022-05-10 17:46 ` [PATCH v4 1/3] t: regression git needs safe.directory when using sudo Carlo Marcelo Arenas Belón 2022-05-10 22:10 ` Junio C Hamano 2022-05-10 23:11 ` Carlo Arenas 2022-05-10 23:44 ` Junio C Hamano 2022-05-11 0:56 ` Carlo Arenas 2022-05-11 1:11 ` Junio C Hamano 2022-05-10 17:46 ` [PATCH v4 2/3] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-05-10 22:57 ` Junio C Hamano 2022-05-11 7:34 ` Carlo Arenas 2022-05-11 14:58 ` Junio C Hamano 2022-05-10 17:46 ` [PATCH v4 3/3] t0034: add negative tests and allow git init to mostly work under sudo Carlo Marcelo Arenas Belón 2022-05-10 23:11 ` Junio C Hamano 2022-05-10 23:25 ` Junio C Hamano 2022-05-11 14:04 ` Carlo Arenas 2022-05-11 15:29 ` Junio C Hamano 2022-05-13 1:00 ` [PATCH v5 0/4] fix `sudo make install` regression in maint Carlo Marcelo Arenas Belón 2022-05-13 1:00 ` [PATCH v5 1/4] t: regression git needs safe.directory when using sudo Carlo Marcelo Arenas Belón 2022-06-03 12:12 ` SZEDER Gábor 2022-05-13 1:00 ` [PATCH v5 2/4] git-compat-util: avoid failing dir ownership checks if running privileged Carlo Marcelo Arenas Belón 2022-06-03 11:05 ` SZEDER Gábor 2022-06-03 16:54 ` Junio C Hamano 2022-06-03 17:34 ` SZEDER Gábor 2022-05-13 1:00 ` [PATCH v5 3/4] t0034: add negative tests and allow git init to mostly work under sudo Carlo Marcelo Arenas Belón 2022-05-13 1:20 ` Junio C Hamano 2022-05-14 14:36 ` Carlo Arenas 2022-05-15 16:54 ` Junio C Hamano 2022-05-15 19:21 ` Carlo Arenas 2022-05-16 5:27 ` Junio C Hamano 2022-05-16 13:07 ` Carlo Marcelo Arenas Belón 2022-05-16 16:25 ` Junio C Hamano 2022-05-13 1:00 ` [PATCH v5 4/4] git-compat-util: allow root to access both SUDO_UID and root owned Carlo Marcelo Arenas Belón 2022-06-15 14:02 ` Johannes Schindelin 2022-06-17 14:26 ` Carlo Arenas 2022-06-17 16:00 ` Junio C Hamano 2022-06-17 20:23 ` [PATCH v6] " Carlo Marcelo Arenas Belón 2022-06-17 21:02 ` Junio C Hamano
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 List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='000001d85b39$9d5cfc90$d816f5b0$@nexbridge.com' \ --to=rsbecker@nexbridge.com \ --cc=carenas@gmail.com \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --subject='RE: [PATCH v2 3/3] t: add tests for safe.directory when running with sudo' \ /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
Code repositories for project(s) associated with this inbox: https://80x24.org/mirrors/git.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).