su和su -
聯(lián)系:都是切換到root
區(qū)別:前者只是切換了root身份,但Shell環(huán)境仍然是普通用戶的Shell;而后者連用戶和Shell環(huán)境一起切換成root身份了。只有切換了Shell環(huán)境才不會(huì)出現(xiàn)PATH環(huán)境變量錯(cuò)誤。su切換成root用戶以后,pwd一下,發(fā)現(xiàn)工作目錄仍然是普通用戶的工作目錄;而用su -命令切換以后,工作目錄變成root的工作目錄了。用echo $PATH命令看一下su和su -以后的環(huán)境變量有何不同。以此類推,要從當(dāng)前用戶切換到其它用戶也一樣,應(yīng)該使用su -命令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [root@centosTest wenchao] # pwd /home/wenchao [root@centosTest wenchao] # su - [root@centosTest ~] # su wenchao [wenchao@centosTest root]$ pwd /root [wenchao@centosTest root]$ exit exit [root@centosTest ~] # pwd /root [root@centosTest ~] # su - wenchao [wenchao@centosTest ~]$ pwd /home/wenchao [wenchao@centosTest ~]$ |
查看環(huán)境變量:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | [wenchao@centosTest ~]$ env | egrep "USER|MAIL|LOGNAME|PWD" USER=wenchao MAIL= /var/spool/mail/wenchao PWD= /home/wenchao LOGNAME=wenchao [wenchao@centosTest ~]$ su Password: [root@centosTest wenchao] # env|egrep "USER|MAIL|LOGNAME|PWD" USER=wenchao MAIL= /var/spool/mail/wenchao PWD= /home/wenchao LOGNAME=wenchao [root@centosTest wenchao] # [root@centosTest wenchao] # exit exit [wenchao@centosTest ~]$ su - Password: [root@centosTest ~] # env|egrep "USER|MAIL|LOGNAME|PWD" USER=root MAIL= /var/spool/mail/root PWD= /root LOGNAME=root [root@centosTest ~] # |
su的優(yōu)缺點(diǎn):
su 的確為管理帶來方便,通過切換到root下,能完成所有系統(tǒng)管理工具,只要把root的密碼交給任何一個(gè)普通用戶,他都能切換到root來完成所有的系統(tǒng)管理工作;但通過su切換到root后,也有不安全因素;比如系統(tǒng)有10個(gè)用戶,而且都參與管理。如果這10個(gè)用戶都涉及到超級(jí)權(quán)限的運(yùn)用,做為管理員如果想讓其它用戶通過su來切換到超級(jí)權(quán)限的root,必須把root權(quán)限密碼都告訴這10個(gè)用戶;如果這10個(gè)用戶都有root權(quán)限,通過root權(quán)限可以做任何事,這在一定程度上就對(duì)系統(tǒng)的安全造成了威協(xié);想想Windows吧,簡(jiǎn)直就是惡夢(mèng);“沒有不安全的系統(tǒng),只有不安全的人”,我們絕對(duì)不能保證這 10個(gè)用戶都能按正常操作流程來管理系統(tǒng),其中任何一人對(duì)系統(tǒng)操作的重大失誤,都可能導(dǎo)致系統(tǒng)崩潰或數(shù)據(jù)損失;所以su 工具在多人參與的系統(tǒng)管理中,并不是最好的選擇,su只適用于一兩個(gè)人參與管理的系統(tǒng),畢竟su并不能讓普通用戶受限的使用;超級(jí)用戶root密碼應(yīng)該掌握在少數(shù)用戶手中,這絕對(duì)是真理!所以集權(quán)而治的存在還是有一定道理的;
此時(shí)sudo誕生了
sudo的優(yōu)點(diǎn):
由于su 對(duì)切換到超級(jí)權(quán)限用戶root后,權(quán)限的無(wú)限制性,所以su并不能擔(dān)任多個(gè)管理員所管理的系統(tǒng)。如果用su 來切換到超級(jí)用戶來管理系統(tǒng),也不能明確哪些工作是由哪個(gè)管理員進(jìn)行的操作。特別是對(duì)于服務(wù)器的管理有多人參與管理時(shí),最好是針對(duì)每個(gè)管理員的技術(shù)特長(zhǎng)和管理范圍,并且有針對(duì)性的下放給權(quán)限,并且約定其使用哪些工具來完成與其相關(guān)的工作,這時(shí)我們就有必要用到 sudo。
通過sudo,我們能把某些超級(jí)權(quán)限有針對(duì)性的下放,并且不需要普通用戶知道root密碼,所以sudo 相對(duì)于權(quán)限無(wú)限制性的su來說,還是比較安全的,所以sudo 也能被稱為受限制的su ;另外sudo 是需要授權(quán)許可的,所以也被稱為授權(quán)許可的su;
sudo 執(zhí)行命令的流程是當(dāng)前用戶切換到root(或其它指定切換到的用戶),然后以root(或其它指定的切換到的用戶)身份執(zhí)行命令,執(zhí)行完成后,直接退回到當(dāng)前用戶;而這些的前提是要通過sudo的配置文件/etc/sudoers來進(jìn)行授權(quán);
它的特性主要有這樣幾點(diǎn):
§ sudo能夠限制用戶只在某臺(tái)主機(jī)上運(yùn)行某些命令。
§ sudo提供了豐富的日志,詳細(xì)地記錄了每個(gè)用戶干了什么。它能夠?qū)⑷罩緜鞯街行闹鳈C(jī)或者日志服務(wù)器。
§ sudo使用時(shí)間戳文件來執(zhí)行類似的“檢票”系統(tǒng)。當(dāng)用戶調(diào)用sudo并且輸入它的密碼時(shí),用戶獲得了一張存活期為5分鐘的票(這個(gè)值可以在編譯的時(shí)候改變)。
§ sudo的配置文件是sudoers文件,它允許系統(tǒng)管理員集中的管理用戶的使用權(quán)限和使用的主機(jī)。它所存放的位置默認(rèn)是在/etc/sudoers,屬性必須為0411。
sudo的配置文件/etc/sudoer配置說明..
sudo的配置詳見《sudo配置文件詳解》http://fuwenchao.blog.51cto.com/6008712/1340722
范例:我的機(jī)器的文件配置(略)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | root ALL=(ALL) ALL wenchao ALL=(ALL) ALL ## Allows members of the 'sys' group to run networking, software, ## service management apps and more. # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS ## Allows people in group wheel to run all commands # %wheel ALL=(ALL) ALL ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL ## Allows members of the users group to mount and unmount the ## cdrom as root # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom ## Allows members of the users group to shutdown this system # %users localhost=/sbin/shutdown -h now |
實(shí)例1:
上面可以看到wenchao用戶也是具有root的所有權(quán)限的
下面是我的配置步驟
visudo
在root后添加 wenchao ALL=(ALL) ALL
wenchao用戶登陸之后,執(zhí)行 sudo su -,然后輸入wenchao的登錄密碼就可以了
1 2 3 | [wenchao@centosTest ~]$ sudo su - [ sudo ] password for wenchao: [root@centosTest ~] # |
實(shí)例2:
讓普通用戶support只能在某幾臺(tái)服務(wù)器上,執(zhí)行root能執(zhí)行的某些命令
首先需要配置一些Alias,這樣在下面配置權(quán)限時(shí),會(huì)方便一些,不用寫大段大段的配置。Alias主要分成4種
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
1) 配置Host_Alias:就是主機(jī)的列表
Host_Alias HOST_FLAG = hostname1, hostname2, hostname3
2) 配置Cmnd_Alias:就是允許執(zhí)行的命令的列表
Cmnd_Alias COMMAND_FLAG = command1, command2, command3
3) 配置User_Alias:就是具有sudo權(quán)限的用戶的列表
User_Alias USER_FLAG = user1, user2, user3
4) 配置Runas_Alias:就是用戶以什么身份執(zhí)行(例如root,或者oracle)的列表
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3
5) 配置權(quán)限
配置權(quán)限的格式如下:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密碼驗(yàn)證的話,則按照這樣的格式來配置
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG
配置示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ############################################################################ # sudoers file. # # This file MUST be edited with the 'visudo' command as root. # # See the sudoers man page for the details on how to write a sudoers file. # # Host alias specification Host_Alias EPG = 192.168.1.1, 192.168.1.2 # User alias specification # Cmnd alias specification Cmnd_Alias SQUID = /opt/vtbin/squid_refresh , /sbin/service , /bin/rm # Defaults specification # User privilege specification root ALL=(ALL) ALL support EPG=(ALL) NOPASSWD: SQUID # Uncomment to allow people in group wheel to run all commands # %wheel ALL=(ALL) ALL # Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL # Samples # %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom # %users localhost=/sbin/shutdown -h now ############################################################### |
實(shí)例3:
普通用戶想看只有root權(quán)限才可以看到的文件
下面是我的操作步驟
首先:在普通用戶下看/etc/sudoers
1 2 3 | [wenchao2@centosTest ~]$ more /etc/sudoers /etc/sudoers : Permission denied [wenchao2@centosTest ~]$ |
切換到root下對(duì)wenchao2進(jìn)行授權(quán)
1 2 3 4 5 6 7 | [root@centosTest ~]# visudo ## The COMMANDS section may have other options added to it. ## ## Allow root to run any commands anywhere root ALL=(ALL) ALL wenchao ALL=(ALL) ALL wenchao2 ALL=/bin/more #增加的 |
切換到wenchao2
1 | [root@centosTest ~] # su - wenchao2 |
看看wenchao2能執(zhí)行哪些命令
1 2 3 4 5 6 7 8 9 | [wenchao2@centosTest ~]$ sudo -l [ sudo ] password for wenchao2: Matching Defaults entries for wenchao2 on this host: requiretty, !visiblepw, always_set_home, env_reset, env_keep= "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS" , env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE ", env_keep+=" LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES ", env_keep+=" LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+= "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY" , secure_path= /sbin \: /bin \: /usr/sbin \: /usr/bin User wenchao2 may run the following commands on this host: (root) /bin/more [wenchao2@centosTest ~]$ |
檢查權(quán)限是否賦予成功
1 2 3 4 5 6 7 8 9 10 11 | [wenchao2@centosTest ~]$ more ^C [wenchao2@centosTest ~]$ more /etc/sudoers /etc/sudoers : Permission denied [wenchao2@centosTest ~]$ sudo more /etc/sudoers ## Sudoers allows particular users to run various commands as ## the root user, without needing the root password. ## ## Examples are provided at the bottom of the file for collections ## of related commands, which can then be delegated out to particular ## users or groups. ## |
對(duì)于wenchao用戶查看和讀取所有系統(tǒng)文件中,我只想把/etc/shadow 的內(nèi)容可以讓他查看;可以加入下面的一行;
wenchao ALL=/bin/more /etc/shadow
題外話:有的弟兄會(huì)說,我通過su 切換到root用戶就能看到所有想看的內(nèi)容了,哈哈,對(duì)啊。但咱們現(xiàn)在不是在講述sudo的用法嗎?如果主機(jī)上有多個(gè)用戶并且不知道root用戶的密碼,但又想查看某些他們看不到的文件,這時(shí)就需要管理員授權(quán)了;這就是sudo的好處;
實(shí)例4:
練習(xí)用戶組在/etc/sudoers中寫法;
如果用戶組出現(xiàn)在/etc/sudoers 中,前面要加%號(hào),比如%wenchao ,中間不能有空格;%wenchao ALL=/usr/sbin/*,/sbin/*
如果我們?cè)?/etc/sudoers 中加上如上一行,表示wenchao用戶組下的所有成員,在所有可能的出現(xiàn)的主機(jī)名下,都能切換到root用戶下運(yùn)行 /usr/sbin和/sbin目錄下的所有命令;
實(shí)例5:
練習(xí)取消某類程序的執(zhí)行:
取消程序某類程序的執(zhí)行,要在命令動(dòng)作前面加上!號(hào); 在本例中也出現(xiàn)了通配符的*的用法;
wenchao ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk
[wenchao@localhost ~]?$ sudo -l
Password: 注:在這里輸入wenchao用戶的密碼;
User beinan may run the following commands on this host:(root) /usr/sbin/*(root) /sbin/*(root) !/sbin/fdisk[wenchao@localhost ~]?$ sudo /sbin/fdisk -lSorry, user beinan is not allowed to execute '/sbin/fdisk -l' as root on localhost.
注:不能切換到root用戶下運(yùn)行fdisk 程序;
如果有sudo 的權(quán)限而沒有su的權(quán)限: sudo su;
本文出自 “從運(yùn)維開始” 博客,請(qǐng)務(wù)必保留此出處http://fuwenchao.blog.51cto.com/6008712/1340685
聯(lián)系客服