sudo是一种权限管理机制,管理员可以授权普通用户去执行root的操作,而不需要知道root的密码,它依赖于/etc/sudoers这个文件,可以授权给哪个用户在哪个主机上能够以管理员的身份执行什么样的管理命令,而且是有限的。/etc/sudoers文件相当于一个授权表,此文件的权限只有管理员可以查看并且不建议使用vim编辑器来进行编辑,跟cron一样有专门的编辑命令可以检测语法问题,以免产生语法错误导致系统崩溃;针对sudo编辑专门提供了一个命令visudo。

sudo命令格式

sudo [options] COMMAND

options:

  -l COMMAND:列出用户可执行或不可执行的命令信息;
  -k:清除用户成功认证所缓存的时间戳,默认缓存时间戳为5分钟;
  -p:改变询问密码的提示符号;
  -s<shell>:执行指定的shell;
  -u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份

visudo

用户授权语句的格式:

USERS  LOCATION=(USERNAME|GROUP|runas_alias)  [NOPASSWD|PASSWD]  COMMAND

实例:root  ALL=(ALL)  ALL (第一个ALL指网络中的主机;第二个ALL指目标用户,以谁的身份运行命令;第三个ALL指命令名)
   user1  ALL=(user2,user3)  /bin/ls, /bin/rm
   user2  localhost=(root)    /bin/touch, /bin/rm
   user3  localhost=(root)    nopasswd:/bin/touch

其中:

  USERS 可以是:
    username:授权用户名;
    %groupname:授权用户组;
    User_alias:授权的用户或组别名

  LOCATION 可以是:
    ip:规则匹配的IP地址;
    hostname:规则匹配的主机名;
    NetAddr:规则匹配的网段;
    Host_alias:主机别名

  COMMAND 可以是:
    command:命令的绝对路径;
    Cmnd_alias:命令的别名组

而关于 Alias 定义的格式:

ALIAS_TYPE  NAME=item1,item2,item3...

注意:NAME必须全为大写字母。
  ALIAS_TYPE的类型包括:
    User_Alias:授权用户别名类型
    Host_Alias:主机别名类型
    Runas_Alias:作为哪些用户执行的别名类型
    Cmnd_Alias:命令别名类型

应用实例1

[root@happiness ~]# visudo
root ALL=(ALL) ALL
user1 ALL=(user2,user3) /bin/ls #指定user1能执行user2,user3的ls命令
[root@happiness ~]# su - user1
  Last login: Tue Sep 4 16:09:47 CST 2018 on pts/0
[user1@happiness ~]$ sudo ls /home/user2 #sudo没指定用户时,默认以root执行,而user1没有root的ls权限,故报错
  [sudo] password for user1:
  Sorry, user user1 is not allowed to execute '/bin/ls /home/user2' as root on happiness.
[user1@happiness ~]$ sudo -u user2 ls /home/user2 #sudo权限可用
  [sudo] password for user1:
  user2txt
[user1@happiness ~]$ sudo -u user3 ls /home/user2
  ls: cannot open directory /home/user2: Permission denied
[root@happiness ~]# visudo
root ALL=(ALL) ALL
user1 All=(user2,user3) /bin/ls
Defaults:user1 runas_default=user2
#指定user1默认以user2执行ls命令
[root@happiness ~]# su - user1
  Last login: Tue Sep 4 17:08:18 CST 2018 on pts/0
[user1@happiness ~]$ sudo -k
[user1@happiness ~]$ sudo ls /home/user3
ls: cannot open directory /home/user3: Permission denied
[user1@happiness ~]$ sudo ls /home/user2 #默认用user2执行并且不需要输入密码
  user2txt

应用实例2

[root@happiness ~]# visudo
  Cmnd_Alias COMM1=/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd,!/usr/bin/passwd root
  
Cmnd_Alias COMM2=/usr/sbin/shutdown,/usr/sbin/reboot
  User_Alias USERADM=user1,user2
  USERADM ALL=(root) NOPASSWD:COMM1,PASSWD:COMM2

[root@happiness ~]# useradd user1
[root@happiness ~]# useradd user2
[root@happiness ~]# passwd user1
测试结果:
[root@happiness ~]# su - user1
[user1@happiness ~]$ sudo -l #查看用户所拥有的sudo权限
Matching Defaults entries for user1 on this host:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS",
env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE
LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User user1 may run the following commands on this host:
(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd, !/usr/bin/passwd root, (root) PASSWD:
/usr/sbin/shutdown, /usr/sbin/reboot
[user1@happiness ~]$ sudo passwd user2 #为user2设置密码
  Changing password for user user2.
  New password:
  [user1@happiness ~]$ sudo passwd root #不允许更改root密码
  Sorry, user user1 is not allowed to execute '/bin/passwd root' as root on happiness.
[user1@happiness ~]$ sudo shutdown #执行shutdown需要输入用户密码
  [sudo] password for user1:

sudo及visudo的更多相关文章

  1. sudo,visudo

    visudo修改/etc/sudoers文件 用户名/%组名 主机名/主机别名/网段=(身份)命令 若(ALL)为空则为所有身份,即包含root身份 user1 ALL=/sbin/shutdown ...

  2. Linux用户配置sudo权限(visudo)

    sudo的工作过程如下: 1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限 2,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认 ...

  3. sudo 及visudo用法

    visudo 编辑sudoers文件 1.命令功能 bisudo命令是专门用来编辑/etc/sudoers文件,同时提供语法检查等功能./etc/sudoes文件是sudo命令的配置文件. 2.语法格 ...

  4. Shell命令-用户用户组管理之visudo、sudo

    文件及内容处理 - visudo.sudo 1. visudo:编辑/etc/sudoers文件的专属命令 visudo命令的功能说明 visudo命令专门用来编辑/etc/sudoers这个文件的. ...

  5. CentOS添加用户并加入sudo权限

    # 新增用户 useradd username # 设置密码 passwd username # 加入sudo ## 打开sudo配置文件 visudo ## 找到下面这两行,并在下面新增红色部分 # ...

  6. 当执行sudo时提示“is not in the sudoers file”的解决方案:

    出现这种提示是由于普通用户帐号没有权限执行sudo命令,所以需要切换到root身份进行颁发权限: $su -(注意有- ,这和su是不同的,在用命令"su"的时候只是切换到root ...

  7. sudo和rpm命令

    sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等.这样不仅减少了root用户的登录 和管理时间,同样也提高了安全 ...

  8. 配置sudo日志审计

    1.检查sudo与syslog服务 centos [root@xiaoyuer ~]# rpm -qa|grep sudo sudo-1.8.6p3-24.el6.x86_64 [root@xiaoy ...

  9. Linux学习之文件属性chattr权限与sudo权限(十二)

    Linux学习之文件属性chattr权限与sudo权限 文件属性chattr Linux文件的隐藏属性在保护系统文件的安全性上非常重要,是防止误操作的,对root用户也同样有效.chattr命令只能在 ...

随机推荐

  1. 慧都启动“正版IDE联合超值推广计划

    越来越多的中国软件企业为盗版所害而蒙受巨大损失,正版化意识逐渐兴起.IDE(集成开发环境)是软件开发.编写代码必备工具,而正版IDE更具有运行更稳定.编码更安全.保障更加完善等特点,逾为中国软件行业企 ...

  2. Windows7中Java64位环境变量配置:javac不是内部命令或外部命令,也不是可运行的程序或批处理文件。

    按照默认设置安装完JDK(Java Developement Kits)后,一般默认路径为:C:\Program Files\Java\jdk1.8.0_05_x64\文件夹. 然后配置环境变量:&q ...

  3. 64位系统中连接Access数据库文件的一个问题

    近日在windows 7 64位系统中编译以前写的程序,发现在连接Access数据库时总是出现异常,提示“Microsoft.Jet.OLEDB.4.0”未在本机注册,同样的代码在32位的xp系统中却 ...

  4. Vue项目中引入mockjs

    前提:创建好的vue项目 前言: 为什么引入mockjs:为了实现前后端分离,开发工作可以异步进行 其他工具:axios 一般的前后端交互过程:前端 --> ajax请求 --> 网络协议 ...

  5. [EffectiveC++]item31:将文件间的编译依存关系降至最低

    P143:“声明的依赖性"替换“定义的依存性”

  6. OC 类 的声明

    Student.h // @interface代表声明一个类 // : 代表继承 @interface Student : NSObject { // 成员变量要定义在下面的大括号中{} int ag ...

  7. linux下修改apt下载源

    很多时候使用apt install命令会出现Unable to fetch somearchives的错误,我们需要运行以下apt update,可是经常会出现下载速度很慢的情况 这里就记一下将apt ...

  8. note03-计算机网络

    3. 网络层 网络层的主要协议有IP.ICMP.IGMP.ARP等: IP地址分类:ABCDE ,根据32比特位的IP中网络号所占位数进行决定IP的类型 A:0 0000000 网络号| 000000 ...

  9. Android(java)学习笔记11:生产者和消费者之等待唤醒机制

    1. 首先我们根据梳理我们之前Android(java)学习笔记70中,关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 下面 ...

  10. PythonTip(2)

    结尾0的个数 描述: 给你一个正整数列表 L, 输出L内所有数字的乘积末尾0的个数.(提示:不要直接相乘,数字很多,相乘得到的结果可能会很大). 例如: L=[2,8,3,50], 则输出:2 n = ...