18.sudo

[1] 理解 sudo 命令的工作流程

    • sudo 会读取和解析 /etc/sudoers 文件,查找调用命令的用户及其权限。
    • 然后提示调用该命令的用户输入密码,或者也可以通过 NOPASSWD 标志来跳过密码验证。
    • 之后,sudo 创建一个子进程,调用 setuid() 来切换到目标用户。
    • 最好,它会在上述子进程中执行参数给定的 shell 或命令。

[2] 理解 sudo 命令授权配置

    • USER/GROUP HOST=(USER[:GROUP]) [NOPASSWD:] COMMANDS
    • USER/GROUP: 表示需要被授权的用户或者组;如果是组则需要以 % 开头
    • HOST: 表示允许从哪些主机登录的用户运行 sudo 命令;ALL 表示允许从任何终端、机器访问
    • (USER[:GROUP]): 表示使用 sudo 可切换的用户或者组,组可以不指定;ALL 表示可以切换到系统的所有用户
    • NOPASSWD: 如果指定,则该用户或组使用 sudo 时不必输入密码
    • COMMANDS: 表示运行指定的命令;ALL 表示允许执行所有命令
# 允许 sudo 组执行所有命令
%sudo ALL=(ALL:ALL) ALL

# 允许用户执行所有命令,且无需输入密码
escape ALL =(ALL) NOPASSWD: ALL

# 仅允许用户执行 echo, ls 命令
escape ALL =(ALL) NOPASSWD: /bin/echo /bin/ls

# 运行本机的用户执行关机命令
escape localhost=/sbin/shutdown -h now

# 允许 users 用户组中的用户像 root 用户一样使用 mount、unmount、chrom 命令
%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

[3] 配置 Defaults 选项

# 指定用户尝试输入密码的次数,默认值为3
Defaults passwd_tries=5

# 设置密码超时时间,默认为 5 分钟
Defaults passwd_timeout=2

默认 sudo 询问用户自己的密码,添加 targetpw 或 rootpw 配置可以让 sudo 询问 root 密码
Defaults targetpw

# 指定自定义日志文件
Defaults logfile="/var/log/sudo.log"

# 要在自定义日志文件中记录主机名和四位数年份,可以加上 log_host 和 log_year 参数
Defaults log_host, log_year, logfile="/var/log/sudo.log"

# 保持当前用户的环境变量
Defaults env_keep += "LANG LC_ADDRESS LC_CTYPE COLORS DISPLAY HOSTNAME EDITOR"
Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

# 安置一个安全的 PATH 环境变量
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

[4] 解决 sudo 命令找不到环境变量

  env_reset 表示默认会重置环境变量

  env_keep 则表示用于保留部分环境变量不被重置

  secure_path 变量,其作用就是包含的路径将被当做 sudo 环境的 PATH 变量来使用

$ sudo sed '/^#/d;/^$/d' /etc/sudoers
Defaults    env_reset
Defaults    env_keep =  "COLORS IDSPLAY HOSTNAME HISTSIZE LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS"
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

  也可以把配置文件的变量 !env_reset 给去掉

[5] Vim 强制保存只读文件

# Vim命令模式下执行即可强制保存
# w: 表示保存文件
# !: 表示执行外部命令
# tee: 表示把数据重定向到给定文件和屏幕上
# %: 在执行外部命令时,%会扩展成当前文件名
:w !sudo tee %

 

posted @ 2021-04-07 08:40  天涯160  阅读(94)  评论(0)    收藏  举报