引言 😜

sudo 作为一款权限管理工具,平常在各个平台使用。但是真正算的上正确使用的又寥寥无几。这篇文章,便是详细介绍一下这个命令的正确使用方式。

参考资料 📖

visudo(8)

visudo(8)sudo 提供的用于编辑配置文件的程序。使用该命令有以下优势:

  • 检测配置文件语法错误并给出错误提示

  • 它使用的文本编辑器默认遵从 $EDITOR 环境变量。
  • 该命令提供了一些保护机制,保证了同一时刻只有一个人可以编辑配置文件。

配置 🧰

基本配置格式如下:

    Username host=command

    # username : 用户
    # host : 运行规则的主机
    # command : 限制的命令
    # command 支持多个命令,中间使用 ',' 分隔。 当一行分成多行时,使用 '\' 放在行尾。
    # %group : % 开头的表示用户组 
执行用户
    dwsmith db1 = (_postgresql) ALL

    # 用户 dwsmith 在 db1 主机上以用户 _postgresql 执行命令
别名

如果只有一个用户,一台主机,一个可以简单概括的命令集。那么一行配置就可以满足需求。如果稍稍复杂一点,可以写多行配置文件。但是当数量指数级增加时,显然成百上千行配置会显得臃肿许多。这个时候,别名将大大减少这种困恼。

  1. 用户别名
User_Alias DBAs = dwsmith, kkrusch
  1. 执行用户别名
Runas_Alias APPOWNER = _postgresql, www
  1. 主机别名
Host_Alias DB = db1, db2, db3
Host_Alias DMZ = 192.0.2.0/24
Host_Alias FIREWALL = 192.0.2.1, 192.0.2.2, 192.0.2.3
  1. 命令别名
Cmnd_Alias BACKUPS = /bin/mt, /sbin/restore, /sbin/dump

🗨️ 别名可以互相嵌套

    # 别名使用
    User_Alias USR_DB = dwsmith,kkrusch
    Runas_Alias RAS_DB = _postgresql,www
    Host_Alias H_DB = db1, db2, db3
    Cmnd_Alias CMD_DB = /usr/local/bin/pg_*, /home/appowner/bin/*
    USR_DB H_DB = (RAS_DB) CMD_DB
改变默认规则

默认 sudo 输错密码会以提示信息调戏用户。如果有些用户不喜欢的话,则可以使用 Defaults 关键字修改。

    Defaults !insults
    Defaults@caddis insults
    Defaults%lasnyder insults
    Defaults!/sbin/newfs,/sbin/fsck insults
    Defaults<APPOWNER insults

    # ! 表示取消
    # @ 表示操作对象是主机
    # % 表示操作对象是用户
    # Defaults 后面的 ! 表示操作对象是命令
    # < 表示操作对象是运行用户
执行时环境变量

由于一些操作涉及到必要的环境变量,所以该配置文件提供了关键词 env_keep 来确保一些环境变量的值。如:

Defaults env_keep += "SSH_CLIENT SSH_CONNECTION SSH_TTY SSH_AUTH_SOCK"

设置完环境变量后,需要指定该环境变量适配规则:

%wheel ALL=(ALL) SETENV: ALL
默认密码缓存时间

当输入密码后,只有一段时间内再次使用命令则不需要输入密码。而这个时间间隔则有关键字 timestamp_timeout 控制。默认以分钟为单位。

Defaults timestamp_timeout 10
指定用户文本编辑器

当使用 sudo 命令的时候,会涉及到一些配置文件的修改操作。这个时候,如果直接配置编辑命令给用户,则用户退出编辑器后会发生什么呢? 当然是拥有你这个账号的权限的一个 shell 。所以为了避免这种情况的发生。这里,我们使用关键字 sudoedit

sbaxter dns1=/etc/rc.d/named,/sbin/mount_nfs, \
    sudoedit /etc/named.conf, /etc/rndc.key

技术上来看,使用 sudoedit 并不会直接编辑该配置文件,而是先复制一份该配置文件,权限给当前用户。当用户编辑完后,再复制替换掉原来的配置文件。默认编辑器使用环境变量 $SUDO_EDITOR, $VISUAL, or $EDITOR 指定的编辑器。

排除关键字 ⚠️

这里需要提出的一点,排除关键字根本就是鸡肋。因为排除的规则是不仅匹配执行文件,还要求路径。如果绕过的话,目录不同就可以。

日志 📑

每一条执行的 sudo 命令都被 syslogd 记录在 /var/log/secure 中。如:

Apr 30 14:16:50 treble sudo: mwlucas : TTY=ttyp8 ; PWD=/home/mwlucas ; USER=root ; COMMAND=/usr/bin/su -m

对这篇文章感觉如何?

太棒了
5
不错
0
爱死了
0
不太好
0
感觉很糟
0
chase for something eternal

    You may also like

    Leave a reply

    您的邮箱地址不会被公开。 必填项已用 * 标注

    此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

    More in:Shell

    Shell

    在Powershell中使用开源命令

    在Windows上设置路径,以便可以使用开源命令 当您在操作系统上启动应用程序时,您的操作系统需要使用某些代码库和实用程序才能运行该应用程序。你的操作系统知道如何找到这些库和实用程序,因为它有一个系统 […]
    Shell

    brew 4.0.0发布

    brew 用于 macOS(如果你需要的话,也包括 Linux)的附加软件包管理器。 如果你在 Mac 上的终端窗口工作,Homebrew 是一个方便的工具,它可以让你快速、轻松地安装广泛的 FOSS […]
    Shell

    向你的命令行脚本添加 Shebang 行

    #!/bin/sh 上面这行代码,常常出现在 shell 脚本中,是一个 shell 脚本的标准起始行,也被称作 Shebang 行。 Shebang 即 SHArp(#) 和 bang(!) 的组合 […]