On Thu, Jan 24, 2019 at 06:06:30PM -0500, Antoine Beaupre wrote: > Package: sbuild > Version: 0.78.0-2 > Severity: normal > > I'm trying to setup sbuild so it builds under a different user by > default. The sbuild.conf(5) manpage says: > > BUILD_USER > STRING type. Username used for running dpkg-buildpackage. By > default the > user running sbuild is used within the chroot as well but that > might al‐ > low a process from within the chroot to break out of the > chroot by at‐ > taching to a process running outside the chroot with eg. gdb > and then be‐ > coming root inside the chroot through schroot and thus be able > to leave > the chroot. > > build_user = ...; > > I'm assuming the example code there is a typo and should be really: > > $build_user = 'sbuild'; > > ... so I add the above to my `.sbuildrc`. Then I try a build and it > fails early in the process: > > E: read_command failed to execute dpkg > Use of uninitialized value $chroot_arch in scalar chomp at > /usr/share/perl5/Sbui > ld/Build.pm line 3024. > > The "sbuild" user exists in the chroot: > > $ schroot -c unstable-amd64-sbuild --directory / id sbuild > uid=129(sbuild) gid=138(sbuild) groups=138(sbuild) > > I have tried to look at the line pointed at by the error message: > > chomp(my $chroot_arch = $self->get('Session')->read_command( > { COMMAND => ['dpkg', '--print-architecture'], > USER => $self->get_conf('BUILD_USER'), > PRIORITY => 0, > DIR => '/' })); > > .. but to figure out what the problem is, you need to dig into > `read_command`, which is quite a rabbit hole. It calls > Chroot::read_command which calls pipe_command, which calls > pipe_command_internal, which calls exec_command, and *then* we hit the > schroot specific code with get_command_internal, and *finally* > _get_exec_argv, which shows the user is passed to the `schroot -u` > argument. > > When trying to reproduce the problem outside of sbuild, I therefore > do: > > $ schroot -c unstable-amd64-sbuild --directory / -u sbuild id > [schroot] password for sbuild: > > I think that's where the problem lies: stdin is probably closed which > makes the command fail. Even if it would be open, the process would > just hang asking for a password, which doesn't exist (set to '*' in > /etc/shadow). > > If I run schroot as root, that works however: > > $ sudo schroot -c unstable-amd64-sbuild --directory / -u sbuild id > uid=129(sbuild) gid=138(sbuild) groups=138(sbuild) > > For what that's worth, the caller is in the `sbuild` group: > > $ grep sbuild /etc/group > sbuild:x:138:anarcat > > The schroot has that configuration: > > [unstable-amd64-sbuild] > description=Debian unstable/amd64 autobuilder > groups=root,sbuild > root-groups=root,sbuild > profile=sbuild > type=directory > directory=/home/chroot/unstable-amd64-sbuild > union-type=overlay > > So in *theory* it should allow users in the sbuild group to run > commands without entering a password. > > Am I missing something?
Here's the discussion Antoine and I had on IRC about this: [22:39:57] <anarcat> has anyone ever made $build_user work in sbuild? here it crashes with Use of uninitialized value $chroot_arch in scalar chomp at /usr/share/perl5/Sbuild/Build.pm line 3024. [22:53:04] <jrtc27> anarcat: sounds like your chroot doesn't have that user? [22:53:37] <jrtc27> sorry, *host* [22:53:43] <jrtc27> the user gets passed as schroot -u [22:54:01] <jrtc27> that or a perms issue [22:54:27] <jrtc27> or use pbuilder :P [23:05:04] <anarcat> i'll file a bug :p [23:05:13] <anarcat> jrtc27: sudo schroot -u sbuild works [23:05:19] <anarcat> but not as a regular user [23:18:30] <jrtc27> sure [23:18:44] <jrtc27> but you're not running sbuild under sudo [23:19:25] <jrtc27> so schroot is also run as you [23:20:30] <jrtc27> $build_user follows the rules of schroot -u argument, which is documented in its manpage under AUTHENTICATION [23:21:32] <anarcat> ... [23:21:38] <anarcat> so i need to enter the password of the sbuild user? [23:22:05] <anarcat> this makes no sense to me - i can run schroot as root, but not as the sbuild user?? [23:22:31] <jrtc27> agreed that it doesn't make much sense if you're in root-users/groups [23:23:08] <anarcat> there's also the problem that it doesn't "immediately fail with permission denied", it crashes with some unrelated, random message [23:23:35] <anarcat> anyways, enough for today, thanks for the feedback! [23:23:43] <jrtc27> well, yeah, the error running the command should be propagated up rather than the caller choking due to not getting output [23:23:56] <anarcat> bug is #920386 [23:24:02] <jrtc27> so I guess two bugs, one against sbuild and one against schroot :P