su -
#su - oldboy //當執行這個命令的時候表示切換到oldboy用戶,而且從新讀取用戶環境相關配置文件,具體的來講就是執行下用戶家目錄下.bash_profile和.bashrc文件,這個咱們成爲全切換
su
#su oldboy //執行這個命令的時候系統不讀取以上兩個文件,因此咱們通常稱它爲半切換,這樣切換過去以後,oldboy用戶使用的依舊是此前用戶的環境配置信息
sudo
#sudo這個命令設計初的主要目的是爲了使某些用戶具備特定用戶的一些特殊的權限,舉例說明:好比A,B兩我的,A是技術部經理,具備公司服務器上的root權限,B技術還不夠成熟,只具備通常用戶權限,由於項目緣由,B須要具備添加用戶的權限,這個時候該怎麼辦呢?給B管理員權限?那安全性能獲得保證嗎!對,這時候sudo就派上用場了…
1)sudo這個命令的定義在/etc/sudoers文件裏面,這個文件內容的格式以下:
User MACHINE= COMMANDS
root ALL=(ALL) ALL
oldboy ALL=(ALL) /user/sbin/useradd
用戶 機器=(受權哪一個角色的權利) /user/sbin/useradd
%用戶組 機器=(受權哪一個角色的權利) /user/sbin/useraddlinux
2)咱們能夠用vim來打開/etc/sudoers這個文件,可是由於這個文件對系統來講至關重要,因此有一個專門的命令visudo來對這個文件進行編輯,當有一個管理員對這個文件進行編輯的時候,這個文件會被系統加上一個「鎖」,意思就是不容許多個管理員同時對其進行編輯,這也是爲了系統安全着想shell
3)舉例:好比咱們須要oldboy用戶能夠執行passwd命令,那麼咱們須要做以下配置:
1)#visudo //打開/etc/sudoers配置文件
2)在配置文件裏添加以下行
oldboy ALL=(root) /usr/sbin/useradd
3)#su - oldboy //切換到oldboy用戶
4)#sudo /usr/sbin/useradd jack //普通用戶oldboy添加用戶jack
固然sudoers文件不是這麼容易就能玩轉的,假設以下狀況,當咱們想把好多個命令都給oldboy用戶使用權限(同理當咱們想給不少個用戶一個命令的使用權限或者讓一個用戶在不一樣的主機上登陸時均可以擁有這麼命令的使用權限),那麼咱們改怎麼辦呢?一行一行的寫下去,那豈不是顯得咱們的linux太笨拙了……
這時候咱們能夠看一下sudoers的man文檔,咱們會發現這個真的很牛掰,牛掰到咱們能夠定義某個用戶只能使用某個命令的某一個選項……linux解決上述問題用到了別名
1)下面是對多個用戶的格式定義:
User_Alias NAME = gentoo, suse, ubuntu, %mygrp, USENAME //能夠加進去一個組,能夠加進去另外一個用戶別名,這裏若是是想把組加進去記得要在前面加「%」,不要問爲何,就是這樣定義的
2)下面是對多個主機的格式定義:
Host_Alias NAME = 主機名, IP, network/mask, NAME //這裏是說後面能夠是主機名、IP地址、網段、另一個別名
3)下面是對以哪一個用戶的身份運行(多個)的格式定義:
Runas_Alias NAME = 用戶, 組, #用戶ID, NAME //這裏是說後面能夠是用戶名,組名,用戶ID(前面必須加「#」),另一個別名
4)下面是對多個命令的格式定義:
Cmnd_Alias NAME = 命令, 目錄(目錄中的全部命令),NAME //這裏是說後面能夠跟命令,目錄下的命令集合,另一個別名ubuntu
當不加任何參數執行su命令時,表示要切換到root用戶,但這樣執行,會遇到一些問題。由於雖然是切換到root用戶了,但並無改變爲root用戶登陸環境,用戶默認的登陸環境,能夠在/etc/passwd 中查獲得,包括家目錄,shell類型等。比較規範的操做方法是」su -「。見下面的實例。vim
實例1:由普通用戶oldboy切換到root用戶安全
[oldboy@oldboy ~]$ whoami #→確認當前用戶爲oldboy
oldboy
[oldboy@oldboy ~]$ su #→不加用戶就表示切到root用戶。固然也可使用su root。
Password: #→這裏固然就是root用戶的密碼了。
[root@oldboy oldboy]# env
HOSTNAME=oldboy
USER=oldboy
MAIL=/var/spool/mail/oldboy
PWD=/home/oldboy
HOME=/root
LOGNAME=oldboy
...省略部分無關內容...
#→細心的讀者應該已經看到了,若是使用su而不加上「-」這個參數,那麼,切換前的用戶的相關信息還會存在,這會引發不少麻煩,甚至會出現意想不到的結果。所以,切換用戶時,最好是 「su - 用戶名」。這是生產場景中標準的切換用戶的操做方法。
[root@oldboy oldboy]# exit #→退出當前用戶,這個命令也能夠用ctrl+d快捷鍵命令替代。
[oldboy@oldboy ~]$ su - #→帶上「-」參數作切換,也可用su - root命令。這是生產場景中的標準操做方法。
Password:
[root@oldboy ~]# env|egrep "USER|MAIL|PWD|LOGNAME" #→切換後的環境變量信息結果。使用egrep過濾包含想查看的字符串的行。
USER=root
MAIL=/var/spool/mail/root
PWD=/root
LOGNAME=root
#→此次和上次就不一樣了,全部的環境變量信息都切換到了root下。所以,請你們在切換用戶時必定要加上「su - 用戶名」,這裏提醒下,不光是切到root呦,切換到其餘用戶也是同樣,呵呵。bash
su命令總結:
1)普通用戶切換到root用戶,可以使用su -或su - root。必須輸入root密碼才能完成切換。
2)root用戶切換到普通用戶,可以使用「su普通用戶名」的寫法。不須要輸入任何密碼就能完成切換。切換到普通用戶後,在執行一些命令如ifconfig時,可能會遭遇到環境變量PATH路徑問題而找不到某些系統命令(通常是/sbin,/usr/sbin等下面的命令),這時就須要將普通用戶的PATH,配置成root的PATH內容。
3)若是僅但願在某用戶下執行命令,而不直接切換到該用戶下操做,可使用 su - 用戶名 -c "命令"的方式。服務器