Linux下 sudo 和 su 的区别
su 介绍及使用
su
命令就是切换用户的工具,比如我们是以普通用户 guest 登录的,但要添加用户,执行 useradd ,guest 用户没有这个权限,只有 root 有权限。
解决办法有两个,一是退出 guest 用户,重新以 root 用户登录;二是不退出 guest 用户,使用 su 来切换到 root 下进行添加用户的操作,操作完成后再退出 root。
我们可以看到通过 su 切换是一种比较好的办法。通过 su 可以在用户之间切换,超级权限用户 root 向普通用户切换不需要密码,普通用户切换到其它任何用户都需要密码验证。
su root # 切换到 root,需要输入 root 用户的密码
su # 默认切换到 root
su - root # 切换到 root,同时切换到 root 的工作目录中
su szz # 切换到 szz 用户
sudo 介绍及使用
sudo
是一种权限管理机制,依赖于/etc/sudoers,其定义了授权给哪个用户可以以管理员的身份能够执行什么样的命令。
格式:sudo -u USERNAME COMMAND
默认情况下,只有 root 用户可以执行 sudo 命令。root 用户通过使用 visudo 命令编辑 sudo 的配置文件/etc/sudoers,才可以授权其他普通用户执行 sudo 命令。
注意,不能直接 vim /etc/sudoers,必须使用 visudo 命令来编辑
sudo 的运行流程:
- 当用户运行 sudo 时,系统于/etc/sudoers 文件里查找该用户是否有运行 sudo 的权限
- 若用户具有运行 sudo 的权限。那么让用户输入自账号的 password
- 如果 password 正确,就执行 sudo 后面的命令。root 运行 sudo 不需要输入 password,切换到的身份与运行者身份相同的时候,也不需要输入 password。
visudo # 编辑 /etc/sudoers 文件
your_user_name ALL=(ALL) ALL # 将用户添加到 sudo 组,就可以使用 sudo 命令了
your_user_name ALL=(ALL) NOPASSWD: ALL # 默认情况下密码 5 分钟过期,添加了 NOPASSWD,就不需要输入密码了
your_user_name ALL=(root) NOPASSWD: /usr/sbin/useradd # 只有 useradd 命令可以 sudo 执行
sudo -u root useradd # 以 root 的身份执行 useradd
sudo useradd # 以 root 的身份执行 useradd,默认就是 root
sudo su # 等同于 sudo su root,以 root 的身份切换到 root 用户
sudo -i # 进入一个持续的root环境,以root权限执行命令,但并不是切换到root用户,当遇到下面的报错时可以使用此命令,Sorry, user xxx is not allowed to execute '/usr/bin/su' as root on xxx.