剛安裝的Linux都只有root用戶,但權限太大。對於一台機器,要安裝不同的應用服務,通常的做法是,針對不同的應用服務使用不同的用戶進行配置管理和服務啟停。
比如,web類服務,我會建立一個www用戶用來管理nginx、tomcate以及uwsgi這類應用。如何操作呢?
添加新用戶和用戶組
groupadd www 創建www用戶組
useradd www -g www 給www用戶組里添加www用戶
用戶授權
su 的用法:
su [OPTION選項參數] [用戶],參數說明:
- 或者 -l:登錄並改變到所切換的用戶環境;
-c: 切換到對應的用戶環境,執行一個命令,然后退出;
注意:
su 在不加任何參數,默認為切換到root用戶,但沒有轉到root用戶家目錄下,也就是說這時雖然是切換為root用戶了,但並沒有改變root登錄環境;
su - root 和su - 是一樣的功能,都是切換到root用戶,並且改變到root用戶的環境;
二、sudo 命令、配置
有的時候我們只需要切換到某個用戶,執行一個命令,然后就退出。上面我們知道可以使用su來切換用戶,但是需要知道用戶的密碼,特別是切換到root時需要知道root的密碼才可以,這樣做比較不安全。 這個時候我們可以使用sudo。
通過sudo,我們能把某些超級權限有針對性的下放,並且不需要普通用戶知道root密碼,所以sudo 相對於權限無限制性的su來說,還是比較安全的。sudo 執行命令的流程是當前用戶切換到root(或其它指定切換到的用戶),然后以root(或其它指定的切換到的用戶)身份執行命令,執行完成后直接退回到當前用戶;而這些的前提是要通過sudo的配置文件/etc/sudoers來進行授權。
注:sudo程序本身就是一個設置了SETUID位的二進制文件。它的所有者是root,所以每個用戶都可以像root那樣執行該程序,我們可以檢查一下它的權限:
$ls -l /usr/bin/sudo
---s--x--x 2 root root 106832 02-12 17:41 /usr/bin/sudo
1、sudo命令:
1)參數:
sudo -u username#uid User 以指定用戶的身份執行命令。后面的用戶是除root以外的,可以是用戶名,也可以是#uid。
sudo -k Kill 清除“入場卷”上的時間,下次再使用sudo時要再輸入密碼。
sudo -K Sure kill 與-k類似,但是它還要撕毀“入場卷”,也就是刪除時間戳文件。
sudo -b command 在后台執行指定的命令。
2)特點:
sudo能夠限制指定用戶在指定主機上運行某些命令。
sudo可以提供日志,忠實地記錄每個用戶使用sudo做了些什么,並且能將日志傳到中心主機或者日志服務器。
sudo為系統管理員提供配置文件,允許系統管理員集中地管理用戶的使用權限和使用的主機。它默認的存放位置是/etc/sudoers。
sudo使用時間戳文件來完成類似“檢票”的系統。當用戶執行sudo並且輸入密碼后,用戶獲得了一張默認存活期為5分鍾的“入場券”(默認值可以在編譯的時候改變)。超時以后,用戶必須重新輸入密碼。
2、sudo配置:
配置sudo有兩種方法:(有超級用戶才可以修改它)
直接使用vim編輯/etc/sudoers文件;
使用visudo命令編輯。(防止兩個用戶同時修改,其次有語法檢查)
1)我們先做一個示范:
以root身份用visudo打開配置文件,在最后加入:
www ALL=(ALL) ALL
那么,現在讓我們來看一下那三個ALL到底是什么意思。
第一個ALL是指網絡中的主機,我們后面把它改成了主機名,它指明www可以在此主機上執行后面的命令。
第二個括號里的ALL是指目標用戶,也就是以誰的身份去執行命令。
最后一個ALL當然就是指命令名了。
2)限制用戶使用sudo的權利:
我們限制一下www的權利,不讓他為所欲為。比如我們只想讓他像root那樣使用nginx,把那一行改為:
www localhost= /usr/local/nginx/bin/nginx
再來執行命令:
sudo ./nginx
3)免密碼:
很多時候,我們本來就登錄了,每次使用sudo還要輸入密碼就顯得煩瑣了。我們可不可以不再輸入密碼呢?當然可以,我們這樣修改配置文件:
www ALL=(ALL) NOPASSWD:ALL
4)指定用戶:
我們想讓foobar用戶在linux主機上以jimmy或rene的身份執行kill命令,這樣編寫配置文件:
www linux=(jimmy,rene) /bin/kill
但這還有個問題,www到底以jimmy還是rene的身份執行?這時我們應該想到了sudo -u了,它正是用在這種時候。
www可以使用:sudo -u jimmy kill PID或者sudo -u rene kill PID
但這樣挺麻煩,其實我們可以不必每次加-u,把rene或jimmy設為默認的目標用戶即可。再在上面加一行:
Defaults:foobar runas_default=rene
Defaults后面如果有冒號,是對后面用戶的默認,如果沒有,則是對所有用戶的默認。就像配置文件中自帶的一行:
Defaults env_reset