系统中的普通用户有时需要root权限执行某种操作,要是使用su - root的话必须要知道root的密码,这是不安全的,所以有了sudo,root可以对/etc/sudoers做一定的配置,让普通用户在不切换到root的情况下,执行一些只有root才能执行的操作。这个文件只能root去修改,建议使用visudo这个命令修改,而不是直接vim /etc/sudoers。

原因有二:

◦ 一是它能够防止两个用户同时修改它;

◦ 二是它也能进行有限的语法检查。

当编辑这个文件有错误时,使用visudo会给出错误提示,此时可以按e重新编辑,x不保存退出,Q保存退出,如果选择Q,sudo就不能正常工作了。

实验过程完成了给指定用户sudo权限和用别名指定一组用户的可以执行的sudo指令

过程如下:

[root@mail ~]# visudo   
  
#chen为普通用户,ALL可以从任何的主机登陆,(root)可以以root身份,后面是可以执行的命令,最好写全路径  
     88 ## Allow root to run any commands anywhere  
     89 root    ALL=(ALL)       ALL  
     90 chen    ALL=(root)      /usr/sbin/useradd,/usr/bin/passwd  
     91 ## Allows members of the 'sys' group to run networking, software,  
  
  
[root@mail ~]# exit  
logout  
[chen@mail 桌面]$ sudo -l #查看自己可以执行的sudo命令  
[sudo] password for chen:   #输入自己的密码  
Matching Defaults entries for chen on this host:  
    requiretty, 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 chen may run the following commands on this host:  
    (root) /usr/sbin/useradd, (root) /usr/bin/passwd    #这里看到可以执行的sudo命令  
[chen@mail 桌面]$ sudo useradd user3  #测试  
[chen@mail 桌面]$ sudo passwd user3  
更改用户 user3 的密码 。  
新的 密码:  
无效的密码: 过短  
无效的密码: 过于简单  
重新输入新的 密码:  
passwd: 所有的身份验证令牌已经成功更新。  
[chen@mail 桌面]$ id user3    #添加user3成功  
uid=503(user3) gid=503(user3) 组=503(user3)  
[chen@mail 桌面]$ visudo  #普通用户不允许编辑  
visudo: /etc/sudoers: Permission denied  
visudo: /etc/sudoers: Permission denied  
[chen@mail 桌面]$ su - root     
密码:  
[root@mail ~]# visudo   
[root@mail ~]# cat /etc/sudoers |grep user1 #编辑增加了下面一行  
user1   ALL=(user2) /bin/ls  
[root@mail ~]# su - user1  
[user1@mail ~]$ sudo -l  
  
We trust you have received the usual lecture from the local System  
Administrator. It usually boils down to these three things:  
  
    #1) Respect the privacy of others.  
    #2) Think before you type.  
    #3) With great power comes great responsibility.  
  
[sudo] password for user1:   
Matching Defaults entries for user1 on this host:  
    requiretty, 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:  
    (user2) /bin/ls  
[user1@mail ~]$ ls /home/user2  #user1直接查看user2的家目录肯定是不允许的  
ls: 无法打开目录/home/user2: 权限不够  
[user1@mail ~]$ sudo -u user2 ls /home/user2    #但是sudo以user2的身份查看就可以  
a  
  
#这里不能以user2的身份添加用户,因为user2本身还没有useradd的权限  
#事实上,即使给user2 sudo的添加用户权限这样也是不行的,因为user2添加的时候也要sudo的啊  
#直接以user2肯定不行,看演示。  
[user1@mail ~]$ sudo -u user2 useradd user4 #这时候不能添加  
Sorry, user user1 is not allowed to execute '/usr/sbin/useradd user4' as user2 on mail.example.com.  
[user1@mail ~]$ exit  
logout  
[root@mail ~]# visudo     
#添加了这行,给user2 sudo添加用户的权限,这时候sudo -u user2 useradd user4是否可以呢?不行的!  
 user2   ALL=(root)      /usr/sbin/useradd,/usr/bin/passwd  
[root@mail ~]# su - user2  
[user2@mail ~]$ sudo -l  
  
We trust you have received the usual lecture from the local System  
Administrator. It usually boils down to these three things:  
  
    #1) Respect the privacy of others.  
    #2) Think before you type.  
    #3) With great power comes great responsibility.  
  
[sudo] password for user2:   
Matching Defaults entries for user2 on this host:  
    requiretty, 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 user2 may run the following commands on this host:  
    (root) /usr/sbin/useradd, (root) /usr/bin/passwd  
[user2@mail ~]$ su - user1  
密码:  
[user1@mail ~]$ sudo -u user2 useradd user4 #答案在此,不行的!  
Sorry, user user1 is not allowed to execute '/usr/sbin/useradd user4' as user2 on mail.example.com.  
[user1@mail ~]$   
#总结下,sudo -u 用户名 命令 ,当前用户以某个用户的身份执行某个命令的时候,必须这个用户本身不加sudo的情况  
#直接能执行的命令,才可以这种方式执行。另外,sudo不加-u,默认以root身份执行  
  
[user1@mail ~]$ exit  
logout  
[user2@mail ~]$ exit  
logout  
[root@mail ~]# visudo   
#改动如下:删除了91,92行,  
     88 ## Allow root to run any commands anywhere  
     89 root    ALL=(ALL)       ALL  
     90 chen    ALL=(root)      /usr/sbin/useradd,/usr/bin/passwd  
     91 user1   ALL=(user2)     /bin/ls     #删除  
     92 user2   ALL=(root)      /usr/sbin/useradd,/usr/bin/passwd   #删除  
  
     88 ## Allow root to run any commands anywhere  
     89 root    ALL=(ALL)       ALL  
     90 chen    ALL=(root)      /usr/sbin/useradd,/usr/bin/passwd  
     91 ADMIN   ALL=(root)      /usr/sbin/useradd,/usr/bin/passwd   #新添加  
  
     20 # User_Alias ADMINS = jsmith, mikem  
     21  User_Alias ADMIN = user1, user2        #新添加  
     22   
#这里相当于ADMIN为user1,user2的别名,这个别名具有添加用户的权限,user1和user2也具有这个权限  
[root@mail ~]# su - user1  
[user1@mail ~]$ sudo -l  
[sudo] password for user1:   
Matching Defaults entries for user1 on this host:  
    requiretty, 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) /usr/sbin/useradd, (root) /usr/bin/passwd    #可以看到user1有useradd权限  
[user1@mail ~]$ su - user2  
密码:  
[user2@mail ~]$ sudo -l  
[sudo] password for user2:   
Matching Defaults entries for user2 on this host:  
    requiretty, 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 user2 may run the following commands on this host:  
    (root) /usr/sbin/useradd, (root) /usr/bin/passwd    #user2也有  
[user2@mail ~]$

sudo配置临时取得root权限的更多相关文章

  1. [root]既然sudo 可以暂时获取root权限,那么为何还需要root这个用户呢

    既然sudo 可以暂时获取root权限,那么为何还需要root这个用户呢 sudo 非root用户可以临时行使root权限,也就是非root用户可以操作该系统下的任何文件,仍然存在安全风险,怎么解释? ...

  2. 普通用户如何临时获取root权限

    转自:http://634871.blog.51cto.com/624871/1325907 在实际工作中,公司不会将root用户直接给员工使用,而是通过员工自己的账号临时获得系统的root权限. 1 ...

  3. 【linux】sudo su切换到root权限

    在用户有sudo权限但不知道root密码时可用 sudo su切换到root用户

  4. linux命令-sudo普通用户拥有root权限

    普通用户权限不够 [root@wangshaojun ~]# su - dennywang[dennywang@wangshaojun ~]$ ls /root/ls: 无法打开目录/root/: 权 ...

  5. cygwin选择安装包选项搭建NDK开发环境/配置cygwin的root权限

    9.Search是可以输入你要下载的包的名称,能够快速筛选出你要下载的包.那四个单选按钮是选择下边树的样式,默认就行,不用动.View默认是Category,建议改成full显示全部包再查,省的一些包 ...

  6. Linux su和sudo命令的区别,并获得root权限

    su(superuser) su表示切换用户,如: 输入:su命令后回车表示切换当前的用户到root用户,或者: 输入:su - root(或者其他用户名)这里加了"-"后表示也切 ...

  7. Debian普通用户获取root权限|sudo的安装与配置

    Debian系统的普通用户需要安装软件时,往往会收到“Permission denied”的提示,这时候需要root权限.那么如何在不登陆超级管理员账户的前提下拥有root权限呢?对于大多数Linux ...

  8. 设置用户sudo -s拥有root权限

    开通普通用户的ROOT权限,上线了可以禁止用户使用root权限 修改配置文件 vi etc/sudoers 在 root    ALL=(ALL) ALL那么你就在下边再加一条配置:hjd ALL=( ...

  9. 编写具有临时root权限的应用

    本文以dpkg为例进行演示 关于setuid具体原理可查阅<Unix高级环境编程>“进程控制”章节关于“设置用户id和设置组id”的介绍 1. 首先需要通过setuid(0),让程序获取临 ...

随机推荐

  1. 从Git仓库中恢复已删除的分支、文件或丢失的commit

    亲测可用 因为自己 commit 并且 push 后 因为冲突 提交不了,不小心做了 rebase 代码被 覆盖 用以下命令 还原: 查看所有日志 并记下 hash 值 git reflog 然后用: ...

  2. leetcode 67

    67. Add Binary Given two binary strings, return their sum (also a binary string). For example,a = &q ...

  3. 设计模式-工厂方法模式(FactoryMethod)

    简介: 简单工厂模式将类的示例化放在工厂对象中. 工厂方法模式是简单工厂模式的延伸,不同的是其将子类的实例化延迟到子类工厂中实现,本身仅定义一个创建对象的接口. 工厂方法模式主要由四部分组成: 1.抽 ...

  4. rhythmbox插件开发笔记1:简介&入门

    rhythmbox是gnome下一款开源的音乐播放软件.ubuntu和fedora的桌面环境中均默认安装了rhythmbox. rhythmbox架构非常灵活,几乎所有地方都可以用插件来修改.用户想实 ...

  5. MongoDB的主要特性概述

    一.文档数据模型 文档是一组属性名和属性的集合.相较于关系数据库复杂的规范化,面向文档的数据模型很容易以聚合的形式来表示数据.文档采用无Schema的形式,这种做法带来了一定的优势:首先,由应用程序, ...

  6. 实现QQ机器人报警

    如题,废话不说,直接上代码.首先是登录QQ的小脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  7. php对数组排序的例子

    分享一个php数组排序的例子,介绍了和php,有关的知识.技巧.经验,和一些php源码等. <?php class='pingjiaF' frameborder='0' src='http:// ...

  8. How to using T-SQL statement copy table[SQL]

    SQL复制表的几种方法:  仅复制表结构:select * into newTableName from OldTableName where 1 = 2 SQL复制整张表 select * into ...

  9. Form认证导致登陆页面的样式无效和图片不能显示的原因

    最近在做企业内门户网站,一切进展还算顺利,部署到生产环境的时候也能没有什么大问题,只是登录页面的样式不起作用,不知为何,因为是使用了login控件,最初以为是此控件有内置默认样式或者什么原因,于是就不 ...

  10. Python学习教程(learning Python)--3.3.2 Python的关系运算

    如果if的condition不用布尔表达式来做条件判断而采用关系表达式,实际上关系表达式运算的结果要么是True要么是False.下面我们先了解一些有关关系运算符的基础知识,如下表所示. 做个小程序测 ...