'Linux權限控制之su與sudo的差別與sudo的配置'

Linux Mac電腦 電腦 服務端開發 2019-08-21
"

su與sudo的差別

  • 在Linux系統中,當我們需要以普通用戶身份執行某條系統命令時,通常會顯示:Permission denied,這時需要通過su切換到root用戶,或者使用sudo命令來執行該命令,如下:
xyzdeMacBook-Pro:linux xyz$ su - root
Password:
su: Sorry
xyzMacBook-Pro:linux xyz$ sudo visudo
Password:
  • su:該命令需要輸入被切換到的用戶的密碼,如切換到root,則輸入root的密碼,然後切換到root用戶的身份(當需要切換到root用戶時,也可以直接執行su即可,可以不指定 - root)。所以這裡需要知道root的密碼(如果以root身份通過su - xx切換到xx用戶則不需要輸入密碼),但是把root的密碼告訴執行系統命令的所有人通常是不安全的,因為切換到root用戶後可以對系統的所有文件進行任何操作。所以就產生了sudo命令,以當前用戶的身份來執行系統命令,而不需要切換到root用戶。
  • sudo:首先當前用戶需要有執行sudo的權限,這個需要root用戶在/etc/sudoers文件裡面添加配置,具體配置方式後面再說。如果當前用戶擁有通過sudo命令來執行系統命令,則一般需要輸入當前用戶的密碼,如上所示,這個與通過su切換到root用戶是不同的。所以通過sudo命令,可以以普通用戶身份執行系統命令。
  • 如下:使用sudo命令執行su這個系統命令來切換到root目錄,切換後可以直接執行visudo,當退出後則不行,需要通過sudo來執行。
xyzdeMacBook-Pro:sbin xyz$ sudo su - root
xyzdeMacBook-Pro:~ root# visudo
xyzdeMacBook-Pro:~ root# exit
logout
xyzdeMacBook-Pro:sbin xyz$ visudo
visudo: /etc/sudoers: Permission denied
xyzdeMacBook-Pro:sbin xyz$ sudo visudo

sudo權限配置

  • 默認通過useradd命令,新添加的普通用戶是沒有sudo權限的,而需要使用root身份登錄或者有執行sudo命令權限的用戶,然後編輯/etc/sudoers文件來添加,可以通過visudo命令來打開這個文件並編輯,這樣除了不需要指定具體/etc/sudoers文件位置外,還有個好處是可以檢查修改是否存在語法錯誤:
xyzdeMacBook-Pro:linux xyz$ sudo visudo
# 打開之後,定位到以下內容:
# root and users in group wheel can run anything on any machine as any user
root\t\tALL = (ALL) ALL
%admin\t\tALL = (ALL) ALL
  • 然後拷貝:rootALL = (ALL) ALL,並修改root為你需要添加的普通用戶的名字,如下:這樣xyz這個用戶就可以執行所有的系統命令了,相當於root,其中三個ALL從左到右依次表示:xyz這個用戶,可以在任何地方host(第一個ALL)登陸;執行任何人(第二個ALL)的任何命令(第三個ALL)。
# root and users in group wheel can run anything on any machine as any user
root\t\tALL = (ALL) ALL
%admin\t\tALL = (ALL) ALL
xyz ALL = (ALL) ALL
  • 通常可以修改第三個ALL來限制當前用戶可以執行的命令,如下:
xyz ALL = (ALL) /sbin/reboot, /sbin/umount
  • 按照以上配置,xyz這個用戶每次在執行sudo時都需要輸入自己的密碼,也配置不需要輸入密碼,如下使用NOPASSWD來配置:
xyz ALL = (ALL) NOPASSWD:ALL
  • 注意到上面還有一個%admin配置,這個表示屬於admin這個組的用戶都可以執行sudo命令,所以通常在一個Mac電腦中,默認當前用戶不需要配置就可以執行sudo,因為當前用戶輸入admin組,具體可以通過groups命令來查看當前用戶所屬的組:
xyzdeMacBook-Pro:sbin xyz$ groups
staff access_bpf everyone localaccounts _appserverusr admin _appserveradm _lpadmin com.apple.sharepoint.group.1 _appstore _lpoperator _developer _analyticsusers com.apple.access_ftp com.apple.access_screensharing com.apple.access_ssh
"

相關推薦

推薦中...