Bugzilla will be upgraded to version 5.0 on a still to be determined date in the near future. The original upgrade date has been delayed.
Bug 121629 - su ignores all options except -s shell when passed -s shell; effects /etc/init.d/functions daemon() function
su ignores all options except -s shell when passed -s shell; effects /etc/ini...
Product: Fedora
Classification: Fedora
Component: coreutils (Show other bugs)
All Linux
medium Severity medium
: ---
: ---
Assigned To: Tim Waugh
Depends On:
  Show dependency treegraph
Reported: 2004-04-23 21:22 EDT by regs
Modified: 2007-11-30 17:10 EST (History)
0 users

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2004-04-30 08:06:59 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

  None (edit)
Description regs 2004-04-23 21:22:59 EDT
From Bugzilla Helper:
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040124

Description of problem:
When su is passed the -s flag to specify a shell, it will do nothing
but open that shell.   The documentation for su seems to indicate that
-s shell should just override using the shell from /etc/passwd.

The upshot of this problem is that you can't script the running
commands as a different user and override the shell.  This breaks the
--user option to daemon() in /etc/init.d/functions.

Version-Release number of selected component (if applicable):

How reproducible:

Steps to Reproduce:
1. As root, execute 'su - rpm -s /bin/bash -c "ls /"


Actual Results:  You get an interactive shell for user rpm.

Expected Results:  The command 'ls /' should have been run as the user rpm

Additional info:

An example:

safe|18:24|~# su - rpm -c "ls /"      
bin      dev   home-old  lost+found  old-home       proc  scratch  var
boot     etc   initrd    media       opt            root  tmp      web
cvsroot  home  lib       mnt         perllocal.pod  sbin  usr
safe|18:25|~# su - rpm -s /bin/bash -c "ls /"
-su-2.05b$ id
uid=37(rpm) gid=37(rpm) groups=37(rpm)
-su-2.05b$ exit
safe|18:25|~# id
uid=0(root) gid=0(root)

Here's a workaround to make --user work for daemon():

--- /etc/init.d/functions       2003-10-28 14:26:39.000000000 -0800
+++ /tmp/functions      2004-04-23 18:21:45.000000000 -0700
@@ -147,7 +147,8 @@
        if [ -z "$user" ]; then
           $nice initlog $INITLOG_ARGS -c "$*"
-          $nice initlog $INITLOG_ARGS -c "su -s /bin/bash - $user -c
+          #$nice initlog $INITLOG_ARGS -c "su -s /bin/bash - $user -c
+          $nice initlog $INITLOG_ARGS -c "su - $user -c \"$*\""
        [ "$?" -eq 0 ] && success $"$base startup" || failure $"$base
Comment 1 Tim Waugh 2004-04-29 11:01:55 EDT
Cross-linking for completeness:
Comment 2 Tim Waugh 2004-04-30 08:06:59 EDT
This seems to work fine in coreutils-5.2.1-6:

[tim@cyberelk tim]$ su -
[root@cyberelk root]# su - rpm -s /bin/bash -c "ls /"
Your default context is user_u:user_r:user_t.
Do you want to choose a different one? [n]
bin   dev  home    lib         misc  opt   root  selinux  tmp  var
boot  etc  initrd  lost+found  mnt   proc  sbin  sys      usr
[root@cyberelk root]# rpm -q coreutils

Note You need to log in before you can comment on or make changes to this bug.