1. 程式人生 > 其它 >許可權管理-su與sudo

許可權管理-su與sudo

許可權管理-su與sudo

su切換使用者與sudo提權

一 介紹

因為root使用者的許可權太大,破壞力太強,安全風險極高,所以通常情況下公司的伺服器對外都是禁止root使用者直接登入的,而運維組的小夥伴通常使用的都是普通使用者,但是運維組內的小夥伴們在進行日常運維管理的過程中,經常需要獲得某些root才有的管理許可權才能完成任務,例如需要執行/sbin目錄下的命令。

那麼如何才能在不使用root使用者直接登入作業系統的同時又能保證普通使用者完成日常工作呢,有兩種方案

1、su切換使用者身份

特點:使用普通使用者登入,然後使用su命令切換到root賬戶下
優點:簡單粗暴
缺點:
1、需要知道root密碼
2、許可權控制不精細:每次都是獲取所有root許可權

2、sudo提取部分管理員許可權

特點:
1、使用普通使用者登入,然後sudo命令提取root使用者的部分管理許可權,注意只是某部分,而不是全部。
2、不需要切換到root賬戶下

優點:相對複雜
缺點:
1、不需要知道root密碼,輸入的是使用者自己的密碼
2、許可權控制更為精細:可以控制普通使用者只獲取部分root許可權

二 、su切換使用者

2.1 儲備知識

linux中shell可以分兩類

登入shell,需要輸入使用者名稱和密碼才能進入shell,日常接觸的最多的一種
非登入shell,不需要輸入使用者和密碼就能進入shell,比如執行bash會開啟一個新的會話視窗

shell的使用方式有兩種

互動式,等待使用者輸入執行的命令(終端操作,需要不斷提示)
非互動式,執行shell指令碼,指令碼執行結束後shell自動推出

bash shell配置檔案介紹(檔案主要儲存使用者的工作環境)

全域性配置檔案:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
個人配置檔案:
~/.bash_profile
~/.bashrc

profile類檔案,設定化境變數,登陸前執行的指令碼和命令
bashrc類檔案,設定本地變數,定義命令別名
ps:如果全域性配置和個人配置產生衝突,以個人配置為準

配置檔案的應用順序

如果執行的是登陸時shell,那麼配置檔案執行順序是:
/etc/profile -> /etc/profile.d/*.sh -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc
如果執行的是非登陸時shell,那麼配置檔案執行順序是:
~/.bashrc -> /etc/bashrc -> /etc/profile.d/*.sh
ps:驗證使用echo在每行新增一個輸出即可,注意,要把輸出放在檔案的第一行

執行登入與非登入shell

執行登入shell: 身份與環境都切換
su - 永華
執行非登入shell: 指切換使用者身份

補充:
1、從root往普通使用者下切換無需輸入密碼,反之則需要
2、切換身份執行命令: su - 使用者 -c '命令'

三、sudo提權

在日常的運維工作中,我們不應該把root的密碼公開給所有人,因為,一方面,真那樣做的話,安全風險就太高了,刪庫到跑路發生的概率估計會加大,另外一方面,小夥伴們大多數情況下只需要提取某一些許可權來使用即可也並不是需要所全部的管理員許可權,所以說sudo比su更為靠譜一些。

通過配置sudo,我們可以實現讓普通使用者輸入自己的密碼的情況下而獲取我們為其配置的特定許可權,這樣,既保證了普通使用者擁有他想要的特定許可權,又不至於洩露管理root的密碼。

3.1 配置

兩種編輯方式

3.1.1 visudo (會提示語法錯誤,推薦使用)

visudo -c  檢查配置是否正確

3.1.2 vim /etc/sudoers

sudo 語法
# root ALL=(ALL) ALL
1.root:使用者
2.ALL:代表使用者可以在哪臺機器上執行指令,通常設定為ALL,如果設定為localhost代表在本機上執行指令,也可以設定為本機意外的其他IP地址或主機名,此時該/etc/sudoers雖然是本機上配置的,但使用者登入到本機後仍然是無法執行命令的,如果把/etc/sudoers這個配置檔案複製到指定ip或主機名的那臺機器上,就好用了
配置檔案中講到:
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
/etc/sudoers檔案可以在多個系統之間共享,如果我們設定成ALL的話就省事了,該檔案複製到任意一臺機器上的完成的許可權配置都一樣
3.(ALL):標識允許使用者以哪個使用者的許可權做事情
4.ALL:所有命令
最終解釋:root使用者可以在所有主機上以任意使用者身份執行所有命令


tom ALL=(ALL) ALL tom使用者在任何機器上,可以以任何使用者身份執行任何命令,等同於root使用者
lili ALL=(ALL) NOPASSWD:ALL 免密
egon ALL=(ALL) /bin/cp,/bin/touch 只允許egon使用者以root身份執行,cp,touch命令
egon01 ALL=(ALL) ALL,!/user/bin/vim/test/a.txt # !代表取反
egon02 ALL=(ALL) /user/bin/passwd [a-zA-Z]*,/user/bin/vim *,!/user/bin/vim/test/a.txt #可以編輯所有檔案,除了/test/a.txt

# 可以測試
[root@egon ~]# su - egon02
[egon02@egon ~]$ sudo vim /test/b.txt
對不起,使用者 egon02 無權以 root 的身份在 egon 上執行 /bin/vim /test/a.txt。

測試

su - egon
ll -d /etc/
drwxr-xr-x. 146 root root 8192 910 20:27 /etc/
touch: 無法建立"/etc/a.txt": 許可權不夠
sudo touch /etc/