4 ms·
Copy pasting the best comment from the article. It basically covers the crux. ======================================================== "jonkx using on | May
by nu2ycombinator 14y ago
Copy pasting the best comment from the article. It basically covers the crux.
========================================================
"jonkx using on | May 31, 2010 at 10:22 am | Permalink
I worked with the Unix OS from the early 1980′s (at first we ran early versions on a DEC PDP-11) until 1992. Starting in 1992, I did contract work on proprietary versions based on SVR4.
It was just easier to say the initials “S U” or “super-user” than to say “switch user” or “substitute user”. To insist on correctness, whether authoritarian, historical or otherwise seems petty.
Depending on the options used, su can be used to switch user, substitute user or become “super user”. Success depends on knowledge of the appropriate password. “sudo” on the other hand may allow one to become any other user (depending on the configuration of sudo and being a “sodoer”) knowing only the login password.
On the systems I have used, a sudoer can become root (“super user”) using this shell command at a terminal:
sudo su – root
and responding to the prompt with the login password used to sign in the current user.
I think it is important to point out that you cannot become “super user” or root from a shell with the su command alone unless there is a root password and that password is entered at the prompt.
=========================================
- mrb 14y agoTo all people who type "sudo su - root": the much simpler "sudo -i" accomplishes the same (-i launches an interactive shell).
- Osiris 14y agoI thought "sudo -s" was the correct way to drop into a root user shell.
- ralph 14y agoNo, unless one understands the subtleties, it may be best to use -i. $ sudo -s $ pwd /home/ralph $ exit $ sudo -i root@orac:~# pwd /root root@orac:~# logout $ $ sudo strace -fe execve sudo -s execve("/usr/bin/sudo", ["sudo", "-s"], [/* 16 vars */]) = 0 execve("/bin/bash", ["/bin/bash"], [/* 16 vars */]) = 0 ... $ exit $ sudo strace -fe execve sudo -i execve("/usr/bin/sudo", ["sudo", "-i"], [/* 16 vars */]) = 0 execve("/bin/bash", ["-bash"], [/* 16 vars */]) = 0 ... root@orac:~# logout $
- kelnos 14y agoThe "-i" option actually means "simulate Initial login" -- the idea being -i will drop you into a shell as if you'd logged in as the user in a fresh session. -s will also give you an interactive shell, but doesn't mess with the environment. (And both -i and -s can also not give you an interactive shell, if you give it a command to run. The point is that it will run the command in the shell rather than just fork()ing and exec()ing like a bare sudo invocation would do.)
- etanol 14y agoRead carefully: "sudo -i" to replace "sudo su - root". You should check the "su" manpage and look for the -/-l/--login option.
- kelnos 14y agoI'm not objecting to that. I'm objecting to the (perhaps unintended) assertion that "sudo -i" means "give me an interactive shell". It does happen to give you an interactive shell (assuming you don't specify a command), but as a side effect. "-s" gives you an interactive shell too, but the semantics are different.
- theblazehen 14y agoWhat is the difference between that and sudo bash
- alexkus 14y agoOne side effect of "sudo bash" is that when you exit that shell your local user's .bash_history file gets overwritten by one owned by root (and un{read/write}able by the local user), and so your local user loses the bash history functionality from that point on.