linux下用戶管理和用戶授權(sudo)


剛安裝的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

參考文章:
https://hupingzhi.cn/post/27/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM