sudo 命令

一、sudo 简介

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

su 命令

su是最简单的身份切换命令,通常都是su - username,而后输入password就ok了,root用su至其余用户无须密码;但非root用户切换时须要密码。切换到root可使用su -和su - root。shell

  • 切换用户的方式:
    su UserName:非登陆式切换,即不会读取目标用户的配置文件
    su - UserName:登陆式切换,会读取目标用户的配置文件;彻底切换
  • 换个身份执行命令:
    su [-] UserName -c 'COMMAND'
    选项:
    -l:“su -l UserName”至关于“su - UserName”
    -c: 仅执行一次命令,而不切换用户身份

二、sudo的特性

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

编辑配置文件的方式vim

  • # sudoedit /etc/sudoers
  • # vim /etc/sudoers
  • # visudo
    visudo –c 命令具备语法检查功能,和crontab -e编辑后退出检查语言功能相似。

三、sudo相关文件

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

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

配置文件规则有两类安全

  • 别名定义:不是必须的,别名必须所有并且只能使用大写英文字母的组合
  • 受权规则:必须的
  • 用户别名
    sudo 命令

四、sudo语法

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

user: 运行命令者的身份
host: 经过哪些主机
(runas): 以哪一个用户的身份
command: 运行哪些命令 网络

sudo 命令

  • sudo受权示例
    sudo 命令
    user1 ALL=(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermodide

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

五、sudo命令

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

六、总结

  • 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
sudo 命令工具

相关文章
相关标签/搜索