su切換用戶
- 命令su
語法:su [-] username
加“-”的作用是,加上后切換,shell會(huì)初始化當(dāng)前用戶的各種變量(.bash_history .bash_profile .bash_logout .bashrc 等)坎炼;且切換后會(huì)直接進(jìn)入當(dāng)前用戶家目錄畸陡。不加則環(huán)境變量還會(huì)是當(dāng)前shell的變量吏颖,切換后還是當(dāng)前目錄歼冰。
root用戶切換普通用戶時(shí),不需要密碼剧腻。普通用戶su 不加username就是切換root用戶拘央,需要輸入root密碼。
我們可以在切換時(shí)恕酸,直接以某一普通用戶的身份去執(zhí)行一條命令堪滨,用在腳本中比較合適。
[root@t1 ~]# su - -c "touch /tmp/zyb.log" zyb
[zyb@t1 ~]$ ls -l /tmp/zyb.log
-rw-rw-r--. 1 zyb zyb 0 8月 16 21:05 /tmp/zyb.log
[zyb@t1 ~]$ su - bird -c "touch /tmp/bird.log"y
密碼:
[zyb@t1 ~]$ exit
登出
[root@t1 ~]# ls -l /tmp/bird.log
-rw-rw-r--. 1 bird bird 0 8月 16 21:26 /tmp/bird.log
#切換用戶名可以在“-” 后面也可以在最后
sudo詳解
為了保證root密碼的安全蕊温,同時(shí)準(zhǔn)許某些用戶執(zhí)行一些root才能執(zhí)行的命令袱箱,但是不需要知道root密碼遏乔,就是sudo命令的作用。
默認(rèn)情況下发笔,只有root才能sudo盟萨,因?yàn)閟udo的配置中有一行"root ALL=(ALL) ALL "。該配置分為三部分了讨,最左側(cè)是用戶名捻激,指定某個(gè)用戶可以擁有sudo執(zhí)行權(quán),第二部分ALL前计,是一個(gè)用戶名胞谭,即,指定的用戶可以切換到哪個(gè)用戶的身份男杈,ALL表示所有用戶丈屹。小括號(hào)里面指定主機(jī)名或者主機(jī)IP,ALL表示所有伶棒,最后一個(gè)ALL旺垒,用來指定可以使用的命令有哪些。如果是多個(gè)命令肤无,用英文逗號(hào)隔開先蒋,命令使用絕對路徑。使用命令"visudo"編輯sudo的配置文件/etc/sudoers宛渐。
- 舉例竞漾,配置sudo,使zyb用戶能夠以root用戶什么ls /root/下面的文件皇忿。
[root@t1 ~]# su - zyb
上一次登錄:三 8月 16 23:00:31 CST 2017pts/0 上
[zyb@t1 ~]$ ls /root/
ls: 無法打開目錄/root/: 權(quán)限不夠
[zyb@t1 ~]$ exit
登出
[root@t1 ~]# visudo
#添加 zyb ALL=(ALL) /usr/bin/ls
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zyb ALL=(ALL) /usr/bin/ls
[zyb@t1 ~]$ sudo ls /root
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 zyb:
anaconda-ks.cfg anaconda-ks.cfg.1.bak linux_note y.pub
[zyb@t1 ~]$ sudo ls /root
anaconda-ks.cfg anaconda-ks.cfg.1.bak linux_note y.pub
zyb用戶是不能查看/root下的文件畴蹭,需要以root身份執(zhí)行l(wèi)s坦仍。所以配置sudo:
zyb ALL=(ALL) /usr/bin/ls
準(zhǔn)許zyb使用sudo 以root身份執(zhí)行l(wèi)s鳍烁,zyb第一次執(zhí)行sudo會(huì)有提示,并且需要輸入密碼繁扎,注意是zyb用戶的登錄密碼幔荒。再次執(zhí)行sudo就沒有提示。
- 設(shè)定不需要輸入密碼執(zhí)行sudo
配置sudo梳玫,準(zhǔn)許bird用戶執(zhí)sudo且不需要密碼
[root@t1 ~]# visudo
#添加 bird ALL=(ALL) NOPASSWD: /usr/bin/ls
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zyb ALL=(ALL) /usr/bin/ls
bird ALL=(ALL) NOPASSWD: /usr/bin/ls
[bird@t1 ~]$ sudo ls /root
anaconda-ks.cfg anaconda-ks.cfg.1.bak linux_note y.pub
/etc/sudoers包含很多配置爹梁,可以使用命令man sudoers來獲取幫助,下面介紹案例提澎,來了解sudo的常用功能姚垃。
- 要求設(shè)置系統(tǒng)只允許普通用戶登錄,普通用戶登陸后盼忌,可以不輸入密碼就能sudo切換到root賬戶积糯。
User_Alias ALLUSERS = zyb, bird, user1, user2
#用戶別名ALLUSERS虛擬用戶包含了4個(gè)真實(shí)用戶 #
Cmnd_Alias SU = /bin/su
#命令別名 SU代表了/bin/su掂墓,可以代表多個(gè)用“, ”隔開
ALLUSERS ALL=(ALL) NOPASSWD: SU
#用戶ALLUSERS 可以免密碼sudo執(zhí)行SU命令#
命令別名看成,以及用戶別名都必須是大寫的君编。以上ALLUSERS,SU如果有小寫字母川慌,保存時(shí)就會(huì)報(bào)錯(cuò)吃嘿,并提醒錯(cuò)誤位置。使用visudo編輯sudo配置和自動(dòng)檢查語法梦重,如果直接vi /etc/sudoers兑燥,不會(huì)檢查語法, 所以使用visudo命令來編輯sudo配置琴拧。
- %groupname ALL=(ALL) ALL
為每一個(gè)需要sudo的用戶逐個(gè)添加太麻煩贪嫂,可以直接為某一組用戶開通sudo權(quán)限,組名前面加%艾蓝。
%groupname ALL=(ALL) ALL
groupname這組用戶都具有了sudo權(quán)限力崇,接下來只需要讓將用戶加入到這個(gè)group中就行了。
- sudo -l 查看當(dāng)前用戶可以sudo的命令
- 取消某類程序的執(zhí)行:
取消程序某類程序的執(zhí)行赢织,要在命令動(dòng)作前面加上!號(hào)亮靴; 在本例中也出現(xiàn)了通配符的*的用法;
beinan ALL=(ALL) /usr/sbin/*, /sbin/*, !/usr/sbin/fdisk
把這行規(guī)則加入到/etc/sudoers中,本規(guī)則表示beinan用戶在所有可能存在的主機(jī)名的主機(jī)上運(yùn)行/usr/sbin和/sbin下所有的程序于置,但fdisk 程序除外茧吊。
不允許遠(yuǎn)程用戶登錄root
此方法只適用于通過ssh遠(yuǎn)程登錄linux的時(shí)候,修改配置文件/etc/ssd/ssd_config八毯,在文件中查找"#PermitRootLogin yes" 這句話搓侄,將yes改為no。就表示不允許遠(yuǎn)程root用戶登錄话速。保存配置文件讶踪,重啟sshd服務(wù):service sshd restart