su 与 sudo

概述

参考:

su

参考:

总结

使用 su 命令切换用户身份然后执行命令虽然简单,但是,也有一些致命的缺点:

  • 普通用户必须知道 root 密码才可以切换到 root,这样 root 密码就泄漏了。
  • 使用 su 命令切换身份,无法对切换后的身份做精细的控制,拿到超级权限的人可以为所欲为。甚至可以改掉 root 密码,让真正的管理员无法再拥有 root 权限。

这时候,就可以使用 sudo 工具

su 配置

/etc/pam.d/su #

/etc/pam.d/su-l #

/etc/default/su #

/etc/login.defs #

sudo

参考:

sudo(substitute user [或 superuser] do) 程序可以让当前用户使用其他的用户的权限来执行指定的命令

通过 sudo 命令,我们可以把某些 root 权限(e.g.只有 root 用户才能执行的命令)分类有针对性授权给指定的普通用户,并且普通用户不需要知道 root 密码就可以使用得到的授权来管理。效果如下所示(配置好 sudo 之后,普通用户 desistdaydream 也可以通过在命令前加 sudo 来执行 root 才能执行的命令)

sudo 通过各种插件实现功能。默认插件为 sudoers,用来确定用户的 sudo 权限,sudoers 的策略,通过 /etc/sudoers 文件进行配置,或者在 LDAP 中进行配置。

sudo 关联文件与配置

/etc/sudo.conf # sudo 程序的配置文件

/etc/sudoers # suders 插件的配置文件,可以配置哪些用户可以拥有哪些权限。注意:该文件是只读的,只能通过 visudo 命令进行编辑

  • /etc/sudoers.d/# /etc/sudoers 的 include 配置的默认目录

sudo 日志配置

使用

sudo 命令行工具

  • sudo # 可以让普通用户拥有 root 权限去执行命令,sudo 的配置文件是/etc/sudoers。
  • visudo # 通过 visudo 编辑/etc/sudoers,可以检查语法。

sudu - 使用其余用户的权限执行指定的命令

sudo [OPTIONS] [COMMAND]

OPTIONS

  • -l, –list # 查看授权情况,列出用户在主机上可用的和被禁止的命令
  • -k, –reset-timestamp # 删除时间戳,时间戳默认 5 分钟也会失效
  • -u,–user=<STRING> # 以指定用户执行命令。STRING 可以 用户名 或 用户 ID
  • -s, –shell # 以目标用户运行 shell。
    • 若直接使用 sudo -s 命令,相当于以 root 用户运行 shell,省去了 su - root 再输入密码的操作

EXAMPLE

  • sudo -u desistdaydream whoami # 使用用户 desistdaydream 来执行 whoami 命令
~]# whoami
root
~]# sudo -u desistdaydream whoami
desistdaydream

visudo - 编辑/etc/sudoers 文件

使用 visudo 命令可直接进入编辑模式开始配置 /etc/sudoers 文件,配置 visudo 后,使用 sudo 命令,可以让非 root 用户在执行某些命令时不用 root 密码

OPTIONS:

  • -c # 检查 /etc/sudoers 文件的语法
  • -f, –file=sudoers # 指定 sudoers 文件的路径
  • -q, –quiet # less verbose (quiet) syntax error messages
  • -s, –strict # 严格的语法检查,在编辑 sudoers 文件并保存退出后,如果语法错误,则会弹出提示

最后修改 March 25, 2025: clearup (feb59d93)