visudo

/etc/sudoers sudo 簡介

sudo 的執行則僅需要自己的密碼, 甚至可以設定不需要密碼即可執行 sudo。sudo 可以讓你以其他用 戶的身份執行指令 (通常是使用 root 的身份來執行指令),僅有規範到 /etc/sudoers 內的用戶才能夠執 行 sudo 這個指令。 Mac 系統預設僅有管理者權限的人可以執行 sudo。

修改 /etc/sudoers 的方法

使用 visudo 去修改 /etc/sudoers ,讓該帳號能夠使用全部或部分的 root 指令功能。因為 /etc/sudoers 是有設定語法的,如果設定錯誤那會造成無法使用 sudo 指令的不良後果。因此使用 visudo 去修改, 在結束離開修改畫面時,系統會去檢驗 /etc/sudoers 的語法,避免錯誤發生。

root@study ~]# visudo
....(前面省略)....
root ALL=(ALL) ALL
i9200800 ALL=(ALL) ALL <==這一行是你要新增的! ....(底下省略)....

上面這一行的四個元件意義是:

  • 『使用者帳號』:系統的哪個帳號可以使用 sudo 這個指令的意思。

  • 『登入者的來源主機名稱』:當這個帳號由哪部主機連線到本 Linux 主機,意思是這個帳號可能

    是由哪一部網路主機連線過來的, 這個設定值可以指定用戶端電腦(信任的來源的意思)。預設值

    root 可來自任何一部網路主機。

  • 『(可切換的身份)』:這個帳號可以切換成什麼身份來下達後續的指令,預設 root 可以切換成任

    何人。

  • 『可下達的指令』:可用該身份下達什麼指令?這個指令請務必使用絕對路徑撰寫。 預設 root 可

    以切換任何身份且進行任何指令之意。

進階設定方式

無需密碼,就可以執行 sudo 的方法

i9200800  ALL=(ALL)  NOPASSWD: ALL

限制的可執行的指令

i9200800 ALL=(ALL) /usr/bin/xcode-select

使用正規表示式限制指令的部份參數不可使用 以下設定為可以執行『 passwd 任意字元』,但是『 passwd 』與『 passwd root 』這兩個指令例外

i9200800 ALL=(ALL) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwd root

App 開發情境的應用

App 開發人員,為了因應每年升級的預做準備,需要安裝多個 Xcode 的版本進行測試。

Xcode 版本的切換,需要有管理者權限才可執行,透過設定 sudo 指令的權限,可讓開發人員不需具備 管理者權限也可以切換不同的 Xcode 版本。

使用「終端機」,輸入 sudo xcode-select -s /Applications/Xcode11.1.app 可切換不同的 Xcode 版本

因 sudo 命令的限制,也不需擔心開發人員擁有過多權限,當使用者輸入未被授權的指令,即出現以下 提示訊息:

i9200800de-iMac:~ $ sudo ls
Password:
Sorry, user i9200800 is not allowed to execute '/bin/ls' as root on i9200800de- iMac.local.

Last updated