7.10-11 visudo、sudo

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进行语法检查,这样实在太麻烦!
 
 

猜你喜欢

转载自www.cnblogs.com/fadewalk/p/10858842.html