为什么使用sudo?
通常生产服务器会有多个用户或者部门需要登录和操作,如运维部门和开发部门。所以一般不会使用root的账号密码来操作,因为如果大家都知道root的密码非常不安全,万一哪天谁更改了root密码,就比较麻烦,但是呢,我们又必须给用户执行权限。那么我们必须用sodu来解决这一问题。
sudo: switch user do,
某个用户能够以另外一个用户的身份通过某主机执行某命令,但是执行命令前必须输入自己账户的密码
-k:kill,让此前输入的认证信息失效,并重新认证。默认情况下,当用户执行sudo 命令后,5分钟内不用再次输入自己的密码
-l:列出当前用户可以使用的所有sodu命令
例如:
[deploy@ZabbixServer ~]$ sudo -l User deploy may run the following commands on this host: (ALL) NOPASSWD: ALL, (ALL) !/usr/bin/passwd root
上面表示用户deploy除了 更改root密码外,其他命令都能操作。
sudo 命令使用方法:
sudo COMMAND:不用切换到某个用户,就可以用该用户来执行某个命令
例如:
sudo useradd aaa
sudo的配置文件/etc/sudoers
该文件权限为400
# ls -l /etc/sudoers -r--r----- 1 root root 4059 Aug 24 07:53 /etc/sudoers
visudo :不用加任何参数,专门用来编辑/etc/sudoers这个文件,只有root用户有权限
一个sudo条目的格式:
who which_host=(run as ) command
谁 从哪台主机远程连上来 以谁的身份 执行什么命令
上面的who也可以是组名,但是组名前需要加‘%’,例如%wheel
练习:
例如:允许deploy用户以root身份执行所有命令,怎么写?
deploy ALL=(ALL) ALL
如果希望deploy用户执行命令时不需要输入密码怎么写?
deploy ALL=(ALL) NOPASSWD: ALL
如果希望deploy用户能执行所有命令,但是不能更改root密码,不能切换到root用户,怎么写?
deploy ALL=(ALL) NOPASSWD: ALL,!/usr/bin/passwd root,!/bin/su
sudo在生产环境中的用法:
生产环境中每个用户都有自己的登录账号,例如:user1、user2等。我们允许wheel组的用户能执行所有命令,而deploy用户属于这个组。然后我们只需要赋予user1、user2 切换到deploy用户的权限即可。
过程如下: 创建deploy用户,并加入wheel组
#useradd deploy #usermod -a -G wheel deploy
编辑/etc/sudoers文件,赋予wheel组用户执行所有命令的权限
%wheel ALL=(ALL) NOPASSWD: ALL
最好是禁止wheel组用户切换到root用户、更改root密码、执行visudo命令的权限,所以可以这样设置
%wheel ALL=(ALL) NOPASSWD: ALL,!/usr/bin/passwd root,!/bin/su,!/usr/sbin/visudo
然后赋予用户user1切换到deploy用户的权限
在/etc/sudoers.d目录下,创建一个文件,文件名可以是用户名,在该文件中写入以下内容
# cat /etc/sudoers.d/user1 user1 ALL=NOPASSWD:/bin/su - deploy
设置该文件权限为440
转载于:https://blog.51cto.com/zengestudy/1842926