HCRM博客

如何在CentOS系统中正确使用sudo命令?

Sudo(Superuser Do)是Unix/Linux平台上的一个工具,允许系统管理员分配给普通用户一些合理的“权利”,使他们能够执行一些只有超级用户或其他特许用户才能完成的任务,运行像mount、halt、su等命令,或者编辑如/etc/mtab、/etc/samba/smb.conf等系统配置文件,这样不仅减少了root用户的登录次数和管理时间,也提高了系统安全性。

特点

最小权限原则:sudo设计者的宗旨是给用户尽可能少的权限但仍允许完成他们的工作。

如何在CentOS系统中正确使用sudo命令?-图1
(图片来源网络,侵权删除)

限制性:sudo能够限制指定用户在指定主机上运行某些命令。

日志记录:sudo可以提供日志,忠实地记录每个用户使用sudo做了些什么,且能将日志传到中心主机或者日志服务器。

集中管理:sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机,它默认的存放位置是/etc/sudoers。

时间戳文件:sudo使用时间戳文件来完成类似“检票”的系统,当用户执行sudo并且输入密码后,用户获得了一张默认存活期为5分钟的“入场券”。

安装与配置

1. 安装sudo

在CentOS上,默认情况下并不包含sudo工具,您可以通过以下命令来安装sudo:

如何在CentOS系统中正确使用sudo命令?-图2
(图片来源网络,侵权删除)
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用户可以在任何地点以任何的身份执行所有命令,等同于rootoracle 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/userdeloracle4 ALL=(ALL) /usr/sbin/,!/usr/sbin/userdel

oracle5用户可以cat/var/log/secureoracle5 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服务器。

分享:
扫描分享到社交APP
上一篇
下一篇