sudo详解


  目录

  前言

   1、原理

   二、命令

   三、sudo配置

    1、配置文件

    2、时间戳文件

    3、日志文件

    4、配置文件支持使用通配符glob

    5、配置文件规则有两类

    6、授权规则

      1)授权格式

      2)格式说明

    7、sudo别名

      1)别名有四种类型

      2)别名格式


前言

Sudo(substitute user [或 superuser] do),是一种程序,用于类Unix操作系统如BSD,Mac OS X,以及GNU/Linux以允许用户

通过安全的方式使用特殊的权限运行程序(通常为系统的超级用户)。

        对linux有一定了解的人多少也会知道点关于sudo命令。sudo命令核心思想是权限的赋予 ,即某个命令的所属用户不是你自己,而你

却有权限执行它。但是我们需要注意的是,虽然你有权限执行这个命令,但是在执行的时候却仍是以这个命令本身所属用户来完成的[注释

1]。(su命令类似sudo命令,但是两者的差别在于前者su是一个粗粒度权限赋予,对su最好的理解我觉得是change user running 

command permanent。即永久的切换到了su过去的用户,然后以这个su到的新用户干它能干的一切事情,而sudo则是指在执行某个命令

的时候临时切换到这个命令的所属用户执行[注释1],而且sudo可以做到以单个命令为单位将权限赋予给其他用户,相比su显得更加灵活。)


1、原理

    在sudo于1980年前后被写出之前[2],一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。

    sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”)[3];在一般用户需要获取特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟[4],可在/etc/sudoers自定义),使用sudo不需要再次输入密码。

    由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户替换超级用户作为管理账号,例如Ubuntu、Mac OS X等。


二、命令

    语法

    sudo [-bhHpV][-s ][-u <用户>][指令]

    或sudo [-klv]

    参数

   -a type       使用指定的 BSD 认证类型

   -b            在后台运行命令

   -C fd         关闭所有 >= fd 的文件描述符

   -E            在执行命令时保留用户环境

   -e            编辑文件而非执行命令

   -g group      以指定的用户组执行命令

    -H            将 HOME 变量设为目标用户的主目录。

   -h            显示帮助消息并退出

   -i [command]  以目标用户身份运行一个登录 shell

   -K            完全移除时间戳文件

   -k            无效的时间戳文件

   -l[l] command 列出用户能执行的命令

   -n            非交互模式,将不提示用户

   -P            保留组向量,而非设置为目标的组向量

   -p prompt     使用指定的密码提示

   -S            从标准输入读取密码

   -s [command]  以目标用户身份运行 shell

   -U user       在列表时,列出指定用户的权限

   -u user       以指定用户身份运行命令(或编辑文件)

   -V            显示版本信息并退出

   -v            更新用户的时间戳而不执行命令

   --            停止处理命令行参数

三、sudo配置

       1、配置文件

/ect/sudoers

                    下文的中授权或别名写入该文件即可

                    执行visudo命令可编写

/ect/sudoers.d/

                    可在该目录下自定义文件并将授权或别名写入。

        2、时间戳文件

/va/db/sudo

        3、日志文件

/var/log/secure

        4、配置文件支持使用通配符glob:

?:任意单一字符

*:匹配任意长度字符

[wxc]:匹配其中一个字符

[!wxc]:除了这三个字符的其它字符

\x :转义

`alpha` :字母  示例  /bin/ls   `alpha`*

        5、配置文件规则有两类

1、别名定义:不需必须的

2、授权规则:必须的。

6、授权规则

    1)授权格式

用户 登入主机=(代表用户) 命令

 示例 :

root ALL=(ALL) ALL

wang ALL=(ALL) /bin/mount /dev/sr1 /mnt/dvd2  

#意思是任何主机可以登录用户wang并代表所有用户利用所有的权限执行mount命令将/dev/sr1 挂载到/mnt/dvd2

授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换到哪些用户或用户组)] [是否需要密码验证] [命令

        2],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令3]......

%wheel ALL=(ALL) NOPASSWD: ALL

#这里的NOPASSWD 代表无需密码验证。

    2)格式说明:

user :运行命令者的身份

host:通过那些主机

(runas):以那个用户的身份

Command :运行那些命令


User和runas


username

#uid

%group_name

%#gid

User_aliasrunas_ailas

Host:

Ip或hostname

netwoek(/netmask)

host_alias

command:

command name

directory

sudoedit

Cmnd_Alias

7、sudo别名

别名:(这里的别名可以理解为定义的组)

    1)别名有四种类型:

User_Alias   #用户别名 别名成员可以是用户,用户组(前面要加%号)

Runas_Alias #用来定义runas别名,指定的是“目的用户”,即sudo 允许切换至的用户;

Host_Alias #which host 那些主机上

Cmnd_Alias   #  command执行那些命令

    2)别名格式

            别名必须命名是包含大写字母、下划线以及数字,但必须以一个大写字母开头[A_Z]([A_Z][0-9]_)*

    示例: User_Alias NAME = wang,alice

    Cmnd_Alias DISKMAG=/sbin/fdisk,/sbin/parted

     Cmnd_Alias NETMAG=/sbin/ifconfig,/etc/init.d/network

      Runas_Alias OP = root, operator

      Host_Alias HT01=localhost,st05,st04,10,0,0,4,255.255.255.0,192.168.1.0/24

      Cmnd_Alias ADMINCMD = /usr/sbin/useradd

      Cmnd_Alias CMD=/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*

      Cmnd_Alias CMD1=!/usr/bin/passwd root #!意思代表取反