引言 😜

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

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

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

    Linux 下扩展交换空间

    一般来说,当应用程序使用大量物理内存(RAM)并且不够用时操作系统会开始使用交换空间(Swap Space)。这种情况下,操作系统会把不活动的物理页面置换到交换空间。释放出来的空闲内存可以继续被其他应用程序使用。等到物理内存使用量降下来后,交换的内存区域又会换回到物理内存中。系统管理员应该确保系统交换空间足够,保证操作系统在内存不够用时始终能够通过置换页面的方式获取可用的物理内存。接下来,我们就来介绍如何创建、扩展和删除交换空间。