为什么使用sudo?
通常生产服务器会有多个用户或者部门需要登录和操作,如运维部门和开发部门。所以一般不会使用root的账号密码来操作,因为如果大家都知道root的密码非常不安全,万一哪天谁更改了root密码,就比较麻烦,但是呢,我们又必须给用户执行权限。那么我们必须用sodu来解决这一问题。
sudo: switch user do,
某个用户能够以另外一个用户的身份通过某主机执行某命令,但是执行命令前必须输入自己账户的密码
-k:kill,让此前输入的认证信息失效,并重新认证。默认情况下,当用户执行sudo 命令后,5分钟内不用再次输入自己的密码
-l:列出当前用户可以使用的所有sodu命令
例如:
1
2
3
|
[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:不用切换到某个用户,就可以用该用户来执行某个命令
例如:
1
|
sudo
useradd
aaa
|
sudo的配置文件/etc/sudoers
该文件权限为400
1
2
|
# 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身份执行所有命令,怎么写?
1
|
deploy ALL=(ALL) ALL
|
如果希望deploy用户执行命令时不需要输入密码怎么写?
1
|
deploy ALL=(ALL) NOPASSWD: ALL
|
如果希望deploy用户能执行所有命令,但是不能更改root密码,不能切换到root用户,怎么写?
1
|
deploy ALL=(ALL) NOPASSWD: ALL,!
/usr/bin/passwd
root,!
/bin/su
|
sudo在生产环境中的用法:
生产环境中每个用户都有自己的登录账号,例如:user1、user2等。我们允许wheel组的用户能执行所有命令,而deploy用户属于这个组。然后我们只需要赋予user1、user2 切换到deploy用户的权限即可。
过程如下: 创建deploy用户,并加入wheel组
1
2
|
#useradd deploy
#usermod -a -G wheel deploy
|
编辑/etc/sudoers文件,赋予wheel组用户执行所有命令的权限
1
|
%wheel ALL=(ALL) NOPASSWD: ALL
|
最好是禁止wheel组用户切换到root用户、更改root密码、执行visudo命令的权限,所以可以这样设置
1
|
%wheel ALL=(ALL) NOPASSWD: ALL,!
/usr/bin/passwd
root,!
/bin/su
,!
/usr/sbin/visudo
|
然后赋予用户user1切换到deploy用户的权限
在/etc/sudoers.d目录下,创建一个文件,文件名可以是用户名,在该文件中写入以下内容
1
2
|
# cat /etc/sudoers.d/user1
user1 ALL=NOPASSWD:
/bin/su
- deploy
|
设置该文件权限为440