sudo是Unix/Linux平台上的一个非常有用的工具,它允许系统
管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许用户才能完成的任务
大家知道ubuntu吧,他就封闭了root用户,都是使用的sudo
sudo能够限制指定用户在指定主机上运行某些命令。
sudo可以提供日志,忠实地记录每个用户使用sudo做了些什么,并且能将日志传到中心主机或者日志服务器。
sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。它默认的存放位置是/etc/sudoers。
sudo使用时间戳文件来完成类似“检票”的系统。当用户执行sudo并且输入密码后,用户获得了一张默认存活期为5分钟的“入场券”(默认值可以在编译的时候改变)。超时以后,用户必须重新输入密码。
sudo可以提供日志,忠实地记录每个用户使用sudo做了些什么,并且能将日志传到中心主机或者日志服务器。
sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。它默认的存放位置是/etc/sudoers。
sudo使用时间戳文件来完成类似“检票”的系统。当用户执行sudo并且输入密码后,用户获得了一张默认存活期为5分钟的“入场券”(默认值可以在编译的时候改变)。超时以后,用户必须重新输入密码。
编辑/etc/sudoers文件,只有超级用户才可以修改它。
sudoers文件就是sudo的配置文件了,但是我们不建议用户直接vim这个文件,建议使用visudo这个命令来编辑这个文件:
#visudo
之所以使用visudo有两个原因,
一是它能够防止两个用户同时修改它;
二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。
sudo的常用参数
sudo -l :列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。
sudo -u 用户名 命令:以指定用户的身份执行命令。 后面的用户是除root以外的,可以是用户名,也可以是#uid。
sudo -k:清除“入场卷”上的时间,下次再使用sudo时要再输入密码。
sudo -b 命令:在后台执行指定的命令。
sudo -p 提示语:可以更改询问密码的提示语,其中%u会代换为使用者帐号名称,%h会显示主机名称。非常人性化的设计。
sudo -e 文件名:不是执行命令,而是修改文件,相当于命令sudoedit。
sudo -u 用户名 命令:以指定用户的身份执行命令。 后面的用户是除root以外的,可以是用户名,也可以是#uid。
sudo -k:清除“入场卷”上的时间,下次再使用sudo时要再输入密码。
sudo -b 命令:在后台执行指定的命令。
sudo -p 提示语:可以更改询问密码的提示语,其中%u会代换为使用者帐号名称,%h会显示主机名称。非常人性化的设计。
sudo -e 文件名:不是执行命令,而是修改文件,相当于命令sudoedit。
现在我们来试试,请大家使用visudo这个命令
然后使用/root查找
查找到这行
root ALL=(ALL) ALL
这个文件最重要的也就这么一行
我给大家解释下:
第一个root 代表用户名
第一个ALL代表所有主机
(ALL)代表所有用户
后面那个ALL代表所有命令
第一个ALL代表所有主机
(ALL)代表所有用户
后面那个ALL代表所有命令
这句话的意思就是:root用户可以在任何机器上运行所有用户的所有命令
第一个主机你就理解成这个主机吧,他主要是对一个域来定义的
用户名 主机名=命令
命令须绝对路径,以“,”分隔,以“,”结尾
如果我要让michael这个用户可以执行所有用户的shutdown和useradd命令就这样写
michael ALL=(ALL) shutdown,useradd
然后保存退出,如果没有提示的话就证明成功了
visudo默认的是在vi里打开配置文件,用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理,就像:
>>> sudoers file: syntax error, line 71 <<<
此时我们有三种选择:
键入“e”是重新编辑,键入“x”是不保存退出,键入“Q”是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。
>>> sudoers file: syntax error, line 71 <<<
此时我们有三种选择:
键入“e”是重新编辑,键入“x”是不保存退出,键入“Q”是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。
我故意说错了这个命令,那两个命令michael用户是没有环境变量的,也就是michael没那两个命令,所以会报错,就像这样看下图:
比如把命令改成
system-confg-users命令的可执行文件
先使用
which system-config-users找到他的可执行文件
/usr/bin/system-config-users
需要注意的是,当我们为用户定义可以运行的命令时,必须使用完整的命令路径。这样做是完全出于安全的考虑,如果我们给出的命令只是简单的useradd而非/usr/sbin/useradd,那么用户有可能创建一个他自己的脚本,也叫做useradd,然后放在它的本地路径中,如此一来他就能够通过这个名为useradd的本地脚本,作为root来执行任何他想要的命令了。这是相当危险的!
我们来查找下:
which shutdown和
which useradd
写
/sbin/shutdown,/usr/sbin/useradd这个进去就OK了,多个命令使用"
,"分隔
现在保存退出就没有报错哈~
你可以切换到michael这个用户,使用
#sudo useradd xxxx
然后输入michael用户的密码,命令就可以执行成功
普通用户的PATH没有加/usr/sbin,自己加上
export PATH=$PATH:/usr/sbin
,然后我们再试试哈~
ok,可以了哈~
大型的主机就使用这种方法把权限分配给不同的管理员
#########################################################################