1、sudo 简介

sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。(百度百科)

su 命令
su是最简单的身份切换命令,一般都是su - username,然后输入password就ok了,root用su至其他用户无须密码;但非root用户切换时需要密码。切换到root可以使用su -和su - root。

  • 切换用户的方式:
    su UserName:非登录式切换,即不会读取目标用户的配置文件
    su - UserName:登录式切换,会读取目标用户的配置文件;完全切换

  • 换个身份执行命令:
    su [-] UserName -c ‘COMMAND’
    选项:
    -l:“su -l UserName”相当于“su - UserName”
    -c: 仅执行一次命令,而不切换用户身份

2、sudo的特性

  • sudo 能够授权指定用户在指定主机上运行某些命令。 如果未授权用户尝试使用 sudo,会提示联系管理员。
  • sudo 可以提供日志,记录每个用户使用sudo操作,以便于日后审计。
  • sudo 为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。
  • sudo 默认存活期为5分钟。

编辑配置文件的方式

# sudoedit /etc/sudoers
# vim /etc/sudoers
# visudo

visudo –c 命令具有语法检查功能,和crontab -e编辑后退出检查语言功能类似。

3、sudo相关文件

配置文件: /etc/sudoers, /etc/sudoers.d/
时间戳文件: /var/db/sudo
日志文件: /var/log/secure
配置文件支持使用通配符glob:

?:任意单一字符
* :匹配任意长度字符
[wxc]:匹配其中一个字符
[!wxc]:除了这三个字符的其它字符
\x : 转义
[[alpha]] :字母 示例: /bin/ls [[alpha]]*

配置文件规则有两类

  • 别名定义:不是必须的,别名必须全部而且只能使用大写英文字母的组合
  • 授权规则:必须的
  • 用户别名
    在这里插入图片描述

4、sudo语法

  • who which_hosts=(runas) command
    被管理主机地址【访问主机】
    允许哪一个用户,执行某一条命令在哪一台主机上
    谁(who)能够以哪个用户(runas)的身份通过什么主机(which host)执行什么命令(command)。

    user: 运行命令者的身份
    host: 通过哪些主机
    (runas): 以哪个用户的身份
    command: 运行哪些命令
    在这里插入图片描述

  • sudo授权示例
    在这里插入图片描述
    user1 ALL=(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod

  • 常用的标签
    PASSWD:执行被授权的命令之前,必须输入密码进行身份验证
    NOPASSWD:执行被授权的命令之前,无需输入密码进行身份验证
    注意:PASSWD、NOPASSWD等标签只能在授权项中使用,不能在别名中使用。

5、sudo命令

sudo -u centos 切换身份
-V 显示版本信息等配置信息 
-u user 默认为root 
-l  列出当前用户可以使用的所有sudo命令
-v 再延长密码有效期限5分钟,更新时间戳 
-k  认证信息失效,清除时间戳(1970-01-01),下次需要重新输密码 
-b 在后台执行指令 

6、总结

  • su方式切换是须要输入目标用户的password。而sudo仅仅须要输入自己的password,所以sudo能够保护目标用户的password不对外泄漏。

  • sudo授权时passwd,su,sudo,sudoedit,visudo等具有特殊意义的命令时,务必要考虑全面(例如禁止修改root用户的密码等操作)。

  • 仔细看了sudo的配置文件发现sudo的which_hosts表示允许哪一个IP地址或网络访问当前主机,这种说法不对。通常能用到这个参数的场景不多,一般在有NIS服务或集中管理的时候,其实就是管理所有主机的管理策略在一台主机上编辑sudoers这个文件,然后将它推到所有主机。

    man帮助文件显示该参数的正确含义:
    #jack可以运行任何命令在定义地CSNET(128.138.243.0, 128.138.242.0和128.138.204.0/24的子网)中,不过注意前两个不需要匹配子网掩码因为是本地主机地址,而最后一个必须匹配掩码因为是网络地址。
    jack CSNETS = ALL
    #lisa可以运行任何命令在定义为CUNETS(128.138.0.0)的子网中主机上。
    lisa CUNETS = ALL

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐