7.10-11 visudo、sudo 矫情吗;* 2021-12-12 20:23 232阅读 0赞 ## 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所示。 ![Image 1][] 在生产环境中,通常会禁止root远程登录,不过,系统会为每个运维人员建立一个普通账号,然后根据运维人员的需求, **通过sudo控制登录系统的权限**,事实证明这是一个不错的权限管理方式。当然,在笔者的生产环境中还使用了ldap统一认证登录及授权管理的方式。即只要有一个账号和密码,即可在全公司多个机房系统内通行无阻(系统登录、SVN、VPN等),有关这部分内容的讲解,在老男孩教学的高级课程中会有涉及。在此大家了解下即可。 普通用户的环境变量问题:在早期的CentOS5系统中,普通用户执行系统管理的相关命令时会遭遇到环境变量问题,导致找不到执行的命令(CentOS6以后的系统已经不存在这个问题了)。 sudo授权对于bash内置命令的处理是一个难题,因为内置命令没有实体文件和路径,不过一般也有解决方法,例如可以使用sudo ls替代sudo cd,有的网友会在使用sudo bash后再使用内置命令,这是很危险的,不推荐。 ![Image 1][] [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进行语法检查,这样实在太麻烦! 转载于:https://www.cnblogs.com/fadewalk/p/10858842.html [Image 1]:
还没有评论,来说两句吧...