一,命令sudo
命令语法
sudo(选项)(参数)命令描述
sudo命令用来以其他身份来执行命令,预设的身份为root。
用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。命令选项
-b:在后台执行指令;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;命令示例
配置sudo必须通过编辑/etc/sudoers文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。
设置sudo方法
- 在命令行输入
#visudo //visudo默认的是在vi里打开sudo配置文件。
- 进入配置文件大概在90列左右可以看到下面的命令(小技巧:在vi编辑器里使用 set nu //查看行数)
90 ## Allow root to run any commands anywhere // 翻译: 允许root用户在任何地方运行所有的命令
91 root ALL=(ALL) ALL
92 user1 ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/cat //自己编写的
命令说明:
92列自己编写的,这条命令的作用是:让user用户拥有sudo特权。
命令从左到右,第一段user1为一个用户,指定让哪个用户有sudo特权;
第二段ALL=(ALL)比较难理解,左边的ALL指的是所有的主机,右边的ALL指的是获取哪个用户的身份,
第二段几乎都不用配置;
第三段设定可以使用sudo的命令有哪些,这里我选择的是ls,mv,cat命令,注意这里编辑的时候要写绝对路径。也可以写ALL表示可以使用全部命令。也可以在第三段的最前面加上 #NOPASSWD: ,这样在使用sudo的时候就不用输入密码了。
编辑完成之后,#wq保存退出。
当你在visudo中编辑错误的时候wq后会提醒你例如:
visudo: >>>/etc/sudoers: syntax error 在行 92 附近 <<
此时我们有三种选择:键入“e”是重新编辑,键入“x”是不保存退出,键入“Q”是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。
上面步骤正常的情况下,切换到user1的用户下,使用sudo命令# sudo /usr/bin/ls /root
此条命令的意思是 在user1的用户下用sudo权限ls查看/root目录,当然可以使用cat,mv命令。
二,限制root远程登录
注: 该方法只适用于通过ssh远程登录Linux的时候。
限制root远程登录的方法
/etc/ssh/sshd_config为sshd服务的配置文件,默认允许root账户通过ssh远程登录Linux。要想不允许root用户远程登录到Linux,具体方法为: 修改配置文件vi /etc/ssh/sshd_config,在文件中查找#PermitRootLogin yes
并修改为PermitRootLogin no
,即不允许root远程登录。保存配置文件后,需要重启sshd服务。
#systemctl restart sshd.service //重启sshd服务。
实战
禁止root用户远程登录,只允许普通用户登录。普通用户如果想要得到root用户的权限,如下详解
- 思路: 在普通用户下,想要得到root用户的权限,使用su命令时,没有root的密码是切换不到root用户下的。这时候可以把su放到sudo命令列表里,之后在普通用户下使用命令 #sudo su -root 就能得到root用户的权限了。
实现步骤:
- 在root用户下 ,编辑visudo为用户添加Alias
16 ## User Aliases
17 ## These aren't often necessary, as you can use regular groups
18 ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
19 ## rather than USERALIAS
20 # User_Alias ADMINS = jsmith, mikem
21 User_Alias AMINGS=user1 //手动添加的。为用户添加Alias
- 设定规则
90 ## Allow root to run any commands anywhere
91 root ALL=(ALL) ALL
92 user1 ALL=(ALL) /usr/bin/ls, /usr/bin/mv, /usr/bin/cat
93 AMINGS ALL=(ALL) NOPASSWD: /usr/bin/su //NOPASSWD代表执行/usr/bin/su的时候不需要输入密码。
保存退出
切换到user1用户下,用sudo登录到root用户下
[root@localhost ~]# su - user1
上一次登录:三 11月 1 17:03:48 CST 2017pts/0 上
[user1@localhost ~]$ sudo su - root
上一次登录:三 11月 1 18:26:00 CST 2017pts/0 上
[root@localhost ~]# whoami //查看当前用户
root