实战演练su命令与sudo服务

  • su和su-

      • 切换方式

      • 实例:

    sudo 提权

      • sudo的特色功能

      • sudo命令的常用参数

      • 注意

      • 案例1——允许zhanghe用户执行所有命令:

      • 案例2——仅允许linuxprobe用户以root用户身份执行cat命令。

      • 案例3——允许linuxprobe用户以任意身份执行命令,且每次都不需要密码验证。

su命令与sudo服务

在工作生产环境中不要去使用root用户身份,因为一旦执行了错误的命令后可能直接让系统崩溃。但因为许多的系统管理命令和服务为了安全所以只有超级用户才可以使用,因此这也无疑让普通用户受到更多的权限束缚,而su命令则是用于便捷的变更使用者的身份,能够让使用者在不注销的情况下顺畅的切换至其他用户。

切换方式

root用户切换到其他用户时无需输入密码 
普通用户再切换用户需要输入对方帐户密码才可以 
su user shell环境依然是root身份或者当前用户身份 
su – user 完全切换,shell环境变成切换过去的环境了

实例:

[root@localhost ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# su zhanghe
[zhanghe@localhost root]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
shell 环境变量没有切换过去
[root@localhost ~]# su - zhanghe
[zhanghe@localhost ~]$ echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/zhanghe/bin
shell 环境变量切换成 zhanghe用户的环境变量了

sudo 提权

sudo服务用于给普通用户提供额外权利来完成原本超级用户才能完成的任务,格式为:“sudo [参数] 命令名称”。


虽然上面的su命令允许普通用户完全变更为root用户身份,但这也无疑会暴露了超级管理员的密码,使得系统增添很多的安全隐患,因此我们可以使用sudo程序来仅将特定命令的执行权限赋予给指定的用户,这样即可保证了正常工作的同时也避免了过度使用root身份。只要合理的配置sudo服务便可以合理的兼顾系统的安全性和用户便捷性,原则也很简单,即在保证普通用户完成工作的前提下,尽可能少的给予额外的权限。

sudo的特色功能

1:限制用户执行指定的命令。 
2:记录用户执行的每一条命令。 
3:配置文件(/etc/sudoers)提供集中的管理用户、权限与主机等参数。 
4:验证过密码后5分钟(默认值)内无须再让用户验证密码,更加的方便。

sudo命令的常用参数

参数 作用 
-h 列出帮助信息。 
-l列出当前用户可执行的命令。 
-u 用户名或UID值 以指定的用户身份执行命令。 
-k 清空安全时间,下次执行sudo时需要再次密码验证。 
-b 在后台执行指定的命令。 
-p 更改询问密码的提示语。

只用超级用户才可以使用visudo命令编辑sudo程序的配置文件(/etc/sudoers), 
visudo命令的优势: 
防止多个用户同时修改sudo配置文件。 
对sudo程序配置文件的语法检查。

注意

visudo会调用vi编辑器来修改配置文件,而如果语法有报错则会报错:

visudo: >>> /etc/sudoers: syntax error near line 111 <<<
What now?
Options are:
(e)dit sudoers file again
(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)
//此时可以敲击"e键"来修正内容,敲击"x键"直接退出不保存还可敲击"Q键"强制保存退出(sudo程序将不能被启动)。

案例1——允许zhanghe用户执行所有命令:

//使用visudo命令编辑sudo程序的配置文件,在第99行添加参数允许linuxprobe用户能够从任意主机执行任意命令的参数。
//格式为:允许使用sudo服务用户 来源主机=(以谁的身份执行命令)  可执行命令的列表
[root@localhost ~]# visudo
zhanghe ALL=(ALL) ALL
//将上面的配置文件保存退出后切换至zhanghe用户:
[root@localhost ~]# su - zhanghe
//查看zhanghe用户可以使用那些sudo执行的命令(此处验证执行用户的密码):
[zhanghe@localhost ~]$ sudo -l
[sudo] password for zhanghe:
Matching Defaults entries for zhanghe 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
//告知zhanghe用户能够执行的命令有“所有”:
User zhanghe may run the following commands on this host:
   (ALL) ALL
[zhanghe@localhost ~]$ ls /root/
ls: cannot open directory /root/: Permission denied
//使用ls命令查看/root目录内的文件提示权限拒绝:
[zhanghe@localhost ~]$ sudo ls /root/
anaconda-ks.cfg  install.log  install.log.syslog
//使用sudo命令以root用户身份执行则正常浏览:

案例2——仅允许linuxprobe用户以root用户身份执行cat命令。

使用visudo命令编辑sudo程序的配置文件,将前面实验的参数删除(第99行)。然后在第112行追加允许linuxprobe用户只能以root用户身份执行cat命令的参数:

[root@localhost ~]# visudo
zhanghe ALL=(root) /bin/cat
//切换至zhanghe用户
[root@localhost ~]# su - zhanghe
[zhanghe@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
//使用cat命令查看密码文件后提示权限不足
[zhanghe@localhost ~]$ sudo cat /etc/shadow
root:$6$CGsqab6d$Cd.PnnWtlL5XZAyr9J2zoMqyJH1QodcDp1pQp0uZ1f0Cq4eq9.TMkSQU6IfpvYZEYc32.lmF0lKuQwavnC49a0:17007:0:99999:7:::
//使用sudo命令来运行cat命令后获得了root权限后查看成功

案例3——允许linuxprobe用户以任意身份执行命令,且每次都不需要密码验证。

使用visudo命令编辑sudo程序的配置文件,将前面实验的参数删除(第112行)后在此行追加下面的参数

[root@localhost ~]# visudo
zhanghe ALL=NOPASSWD: ALL
[root@localhost ~]# su - zhanghe
//切换至zhanghe用户
[zhanghe@localhost ~]$ sudo -k
//清空安全时间
[zhanghe@localhost ~]$ sudo ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:55:1F:A0  
         inet addr:10.1.252.97  Bcast:10.1.255.255  Mask:255.255.0.0
         inet6 addr: fe80::20c:29ff:fe55:1fa0/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:3194 errors:0 dropped:0 overruns:0 frame:0
         TX packets:759 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:282479 (275.8 KiB)  TX bytes:95037 (92.8 KiB)

lo        Link encap:Local Loopback  
         inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING  MTU:65536  Metric:1
         RX packets:2 errors:0 dropped:0 overruns:0 frame:0
         TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:98 (98.0 b)  TX bytes:98 (98.0 b)
//执行sudo后不再需要密码验证

原创文章,作者:M20_he,如若转载,请注明出处:http://www.178linux.com/43427

(0)
M20_heM20_he
上一篇 2016-09-05
下一篇 2016-09-05

相关推荐

  • 第三天作业

    1、列出当前系统上所有已经登录的用户的用户名。注意:同一个用户登录多次,则只显示一次即可 [root@localhost ~]# who | cut -d ' ' -f1 | sort | uniq [root@localhost ~]# who (unknown) :0         &nbsp…

    Linux干货 2016-08-30
  • Linux上文本处理三剑客sed

    Sed是一种在线编辑器,行编辑器,一次处理一行内容,在处理时,把当前处理的行存储在临时缓冲区当中,该缓冲区称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出:然后紧接着去处理下一行,重复完成相同的操作,直至文件末尾;sed处理的整个过程中,对象文件中的内容并没有发生改变,除非使用重定向来存储处理后的结果。sed主要用…

    Linux干货 2016-08-09
  • 位置变量在Shell脚本编程中的作用

    位置变量:         如果要向一个shell脚本传递信息,可以使用位置参数完成此功能;参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命令可以改变这个限制;参数从第一个开始,在第九个结束;每个访问参数前要加$符号;第一个参数为0,表示预留保存实…

    Linux干货 2016-08-15
  • 文本处理工具之grep正则表达式

    grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,…

    Linux干货 2016-08-08
  • MongoDB复制集及数据分片详解

    前言 MongoDB是一个由C++语言编写的基于分布式文件存储的数据库,是当前NoSQL数据库中比较热门的一种,旨在为Web应用提供可扩展的高性能数据存储解决方案。本文介绍MongoDB复制集及数据分片。 MongoDB 简介 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,…

    Linux干货 2015-07-15
  • 正则

    Edit 正则 概述: 正则表达式,Regular Expression,缩写regex、regexp、RE 正则表达式是文本处理极为重要的技术,用它可以对字符串按照某种规则进行检索、替换 1970年,Unix之父ken Thompson将正则表达式引入到Unix中文本编辑器ed和grep命令中,由此正则表达式普及开来 1980年后,perl语言对Henry…

    Linux干货 2017-11-06