一. Linux环境下提升普通用户权限(sudo)
用sudo让普通用户获得超级用户的一部分权利,能够做超级用户才能做的事情,还能够对普通用户身份做一些限制,
指定某一个或某几个人来做,并且普通用户不需要知道超级用户的密码,就能够完成超级用户才能完成的任务。
环境:管理员root和普通用户redhat
1. 授权之前测试:
# /etc/init.d/httpd restart root执行
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
$ /etc/init.d/httpd restart redhat执行
rm: cannot remove `/var/run/httpd.pid': Permission denied [FAILED]
Starting httpd:
touch: cannot touch `/var/lock/subsys/httpd': Permission denied
可以看出redhat用户执行httpd脚本重启的时候,被拒绝。
2. 超级用户为普通用户授权,让redhat可以做这件事情。
让redhat这个用户使用sudo调用这个脚本并且执行。
$ sudo /etc/init.d/httpd resart 为授权之前用sudo
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these two things:
#1) Respect the privacy of others.
#2) Think before you type.
Password:
redhat is not in the sudoers file. This incident will be reported.
可以看出,由于redhat用户还没有被超级用户授权,所以会出现这样的错误,就算输如root用户密码也是不行的,因为在sudoers文件里没有给予权利。
3. root用户修改 /etc/目录下的sudoers文件。
root用户可以手工修改/etc目录下的sudoers,这个文件权限的默认值是4 4 0,其他用户无权访问。
(两种方法修改,第一种:chmod 660 /etc/shdoers 改成可以写的权限,然后用vi 编辑即可,改完之后在把权限改回去。第二种:用visudo, visudo会把这个文件保存到一个临时文件里面去,它不是真正的配置文件,改完后这个内容会保存在内存里,退出visudo后才会写进真正的 sudoers文件。)
# ls -l /etc/sudoers
-r--r----- 1 root root 580 Oct 4 2004 /etc/sudoers
# visudo
在 root ALL=(ALL) ALL 下面添加一行:redhat ALL=(ALL) /etc/init.d/httpd 表示:redhat用户可以在任何主机上变成任何人去行/etc/init.d 目录下的httpd 脚本。
例如:
root ALL=(ALL) ALL
redhat ALL=(ALL) /etc/init.d/httpd
# more /etc/sudoers 确认一下有没有错误
4. 测试:redhat 执行/etc/init.d/httpd 脚本,让它重启,
$ sudo /etc/init.d/httpd restart
Password: 此处输入的是redhat自己的密码
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
可以看出经过root授权后,Redhat成功执行了该脚本。
按照这个规律,可以定义很多常见的一些命令给普通用户执行。
(2). 让redhat用户不用输入密码就能直接执行service。
# visudo
redhat ALL=(ALL) NOPASSWD:/sbin/service 表示用户不需要输密码
# more /etc/sudoers
测试:
$ sudo /sbin/service iptables restart 重启防火墙,不需要输入密码。
(3). 让redhat用户在执行命令是必须输入密码。
# visudo
redhat ALL=(ALL) PASSWD:/sbin/service 表示用户需要输如自己的密码
测试:
$ sudo /sbin/service httpd restart
在输入密码5分钟之内,可以任意使用sudo,不用输密码,5分钟之后,在执行就需要输入密码。
用到的命令:
$ sudo -l 查看本人在这台主机上拥有那些权利
# man sudo 更多用法查看帮助
详解sudoers文件:
root ALL=(ALL) ALL 默认为root用户定义好的
可分成4个字段来理解:
第一个字段指定的是用户,可以是用户名,也可以是别名。
第二个字段指定的是用户所在的主机,可以是ip,也可以是主机名,限制的一般都是本机,也就是限制使用这个文件的主机,如果指定为:192.168.1.88= 表示这个文件只有在这台主机上生效,如果拷贝到别的机子上是不起作用的,一般都指定为:ALL 表示所有的主机,不管文件拷到那里都可以用。
第三个字段括号里指定的也是用户,比如说 (tom,redhat) 可以是一个或多个,ALL 表示所有用户。
第四个字段指定的是执行的命令。
例如:
root ALL=(ALL) ALL 表示:root用户可以在这台主机上以所有人的身份去执行所有命令。
redhat ALL=(lake) /bin/ls 表示:redhat用户可以在这台主机上变成lake身份去执行ls。
[redhat@localhost ~]$ sudo -u lake ls ~lake redhat以lake的身份查看lake的目录内容
转自:http://blog.csdn.net/wwj_748/article/details/8708580