我们知道,使用 su 命令可以让普通用户切换到 root 身份去执行某些特权命令,但存在一些问题,比如说:
五.安装python3 packages( redisrequestsflask ),执行以下四个命令(第一个切换目录命令必须执行)。】只能删除【当前数据库】,所以要先切换当前数据库,然后执行这个命令,执行删除数据库的命令后,我们再用命令【show dbs。这个脚本在命令行执行是ok的,但刚在crontab中发现是执行不成功的,后来通过一系列验证,发现原来是路径的问题,crontab中当然是要用绝对路径的,所以,crontab中要执行的脚本也必然要使用绝对路径,原来我们的运行脚本中有一个java类使用的是相对路径,所以导致脚本没有执行,但日志文件却创建了,所以很快可以定位是脚本执行没有成功,把路径修改成绝对路径,发现执行后,java类把路径当作包名来识别,所以最后就只能在shell脚本前面加上目录切换命令,如cd /root/...的,这样脚本执行就都可以识别到目录了,而且不管在哪儿执行,它都是绝对的路径,可以找到并运行成功。
相对于使用 su 命令还需要新切换用户的密码,sudo 命令的运行只需要知道自己的密码即可,甚至于,我们可以通过手动修改 sudo 的配置文件,使其无需任何密码即可运行。
sudo 命令默认只有 root 用户可以运行,该命令的基本格式为:
[root@localhost ~]# sudo [-b] [-u 新使用者账号] 要执行的命令
常用的选项与参数:
【例 1】
[root@localhost ~]# grep sshd /etc/passwd
sshd:x:74:74:privilege-separated SSH:/var/empty/sshd:/sbin.nologin
[root@localhost ~]# sudo -u sshd touch /tmp/mysshd
[root@localhost ~]# ll /tmp/mysshd
-rw-r--r-- 1 sshd sshd 0 Feb 28 17:42 /tmp/mysshd
本例中,无法使用 su - sshd 的方式成功切换到 sshd 账户中,因为此用户的默认 Shell 是 /sbin/nologin。这时就显现出 sudo 的优势,我们可以使用 sudo 以 sshd 的身份在 /tmp 目录下创建 mysshd 文件,可以看到,新创建的 mysshd 文件的所有者确实是 sshd。
【例 2】
[root@localhost ~]# sudo -u vbird1 sh -c "mkdir ~vbird1/www; cd ~vbird1/www; \
#default proxy to use (the number is the index of the proxy configuration in this config file)。[root@sample ~]# echo "my site is www.centospub.com " >> /var/www/html/index.html 。[root@kvm ~]# echo "10.0.0.137" > /var/www/html/index.html。
[root@localhost ~]# ll -a ~vbird1/www
drwxr-xr-x 2 vbird1 vbird1 4096 Feb 28 17:51 .
drwx------ 5 vbird1 vbird1 4096 Feb 28 17:51 ..