Sudo(Superuser Do)是Unix/Linux平台上的一个工具,允许系统管理员分配给普通用户一些合理的“权利”,使他们能够执行一些只有超级用户或其他特许用户才能完成的任务,运行像mount、halt、su等命令,或者编辑如/etc/mtab、/etc/samba/smb.conf等系统配置文件,这样不仅减少了root用户的登录次数和管理时间,也提高了系统安全性。
特点
最小权限原则:sudo设计者的宗旨是给用户尽可能少的权限但仍允许完成他们的工作。
限制性:sudo能够限制指定用户在指定主机上运行某些命令。
日志记录:sudo可以提供日志,忠实地记录每个用户使用sudo做了些什么,且能将日志传到中心主机或者日志服务器。
集中管理:sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机,它默认的存放位置是/etc/sudoers。
时间戳文件:sudo使用时间戳文件来完成类似“检票”的系统,当用户执行sudo并且输入密码后,用户获得了一张默认存活期为5分钟的“入场券”。
安装与配置
1. 安装sudo
在CentOS上,默认情况下并不包含sudo工具,您可以通过以下命令来安装sudo:
yum install sudo y
2. 添加sudo用户
sudo用户是Linux机器上的普通用户帐户,您可以通过以下命令添加一个新用户:
adduser mynewusername
3. 将新用户添加到wheel组(可选)
wheel组是一个用户组,只有属于wheel组的用户才可以用su登录为root,添加您的sudo用户到wheel组是完全可选的,但建议这样做:
usermod aG wheel mynewusername
4. 确保sudoers文件设置正确
确保这一点很重要,sudoers文件位于/etc/sudoers,正确设置为了允许sudo users有效使用sudo命令,为了达到这个目标,我们将会看到内容/etc/sudoers并在适用的地方进行编辑。
5. 允许不属于wheel也不是sudo组的用户执行sudo命令
可以允许不在用户组中的用户执行sudo只需将它们添加到命令中即可/etc/sudoers如下:
anotherusername ALL=(ALL) ALL
6. 重新启动SSHD服务器
为了应用你所做的更改/etc/sudoers,你需要重新启动SSHD服务器,如下所示:
CentOS 6:/etc/init.d/sshd restart
CentOS 7:systemctl restart sshd.service
7. 测试
重新启动SSH服务器后,请注销,然后重新登录sudo user,然后尝试执行一些测试命令,如下所示:
sudo uptime sudo whoami
任何以下命令将允许sudo user成为root。
sudo su sudo i sudo S
whoami命令将返回root当加上sudo,执行时将提示你输入用户密码sudo命令,除非你明确指示系统不提示sudo users为他们的密码,这不是推荐的做法。
常用选项与实例讲解
1. sudo条目语法
whohost=(runas) TAG:command
who:运行者用户名;host:主机;runas:以那个身份运行;TAG:标签;command:命令。
2. 别名(宏)
sudo还支持别名的定义,我们通过引用定义好的别名可以提供工作效率:
User_Alias:用户名;组名(%);其他User_Alias;其他Host_Alias;网络地址。
Host_Alias:主机名;IP地址;其他Host_Alias。
Runas_Alias:用户名;组名(%);其他Runas_Alias。
Cmnd_Alias:命令路径(全路径);目录;其他Cmnd_Alias。
3. 使用visudo编辑配置文件(/etc/sudoers)
虽然我们可以使用vim直接来编辑sudo的配置文件,但sudo提供了更加智能的编辑命令visudo,它能在编辑配置文件的同时帮我们检查语法错误,并在错误时提供快捷的返回功能。
4. 常用实例讲解
oracle用户可以在任何地点以任何的身份执行所有命令,等同于root:oracle ALL=(ALL) ALL
。
oracle2用户可以在任何地点以root的身份执行命令useradd(无需密码)和usermod(需要密码):oracle2 ALL=(root) NOPASSWD:/usr/sbin/useradd, PASSWD:/usr/sbin/userdel
。
oracle3用户只能在192.168.1.120主机远程登录并以root身份执行ifconfig eth0命令:Cmnd_Alias NETCMND = /sbin/ifconfig eth0oracle3 192.168.1.120 = (root) NOPASSWD:NETCMND
。
oracle4用户可以执行/usr/sbin下的所有命令除了/usr/sbin/userdel:oracle4 ALL=(ALL) /usr/sbin/,!/usr/sbin/userdel
。
oracle5用户可以cat/var/log/secure:oracle5 ALL=NOPASSWD: /bin/cat /var/log/secure
。
FAQs
1、问题1:如何查看当前用户可以使用的所有sudo命令?
答案:您可以使用以下命令查看当前用户可以使用的所有sudo命令:sudo l
。
2、问题2:如何在CentOS上禁止直接root访问?
答案:首先打开/etc/ssh/sshd_config使用你喜欢的文本编辑器,并找到包含以下字符串的行,如果这行前面有#字符,则删除#字符,然后将该行更改为以下内容:PermitRootLogin no
,重新启动你的SSHD服务器。