Linux环境下提升普通用户权限(sudo)

时间:2022-01-15 15:21:04

一. 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的目录内容

 

 

from:http://bbs.tech.ccidnet.com/read.php?tid=596898