7.10 visudo:编辑 sudoers文件

    visudo命令是专门用来编辑/etc/sudoers这个文件的,同时提供语法检查等功能。/etc/sudoers文件是sudo命令的配置文件。
 
-c    手动执行语法检查
 
执行visudo 对普通用户lewen和kevin授权的例子。
 
[root@cs6 ~]# visudo 
lewen ALL=(ALL) ALL #<==此行是98行,将lewen提权为root身份。
kevin ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel
#<==授权kevin 可以以root身份添加和删除用户权限。
#<==分别对lewen和kevin两个用户做不同的授权 user MACHINE= COMMANDS
lewen ALL=(ALL) /usr/sbin/useradd、/usr/sbin/userdel
  提示:如果kevin用户被授予上述权限,那么它可在所有的机器上以所有的角色运行useradd、userdel命令,而oldboy用户别会拥有和root相同的权限,并且可以切换到root账户。
如果是针对用户组,则对应的授权命令如下: 
 %用户组 机器=(授权使用哪个角色的权限) /usr/sbin/useradd  
 
    通过sudo进行系统授权管理的目的:即能让运维人员干活,又不会威胁系统安全,还可以审计用户使用sudo的提权操作命令,默认的用户是无法获得root权限的。
    为了管理方便,工作中可以对lewen授权ALL权限,即可以管理整个系统,平时可以使用lewen用户处理工作,而不使用root用户。
 
例如:工作中有批量管理用户的需求,若使用快速操作命令增加sudo授权,则需要单独执行语法检查,快速操作命令如下:
\cp /etc/sudoers /etc/sudoers.ori
echo "lewen ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers
tail -l /etc/sudoers
    进行上述操作时直接追加内容到sudoers文件,没有进行语法检查,因此需要单独执行语法检查命令。
 
[root@cs6 ~]# visudo -c
/etc/sudoers: parsed OK

7.11 sudo:以另一个用户身份执行命令

    通过sudo命令,可以让普通用户在执行指定的命令或程序上,拥有超级用户的权限,进行分类,并且有针对性地(精细)将不同的命令授予指定的普通用户,同时普通用户不需要知道root 密码就可以得到授权,这个授权可以用visudo配置管理。
 
-l    列出当前用户可以执行的命令。只有在sudoers文件里的用户才能使用该选项
-h    列出使用方法,并退出
-H    将环境变量中的HOME(家目录)指定为要变更身份的使用者家目录(如果不加-u 参数就是系统管理者root)
-V    显示版本信息,并退出
-v    sudo在第一次执行时,或者在N分钟内没有执行(N预设为五),则会询问密码,这个参数用于重新做一次确认
-u    以指定用户的身份执行命令。后面是除root以外的用户,可以是用户名,也可以是uid
-k    清除时间截上的时间,下次再使用sudo时要再输入密码
-K    与k类似,同时还要删除时间戳文件
-b    在后台执行指定的命令
-p    可以更改询问密码时的提示语
-e    不执行命令,而是修改文件,相当于命令sudo edit
 
 
查看用户被visudo授权后拥有的权限。
已经对lewen用户进行过授权,此时再以lewen用户的身份登录系统时,就可以通过执行类似于sudo ls -l /root(sudo后面加正常命令)的命令来以root用户的权限管理系统了,命令如下: 
[root@cs6 ~]# su lewen
[lewen@cs6 root]$ ls
ls: cannot open directory .: Permission denied
[lewen@cs6 root]$ sudo ls
centos6_10.iso dev_sdb1.img fav.jpg lewen.log lewen.nc nohup.out test.data test.test_u test.txt tongji.log web.sh
[lewen@cs6 root]$
通过sudo授权管理之后,所有用户执行授权的特殊权限格式为“sudo命令”。
如果需要切换到root执行相关操作,则可以通过“sudo su -”命令,注意,此命令提示的密码为当前用户的密码,而不是root的密码。
执行“sudo -l”命令可以查看当前用户被授予的sudo权限集合。

[kevin@cs6 root]$ sudo ls
[sudo] password for kevin:
Sorry, user kevin is not allowed to execute '/bin/ls' as root on cs6.
[kevin@cs6 root]$ sudo -l
[sudo] password for kevin:
Matching Defaults entries for kevin on this host:
!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 kevin may run the following commands on this host:
(ALL) /usr/sbin/useradd, (ALL) /usr/sbin/userdel
对于Linux系统bash的内置命令,一般无法进行sudo授权,例如:cd命令。
sudo 授权与su切换的原理示意图如图7-1所示。
 
 
    在生产环境中,通常会禁止root远程登录,不过,系统会为每个运维人员建立一个普通账号,然后根据运维人员的需求,通过sudo控制登录系统的权限,事实证明这是一个不错的权限管理方式。当然,在笔者的生产环境中还使用了ldap统一认证登录及授权管理的方式。即只要有一个账号和密码,即可在全公司多个机房系统内通行无阻(系统登录、SVN、VPN等),有关这部分内容的讲解,在老男孩教学的高级课程中会有涉及。在此大家了解下即可。
    普通用户的环境变量问题:在早期的CentOS5系统中,普通用户执行系统管理的相关命令时会遭遇到环境变量问题,导致找不到执行的命令(CentOS6以后的系统已经不存在这个问题了)。
 sudo授权对于bash内置命令的处理是一个难题,因为内置命令没有实体文件和路径,不过一般也有解决方法,例如可以使用sudo ls替代sudo cd,有的网友会在使用sudo bash后再使用内置命令,这是很危险的,不推荐。
 
 
[root@cs6 ~]# ll /var/db/sudo/
total 8
drwx------. 2 root kevin 4096 May 12 11:30 kevin
drwx------. 2 root sa 4096 May 12 11:05 lewen
    待用户执行sudo并且输入密码之后,用户会获得一张默认存活期为5分钟的“人场券”(默认值可以在编译的时候改变)。但超时以后,用户就必须重新输入密码了。
    可以使用sudo的-k或-K参数清空sudo用户的时间戳,这样还会提示输入密码,但是如果配置授权对应用户时加了NOPASSWD选项,那么执行sudo命令时则永久不会提示输入密码了。
 
sudo的配置文件/etc/sudoers
通过以下命令可以看到sudo的配置文件/etc/sudoers里的内容。
[root@cs6 ~]# ll /etc/sudoers
-r--r-----. 1 root root 3841 May 12 11:07 /etc/sudoers
    建议用visudo编辑该文件,因为该命令有语法检查,否则一旦出错了,普通用户就无法使用sudo了。直接在命令行执行visudo 即可自动打开/etc/sudoers文件。如果通过vi来编辑/etc/sudoers,则保存时要用“wq!”来强制保存,否则会提示只读不能保存的错误,而且最后还要用visudo -c进行语法检查,这样实在太麻烦!
 
 

7.10-11 visudo、sudo的更多相关文章

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

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

  2. OS X EI Capitan 10.11.4中sudo无法起作用的解决方法

    mac升级到OSX EI Capitan 10.11.4后sudo命令无法起作用,执行任何操作总是显示Operation denied.这是因为在10.11.4中引入了Rootless机制,即就算是R ...

  3. 10.11 cocoapods安装

    手动安装gem 手动下载 rubygem https://rubygems.org/pages/download#formats 10.11 cocoapods安装 sudo gem install ...

  4. CocoaPods安装、卸载、使用说明(Mac ox 10.11+)

    一.全新安装前,先检查是否有安装残留 由于Mac 10.11更改了安全机制,所以cocoapods得安装和卸载命令也有所改变, 1.如果之前装过cocopods,最好先卸载掉,卸载命令: $ sudo ...

  5. OSX 10.11 cocoapods安装命令: sudo gem install -n /usr/local/bin cocoapods

    10.11 cocoapods安装命令: sudo gem install -n /usr/local/bin cocoapods

  6. Linux 下以其他用户身份运行程序—— su、sudo、runuser

      本文综合分析了Linux系统下,如何使用runuser命令.su命令和sudo命令以其他用户身份来运行程序,以及这三个命令的运行效率比较. 一.su 命令临时切换用户身份 SU:( Switch ...

  7. ansible hosts文件编写,简单使用测试(普通用户、sudo用户、root用户登录权限测试)

    一.配置文件修改: 1.备份原配置文件: cp /etc/ansible/hosts /etc/ansible/hosts.bak 2.修改hosts配置文件: cat <<EOF> ...

  8. chmod a+w . 权限控制 su、sudo 修改文件所有者和文件所在组

    对当前目录对所有用户开放读写权限 chmod a+r . $ sudo chmod -R a+w /usr/lib/python2.7 所有用户添加文件的写权限 [linux]su.sudo.sudo ...

  9. chmod a+w . 权限控制 su、sudo 修改文件所有者和文件所在组 添加用户到sudoer列表中 当前用户信息

    对当前目录对所有用户开放读写权限 chmod a+r . $ sudo chmod -R a+w /usr/lib/python2.7 所有用户添加文件的写权限 [linux]su.sudo.sudo ...

随机推荐

  1. 结合k8s和pipeline的流水线,并通过k8s接口完成镜像升级

    现在这家单位的CICD比较的混乱,然后突发奇想,想改造下,于是就用pipeline做了一个简单的流水线,下面是关于它的一些介绍 写一个简单的流水线 大概就是这么个流程简单来说就是:拉代码---> ...

  2. 面试系列<3>——java并发

    面试系列--java并发 一.使用线程 有三种使用线程的方法: 实现Runnable接口 实现Callable接口 继承Thread类 实现 Runnable 和 Callable 接口的类只能当做一 ...

  3. JMeter线程组编辑区揭秘

    线程组编辑区如下: 有点复杂,但是慢慢看下来,还是比较容易理解. Name 带有业务含义的名字. Comments 线程组的备注说明. Action to be taken after a Sampl ...

  4. 页面元素定位 - XPath

    1. XPath 简介 2. 选取节点 2.1 选取节点表达式 2.2 XPath 运算符 2.3 XPath 常用函数 2.4 亲属关系匹配 2.5 *综合示例 1. XPath 简介 什么是 XP ...

  5. w1R3s靶机work_through

    前言 这靶机挺简单的.虽然网友们有分享oscp向的靶机集,但是没有一个难度梯度,做起来就怪怪的. 打点 nmap -sP 192.168.218.0/24 发现主机IP 192.168.218.134 ...

  6. 工厂模式之简单工厂模式,head first设计模式

    简单设计模式比较简单,15分钟的时间,跟着我做,十几分钟学会简单设计模式,开始吧: 1.使用new实例化一个对象时,你肯定知道这种代码缺少弹性,绑定着具体的类会导致代码更加脆弱,简单工厂模式就是针对接 ...

  7. OO Unit4总结 & 结课总结

    OO Unit4总结 & 结课总结 OO课Unit4 UML解析应用技术回顾 BUAA.1823.邓新宇 2020/6/19 总结本单元三次作业的架构设计 本单元的架构设计主要是两方面. 一方 ...

  8. shopify 学习链接整理

    shopify shopify packagist https://help.shopify.com/zh-CN/manual/apps/apps-by-shopify/script-editor/s ...

  9. shell中的引号和转义

    引号和转义 Bash 只有一种数据类型,就是字符串.不管用户输入什么数据,Bash 都视为字符串.因此,字符串相关的引号和转义,对 Bash 来说就非常重要. 转义 某些字符在 Bash 里面有特殊含 ...

  10. Conda基本使用方法

    anaconda/miniconda的安装 请点击查看我的博客 本教程全部命令操作均在CMD(win).terminal(win).终端(linux/Macos)中执行 使用前配置 因为anacond ...