sudo:以另一个用户的身份执行命令
简介通过sudo命令,可以让普通用户在执行指定命令或程序上,拥有超级管理员的权限。并有针对性将不同的命令授予指定的普通用户,同时普通用户不需要知道root的密码就可以得到授权,授权的方式可以通过visudo配置管理。
说明
通过sudo命令,可以让普通用户在执行指定命令或程序上,拥有超级管理员的权限。并有针对性将不同的命令授予指定的普通用户,同时普通用户不需要知道root的密码就可以得到授权,授权的方式可以通过visudo配置管理。
格式
sudo [option]
常用参数
- -V 显示版本编号
- -h 会显示版本编号及指令的使用方式说明
- -l 显示出自己(执行 sudo 的使用者)的权限
- -v 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码
- -k 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)
- -b 将要执行的指令放在背景执行
- -p prompt 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称
- -u username/#uid 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)
- -s 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell
- -H 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )
- command 要以系统管理者身份(或以 -u 更改为其他人)执行的指令
示例
1、没有通过visudo配置然后查看root家目录
[skip@localhost ~]$ ls /root/ #没有权限
ls: cannot open directory /root/: Permission denied
[skip@localhost ~]$ sudo ls /root/ #加了sudo命令,提示输入密码,但是最后也不行
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for skip: #这里输入密码
skip is not in the sudoers file. This incident will be reported. #提示该用户没有在sudoers文件里
2、通过visudo配置,在root对应的行下添加如下信息:保存
[root@localhost ~]# visudo
98 root ALL=(ALL) ALL
99 skip ALL=(ALL) ALL #添加改行信息,99不要是行号
[skip@localhost ~]$ ls /root/ #提示没权限
ls: cannot open directory /root/: Permission denied
[skip@localhost ~]$ sudo ls -l /root/ #使用sudo命令
[sudo] password for skip: #输入密码,列表正常显示
total 1180992
-rw-------. 1 root root 815 May 5 13:20 anaconda-ks.cfg
-rw-r--r--. 1 root root 119914627 Mar 29 10:47 go1.10.1.linux-amd64.tar.gz
drwxr-xr-x. 7 root root 4096 May 6 03:26 memcached-3.0.4
-rw-r--r--. 1 root root 78776 Nov 21 00:02 memcached-3.0.4.tgz
-rw-r--r--. 1 root root 99406523 Apr 13 14:27 mongodb-linux-x86_64-rhel70-3.6.4.tgz
-rw-r--r--. 1 root root 328563044 May 5 06:14 mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
-rw-r--r--. 1 root root 641798603 Apr 17 07:07 mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
drwxr-xr-x. 9 mysql mysql 4096 May 5 13:48 nginx-1.12.2
-rw-r--r--. 1 root root 981687 Oct 17 2017 nginx-1.12.2.tar.gz
-rw-r--r--. 1 nginx wheel 22710 Apr 25 07:28 package.xml
-rw-r--r--. 1 root root 160 May 13 05:41 pass.txt
drwxrwxr-x. 17 root root 4096 May 5 17:20 php-7.2.5
-rw-r--r--. 1 root root 18305092 May 5 09:01 php-7.2.5.tar.gz
drwxr-xr-x. 9 root root 4096 May 6 03:30 redis-4.0.2
-rw-r--r--. 1 root root 212617 Apr 25 07:37 redis-4.0.2.tgz
drwxr-xr-x. 3 root root 4096 May 7 22:45 test
总结
1、sudo命令提示输入密码,输入的当前用户的密码,不是root的密码;
2、输入密码成功后,当前用户会获得一张默认存活期为5分钟的“令牌”,使用/var/db/sudo可以查看该文件。如果超过该时间,用户就必须重新输入密码。
3、可以使用-k参数来清除sudo用户的时间戳,这样下次执行sudo命令将重新输入密码。但是如果在配置授权对应用户加了NOPASSWD选项,那么该用户使用sudo命令将永远不会提示输入密码。如:skip ALL=(ALL) NOPASSWD: ALL
4、sudo的配置文件/etc/sudoers,建议采用visudo编辑该文件。