Su And Sudo

What is the difference between su and sudo?Let's take a look~

Su And Sudo
Photo by Gabriel Heinzer / Unsplash

Learn By

su [user]

要在工作目录/用户环境中调用另一个用户的shell,可使用su命令。
需提供切换用户的账号密码。

切换到指定用户,但是当前目录不会变化,还是上一个用户的环境变量。

[sam@localhost ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/java/jdk1.8.0_11/bin:/usr/apache/apache-maven-3.6.1/bin:/usr/local/nodejs/bin:/usr/local/sbin:/usr/sbin:/home/sam/.local/bin:/home/sam/bin
[sam@localhost ~]$ su test
密码:
[test@localhost sam]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/java/jdk1.8.0_11/bin:/usr/apache/apache-maven-3.6.1/bin:/usr/local/nodejs/bin:/usr/local/sbin:/usr/sbin:/home/sam/.local/bin:/home/sam/bin
[test@localhost sam]$ pwd
/home/sam
su - [user]

要移至另一个用户并切换到该目标用户环境,请使用SU -命令。
因此,要切换到phoenixnap用户并移动到其登录shell,请输入命令:

同样是切换到指定用户,当前目录会切换到指定用户的家目录,即~。切换到指定用户的环境变量。

[sam@localhost ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/java/jdk1.8.0_11/bin:/usr/apache/apache-maven-3.6.1/bin:/usr/local/nodejs/bin:/usr/local/sbin:/usr/sbin:/home/sam/.local/bin:/home/sam/bin
[sam@localhost ~]$ su - test
密码:
[test@localhost ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/java/jdk1.8.0_11/bin:/usr/apache/apache-maven-3.6.1/bin:/usr/local/nodejs/bin:/usr/local/sbin:/usr/sbin:/home/test/.local/bin:/home/test/bin
[test@localhost ~]$ pwd
/home/test
su -

切换到超级用户(root),输入root密码

[sam@localhost ~]$ su -
密码:
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.8.0_11/bin:/usr/apache/apache-maven-3.6.1/bin:/usr/local/nodejs/bin:/usr/java/jdk1.8.0_11/bin:/usr/apache/apache-maven-3.6.1/bin:/usr/local/nodejs/bin:/root/bin
[root@localhost ~]# pwd
/root
sudo [command]

sudo意思是以其他用户身份执行命令,

该命令允许登录的用户执行需要root特权的命令。与SU不同,Linux中的sudo命令需要为运行该命令的用户提供密码。

如果登录用户不在/etc/sudoers文件中,无法以root权限执行命令。需将用户加入到sudoers文件中。

[sam@localhost ~]$ sudo docker ps

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] sam 的密码:
sam 不在 sudoers 文件中。此事将被报告。
su -c "[command]"

同样,su也可以用作sudo并以root运行一个命令。

/etc/sudoers

sudoers文件是允许特定的用户像root用户一样使用各式各样的密码,而不需要root用户的账号密码。

# 编辑/etc/sudoers文件
visudo -f sudoers

# 允许用户sam执行任意路径下的任意命令
sam    ALL=(ALL)       NOPASSWD: /usr/bin/cat /etc/shadow

# 允许用户sam无需密码执行该命令
sam    ALL=(ALL)       NOPASSWD: /usr/bin/cat /etc/shadow