su和sudo命令

Linux ginotang 1269℃ 0评论

su命令

一般来说,在使用unix-like操作系统的时候,我们都不会以管理员身份直接登录系统,以避免一些误操作对系统造成的影响,例如误删除一些系统配置文件。但是,为了方便系统的管理,我们又需要临时切换到管理员账号进行一些系统设置,这个时候,就可以使用su命令,它的作用就是在终端里切换不同账号的,su命令全称(switch user)。

su命令的基本使用

假如当前登录的用户是jack,他要切换到root用户管理系统,就可以使用下面的命令

我们都知道,每一个shell都有自己的环境变量,不同用户shell中的环境变量通常是不一样的。jack通过su root命令虽然把用户切换成root,但是,切换后shell中的环境变量依然是jack自己的:

如果希望切换用户的时候连同环境变量一起改变,可以使用下面的命令

注意su和root之间添加了一个(-)横杠,切换后再使用env观看环境变量,这一次,用户和变量都更改了。

su命令的一个问题

su命令在切换用户的时候,必须拥有目标用户的密码,也就是说,如果要切换root账号,你就必须拿到root账号的密码,如果root密码人人皆知,那是十分不安全的。如果不想把root密码泄露出去,而又希望用户可以执行root的权限,那么可以使用sudo命令。

sudo命令

sudo命令和前面的su命令主要有两点不同:

  1. sudo命令只执行命令,而不切换用户
  2. sudo命令以运行者的密码验证身份,而不使用目标用户的密码

举个例子,一般更新系统的命令只有管理员可以执行,但是合法的用户也可以通过sudo执行:

第一点,直到命令执行完毕,当前用户依然是normal,没有进行账号切换

第二点,第二行输入密码的时候,注意观察是passwd for normal(normal的密码),即只需要输入一般用户的密码即可执行需要root权限的命令。

用户使用自己的密码进行验证来执行root权限,这不是更危险吗?是的,的确是很危险,因此上面也说了只有合法的用户才可以使用sudo。

sudoers配置文件

那么,什么用户才算是合法的用户呢?其实,当管理员认为某个用户是可信任的,且需要放权到这个用户的时候,就会把该用户添加进受信任列表,这个受信任列表就是/etc/sudoers配置文件。该文件指定了哪些用户能以什么身份执行哪些命令,也就是说,能使用sudo命令的用户必须存在于sudoers配置文件中。

sudoers文件语法

sudoers语法可以很复杂,但我们只说说常见的配置方式:

  • root    ALL=(ALL)    ALL
  • %wheel    ALL=(ALL)    ALL

其中第一行是设置针对用户设置,而第二行是针对组设置的。它们的含义是:

  • root用户可以从任意主机登录,并使用任意身份运行任何命令
  • wheel组中的任意用户可以从任意主机登录,并使用任意身份运行任何命令

所以,从左到右,一共4列,每一列表示的意思是

  1. 用户名/组名(可以指定多个用户)
  2. 可以从什么远程主机登录(可以指定多个主机)
  3. 以什么身份登录(可以指定多个用户)
  4. 用户可以运行的命令(可以指定多个命令)

举个例子,当前主机中有root、jack、kate、normal一共4个用户账号,管理员允许jack和kate以root身份运行系统更新命令,sudoers文件中就要添加以下设置:

如果没有把相关用户添加进文件,当用户尝试使用sudo命令的时候就会出现错误:

使用别名简化设置

针对上面提到的4列,都对应一个别名指令,它们分别是

  1. User_Alias
  2. Host_Alias
  3. Runas_Alias
  4. Cmnd_Alias

使用这些命令的话,前面的例子可以改写为:

这不是更复杂了吗,前面只用了一行,但是这里一共是5行,不是说简化吗?是的,当用户不是特别多的时候,还是不建议使用别名;别名的好处是当相同配置需要设置多次的情况下使用的。

禁止使用特定命令

sudoers文件除了可以授予用户使用某个命令的权限,也可以禁止用户使用特定的命令。假如授予了jack使用/usr/bin/passwd权限,允许他帮助其他用户修改密码,可能会出现问题。

sudo passwd 命令后面指定其他用户的时候,是没有问题的,但是如果jack直接输入sudo passwd,结果会怎样?

管理员的原意是允许jack帮助其他用户修改密码,但又必须禁止jack修改root的密码。那就必须对sudoers文件作进一步的设置

以感叹号开头的命令都是被禁用的命令。修改完之后,jack就可以修改其他用户的密码,但无法修改root的密码。

不用密码切换到root

配合sudo和su命令,可以使用户不需要root密码直接切换到root用户

用户只需要输入命令sudo su – 就可以直接切换到root用户。

转载请注明:Pure nonsense » su和sudo命令

喜欢 (0)
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x