Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I was writing some instructions on how to install something (TeX-related - if you don't ask, I won't ruin your day by supplying more details) and used sudo to install system-wide. Someone commented that they didn't think that sudo was available on all Linux (or Unix) distributions.

Are there Unix distributions that don't have sudo, and if so what are they? Is there a universally acknowledged "Get me superuser privileges" command that is on all systems?

share|improve this question
add comment

4 Answers

No, sudo cannot be considered universal.

  • It isn't installed by default in FreeBSD or NetBSD. You have to build it from Ports.

    (Naturally, sudo is installed by default on OpenBSD.)

  • It's installed by default on Red Hat Enterprise Linux and its derivatives (CentOS, Oracle Linux, Scientific Linux...) but in its stock configuration, sudo has less power than su, since only root can make it do anything.

    To make sudo useful on RHEL and its derivatives, you have to configure it. For example, uncomment the stock wheel = ALL rule, and add a user to the wheel group. (Only root is in the wheel group by default on RHEL systems.)

  • Solaris 11 ships with sudo installed by default, but Solaris 10 and older use the similar-but-not-quite-the-same pfexec.

    You can get sudo for older systems, but defaults matter. Solaris 10 and older will be with us for years, so if you have Solaris in your environment and you're not personally in control of those systems and so can ensure sudo is there, you can't count on it.

  • The older the system, the greater the chance it doesn't have sudo. Although sudo is very old it didn't start becoming popular until about a decade ago. So, systems from around that time frame and older are highly unlikely to have sudo.

    (Maybe you don't know this yet, Andrew: in the Unix world, 10-year-old boxes aren't unheard of.)

I only count on sudo on systems I personally manage, or ones like Ubuntu or OS X where it's the only way to get root privileges, by default.

su is closer to a universal "get me superuser privileges" command than sudo. But then you have systems like Ubuntu and OS X where the root account is locked by default specifically to force you to use sudo instead of su. So, you can't call su universal, either.

share|improve this answer
    
Solaris 11 still support pfexec but has moved from it to sudo starting from Solaris 11 where it is part of the core installation. Before that, The Solaris companion CD was providing a sudo package for Solaris 10. –  jlliagre Sep 19 '12 at 6:30
    
@jlliagre: Thanks, I've folded that info into the answer. –  Warren Young Sep 19 '12 at 6:53
    
Debian doesn't have it out of the box, but Ubuntu does. –  AlexWebr Oct 1 '12 at 0:15
add comment

sudo is a utility that is available on almost all Linux-Systems.
However, it is not bundled by default in all distros. All major distros have it bundled by default though..

Linux Distributions like Arch Linux, Gentoo, LFS, etc. which allow the user complete customisability do not have sudo by default.

On Arch Linux, the base system does not come with sudo installed. The user must manually download sudo and edit the sudoers file.
Ditto for Gentoo and LFS. I dont know of any other major distro without sudo.

And no, I don't think there exists anything that is more universal than sudo in granting super-user privileges. That is apart from actually logging in as root.

share|improve this answer
1  
sudo might be bundled on most distros, but not all of them configure every user as capable of running it. –  jsbillings Sep 18 '12 at 15:23
    
Another good point. Depends on what the sudoers file says. –  darnir Sep 18 '12 at 15:25
add comment

The most widely-used distribution, Ubuntu, uses sudo as the recommended method to become root (when using the command line — users who stick to the GUI will get a password prompt without understanding or caring about what happens under the hood). Other distributions may or may not encourage having sudo set up and may or may not even ship it. On the other hand, su is available everywhere, and usable on most systems except those where only sudo is available because the user won't have the root password.

Between su and sudo, you will cover almost all your users. The exotic few who need calife or op or pfexec know what to do already. Even if they don't, a system that uses neither su nor sudo is likely to have files in unfamiliar places and enough things you haven't thought of that your instructions probably won't work anyway.

share|improve this answer
add comment

To answer your question, most accurately, no sudo isn't considered universal. Truthfully the entire concept of 'universal', is often a red herring. This is especially true, with regard to cross-distro compatibility. Once your throw in the multitude of differing software versions, universality becomes semi-unrealistic. Scripting by nature is pragmatic, if it was pedantic, writing portable scripts would be practically impossible.

Normally I gauge my intended executing environment, A semi-modern Linux distribution, I expect a POSIX shell with the common GNU Utils. For scripts that could run outside of Linux, I only expect full POSIX standard. Obviously many scripts are specific to Linux, or specific to distro, so that often narrows the portability scope.

To address your specific scripting case,

#!/bin/sh


## Exit Point
die() {
    [ -n "$2" ] && echo "$2"
    exit $1
}


## Require SuperUser Execution, Otherwise Re-Execute
[ `id -u` -ne 0 ] && {

    command -v lsb_release > /dev/null && {
        DISTRO="`lsb_release -is`"
        [ "$DISTRO" = "Ubuntu" ] && SUPERUSER='sudo'
    }
    SUPERUSER="${SUPERUSER:-su}"

    case "$SUPERUSER" in
        su)
            su -c "$0"
            ;;
        sudo)
            sudo "$0"
            ;;
    esac
}

## Require SuperUser Execution
[ `id -u` -ne 0 ] && die 78




echo 'Script Executed by UID'
id -u




## Clean Up
die 0

that pasted script is POSIX shell compliment, I always write Dash compatible.

share|improve this answer
    
But doesnt your script require that sudo be installed? Is there any way we can gain super-user access without the use of sudo? Through plain scripting? –  darnir Sep 18 '12 at 16:54
    
@darnir: No, the pasted script doesn't require sudo to be installed. It requires superuser execution, and can use sudo if it's available. If sudo isn't available, then the script must be run as the root user, or it will die. –  TechZilla Sep 18 '12 at 16:58
    
@darnir: Additionally there really is nothing called, "plain scripting". Almost everything, excluding shell built-ins, is done through regular binaries. That's the whole point of the shell, to call other commands, whether interactive or automated. It's this defining characteristic, which separates shell from general purpose programming languages. So regardless of how you acquire superuser, your doing it through external commands..., assuming your not coding with raw kernel interfaces. –  TechZilla Sep 18 '12 at 17:14
1  
@varesa: Interestingly Ubuntu is the exact opposite on sudo/su default configurations. You can check what sudo permissions a user has available, by executing sudo -l. Unfortunately it's unusable in this situation, as it may require password entry. Thinking about this more carefully, I actually think the whole concept might be best achieved via a per distro test. Using su -c unless running a su default disabled distro, in which case using sudo su -c. As others have mentioned, it's best to leave superuser elevation to the user, I would consider any scrip-around a convenience. –  TechZilla Sep 30 '12 at 17:17
1  
@varesa: I've updated the pasted script, to reduce chance of using an un-configured sudo. This should execute properly in most distro's, assuming default su/sudo configurations. I do know an out-dated Ubuntu, pre lsb_release, would need to be addressed... But this really is just an example, and could obviously be extended. –  TechZilla Sep 30 '12 at 18:00
show 6 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.