我們知道,使用 su 命令可以讓普通用戶切換到 root 身份去執(zhí)行某些特權(quán)命令,但存在一些問(wèn)題,比如說(shuō):
五.安裝python3 packages( redisrequestsflask ),執(zhí)行以下四個(gè)命令(第一個(gè)切換目錄命令必須執(zhí)行)!恐荒軇h除【當(dāng)前數(shù)據(jù)庫(kù)】,所以要先切換當(dāng)前數(shù)據(jù)庫(kù),然后執(zhí)行這個(gè)命令,執(zhí)行刪除數(shù)據(jù)庫(kù)的命令后,我們?cè)儆妹睢緎how dbs。這個(gè)腳本在命令行執(zhí)行是ok的,但剛在crontab中發(fā)現(xiàn)是執(zhí)行不成功的,后來(lái)通過(guò)一系列驗(yàn)證,發(fā)現(xiàn)原來(lái)是路徑的問(wèn)題,crontab中當(dāng)然是要用絕對(duì)路徑的,所以,crontab中要執(zhí)行的腳本也必然要使用絕對(duì)路徑,原來(lái)我們的運(yùn)行腳本中有一個(gè)java類(lèi)使用的是相對(duì)路徑,所以導(dǎo)致腳本沒(méi)有執(zhí)行,但日志文件卻創(chuàng)建了,所以很快可以定位是腳本執(zhí)行沒(méi)有成功,把路徑修改成絕對(duì)路徑,發(fā)現(xiàn)執(zhí)行后,java類(lèi)把路徑當(dāng)作包名來(lái)識(shí)別,所以最后就只能在shell腳本前面加上目錄切換命令,如cd /root/...的,這樣腳本執(zhí)行就都可以識(shí)別到目錄了,而且不管在哪兒執(zhí)行,它都是絕對(duì)的路徑,可以找到并運(yùn)行成功。
相對(duì)于使用 su 命令還需要新切換用戶的密碼,sudo 命令的運(yùn)行只需要知道自己的密碼即可,甚至于,我們可以通過(guò)手動(dòng)修改 sudo 的配置文件,使其無(wú)需任何密碼即可運(yùn)行。
sudo 命令默認(rèn)只有 root 用戶可以運(yùn)行,該命令的基本格式為:
[root@localhost ~]# sudo [-b] [-u 新使用者賬號(hào)] 要執(zhí)行的命令
常用的選項(xiàng)與參數(shù):
【例 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
本例中,無(wú)法使用 su - sshd 的方式成功切換到 sshd 賬戶中,因?yàn)榇擞脩舻哪J(rèn) Shell 是 /sbin/nologin。這時(shí)就顯現(xiàn)出 sudo 的優(yōu)勢(shì),我們可以使用 sudo 以 sshd 的身份在 /tmp 目錄下創(chuàng)建 mysshd 文件,可以看到,新創(chuàng)建的 mysshd 文件的所有者確實(shí)是 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 ..