su identification
Duncan
1i5t5.duncan at cox.net
Thu Dec 24 20:24:34 GMT 2009
Basil Fowler posted on Thu, 24 Dec 2009 13:11:45 +0000 as excerpted:
> You have confused the two commands.
>
> su means "switch user"[.] When you use su, if it has no arguments, it
> assumes that you wish to invoke the root account and will demand Root
> account's password[.] If you follow su with an account name [you] will
> will be prompted for [its] password[.] When the correct password for
> the TARGET account is entered, you will then be running as the target
> account[.]
>
> Now, with distros such as Ubuntu, the root account is disabled, so su
> does not work. A correct password (equivalent to MASTER) does not exist.
> sudo is a program that is designed to solve a difficult administrative
> problem. How do you give an ordinary user power to perform an action
> (such as managing printers) that normally requires root privileges
> without giving him /her complete control over the machine?
>
> Sudo looks up a special file - readable only by root - /etc/sudoers,
> which lists who can do what under which conditions, and allows or denies
> the desired action accordingly.
Well stated.
I look at the two commands this way:
1) su, switch user, normally requires the TARGET user's password, and
switches unconditionally to that user. If the TARGET user doesn't have a
password, it cannot normally be switched to. The exception (the the
"normally") is the traditional "root can do anything" -- IOW, root can su
to any account configured in /etc/passwd, without entering a password at
all. Of course, if said user doesn't have a shell configured in /etc/
passwd (or if the shell is set to /bin/true or /bin/false or the like, a
common tactic to disable login), then root will still have trouble su-ing
to that user.
2) sudo, super-user-do (else switch-user-do) is intended to be much more
limited than su. A user may ONLY sudo as allowed in the /etc/sudoers
file, which controls all aspects of what is allowed (which users may
sudo, what commands they may sudo, what parts of the environment are
allowed to be carried with them, whether they are prompted for a password
when they sudo, whether that password is their own or the target's
password, etc). Unlike su, typically, sudo requires the sudo-ing user's
password, NOT the target user's password. This allows said user to do
what's allowed in the sudoer's file using only their own password, thus
without having to know another one, BUT, the user can ONLY do what's
allowed in the sudoer's file.
Of course the sudoers file can and often does contain wildcards, such
that a user configured therein may be able to do anything. It can also
be configured to allow certain commands without a password, while
requiring the password for others. Also, the allowed commands can have
their parameters and options specified, so ONLY that /exact/ command,
including all parameters and options as specified, can be run, or the
configuration can be made looser, allowing a command with any parameters
and options a user cares to add.
Thus, sudo can be configured with the sudoers file to a much finer degree
than can su, which either works, allowing everything that user could do
(for root, traditionally everything, period, tho selinux with newer style
acls, access control lists, can limit even root), or doesn't work,
allowing nothing. But su requires the target password while sudo
normally only requires the sudoing user's password (tho that too can be
configured).
As Basil mentioned, sudo gets very particular about its sudoers file. If
there are any errors, it won't let you sudo at all. Thus it uses the
traditional vi* indirect editor setup. vi is short for visual editor,
and refers to the traditional Unix editor of the same name, but the vi*
commands normally honor the VISUAL and EDITOR environmental variables so
the user can specify their own editor preference. The various vi*
commands thus allow indirect editing of the system file in question,
checking format of the edited file before replacing the active one and/or
taking care of locking, to help avoid catastrophe should a mistake be
made. visudo is our command for editing the sudoers file, ensuring that
the format is correct before replacing the existing sudoers file, thus
protecting from "stupid" mistakes possibly locking out sudo entirely, if
the format is wrong. Similarly there are the vipw and vigr commands for
editing /etc/passwd and /etc/group, a vidir command for editing a
directory as if it was a file (this one I've never used), etc. Of
course, vim isn't such a command but the common form of the vi editor
itself.
Here's how I have my setup configured, as an example. I have both su and
sudo installed, tho I rarely use su for the same reason I rarely login as
root -- "don't take the name of root in vain", there's just too much
chance of fat-fingering something. Instead, I have two users configured
in sudo, my normal user, with extremely limited no-password sudo access
to rather nailed down specific commands (DEFINITELY no editors that allow
the user to shell out to bash or whatever, for instance), and an "admin"
user, allowed to do everything with no password -- almost like root, but
still requiring the sudo command to actually do stuff said user would
not /normally/ be able to do. Then, my normal user has one more allowed
command, this one WITH a password, that invokes sudo to switch to the
admin user.
This config allows my normal user to do whatever he'd normally be able to
do, plus a few specific commands (tcptraceroute, syncing my distribution
repository, etc) using sudo without a password. The normal user is also
specifically allowed to sudo to the admin user, but WITH a password. The
admin user is again allowed to do his normal stuff without sudo, but can
also sudo anything (including sudo bash, thus logging in as root),
without further passwords.
This allows me to do stuff like constructing a mkfs (that would format a
drive) command as the admin user WITHOUT the sudo command -- if I screwup
and hit enter before I'm ready, I won't damage anything. When the
command is all setup, I've double-checked that I'm operating on the
correct device, etc, I can hit enter and of course get a permissions
error, then hit the uparrow key to recall the last command, home to set
the cursor to the beginning of the command, and sudo<space> and enter, to
finally execute the command as root.
FWIW, another strategy to avoid errors at the command line, say when
deleting stuff, is to use the shell's auto-completion. In the case of
bash, this is the <tab> key. If there's just one possible completion,
it'll make it for you, if there's more than one, it'll beep and you can
hit tab a second time to get all possible completions (if there's a lot,
it'll ask you if you are sure you want to display them all, first). If
you're removing a file, using auto-completion can help you make sure you
rm the /right/ file. Combine that with the above strategy of entering
the command first as as the admin user without sudo, where it'll fail if
you try to delete system files, then going back and adding sudo, and
making a catastrophic mistake like deleting from / due to a fat-fingered
typo, becomes far harder.
Meanwhile, as usual, the manpages for su, sudo, and sudoers, should be
very helpful with the details, once you know the general idea behind the
commands, at least. The sudoers manpage in particular can be helpful in
setting up a usefully powerful but still relatively secure sudoers
config. Don't forget to use visudo for editing, to make sure the format
is correct before the file is saved! =:^)
(FWIW, there are very helpful manpages for the formats of other critical
system files as well. passwd, group, fstab, xorg.conf and inittab among
others, should all have very useful manpages. Such config file format
manpages are always section five, so for commands where the config file
is the same name as the command, man 5 command should get the config file
manual, while simply man command will normally get the command manual,
section 1 for user commands and section 8 for system commands.)
--
Duncan - List replies preferred. No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master." Richard Stallman
___________________________________________________
This message is from the kde mailing list.
Account management: https://mail.kde.org/mailman/listinfo/kde.
Archives: http://lists.kde.org/.
More info: http://www.kde.org/faq.html.
More information about the kde
mailing list