1、sudo是什么?
让普通用户可以执行root用户才能执行的命令的方法。
2、为什么?
1)职责分解,如专门定义一个用户进行用户管理;
2)保护root用户安全,即使用户a要做系统管理的动作,也不需要知道root的密码;
3、如何做?
1.sudo的工作流程
- 當使用者執行 sudo 時,系統於 /etc/sudoers 檔案中搜尋該使用者是否有執行 sudo 的權限;
- 若使用者具有可執行 sudo 的權限後,便讓使用者『輸入使用者自己的密碼』來確認;
- 若密碼輸入成功,便開始進行 sudo 後續接的指令(但 root 執行 sudo 時,不需要輸入密碼);
- 若欲切換的身份與執行者身份相同,那也不需要輸入密碼。
2.sudoers文件配置
通过sudoers文件配置哪些用户可以使用sudo命令。
该文件在/etc/sudoers下,默认只有root。
格式如下:
使用者帳號 登入者的來源主機名稱=(可切換的身份) 可下達的指令
root ALL=(ALL) ALL
fisftp ALL=(oracle) ALL
说明:
- 『使用者帳號』:系統的哪個帳號可以使用 sudo 這個指令的意思;
- 『登入者的來源主機名稱』:當這個帳號由哪部主機連線到本 Linux 主機,意思是這個帳號可能是由哪一部網路主機連線過來的, 這個設定值可以指定用戶端電腦(信任的來源的意思)。預設值 all 可來自任何一部網路主機
- 『(可切換的身份)』:這個帳號可以切換成什麼身份來下達後續的指令,預設 root 可以切換成任何人;
- 『可下達的指令』:可用該身份下達什麼指令?這個指令請務必使用絕對路徑撰寫。 預設 root 可以切換任何身份且進行任何指令之意。
4、使用场景:
1)普通用户便捷的完成管理动作,不用来回切换root和普通用户,节省时间。
2)不用广泛告知root密码,保护root安全。
[fisftp@s1 ~]$ sudo -u oracle ls /home/oracle/sudoTest2.txt
/home/oracle/sudoTest2.txt
[fisftp@s1 ~]$ sudo ls /home/oracle/sudoTest2.txt
Sorry, user fisftp is not allowed to execute '/bin/ls /home/oracle/sudoTest2.txt' as root on s1.
5、附:su的用法
1.是什么?
switch user,切换用户。
2.注意事项:
是否加载新用户的profile:-
一般需要加载目标用户的profile,否则停留在旧用户的profile,很多命令无法执行,白切换。
##当前用户名及PATH环境变量
[oracle@s1 ~]$ env |grep USER
USER=oracle
[oracle@s1 ~]$ env |grep PATH
LD_LIBRARY_PATH=/home/oracle/app/product/112010/db_1/lib:/usr/lib
CLASSPATH=/home/dev/jdk1.8.0_241/lib:/home/dev/jdk1.8.0_241/jre/lib:
PATH=/home/dev/jdk1.8.0_241/bin:/home/dev/jdk1.8.0_241/jre/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/mysql/bin:/home/oracle/bin:/home/oracle/app/product/112010/db_1/bin
##切换用户,但不加载目标用户的profile
[oracle@s1 ~]$ su fisftp
Password:
##目标用不下,用户名和PATH环境变量还是前个用户的,实际会导致很多命令无法执行
[fisftp@s1 oracle]$ env |grep USER
USER=fisftp
[fisftp@s1 oracle]$ env |grep PATH
CLASSPATH=/home/dev/jdk1.8.0_241/lib:/home/dev/jdk1.8.0_241/jre/lib:
PATH=/home/fisftp/.local/bin:/home/fisftp/bin:/home/dev/jdk1.8.0_241/bin:/home/dev/jdk1.8.0_241/jre/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/mysql/bin:/home/oracle/bin:/home/oracle/app/product/112010/db_1/bin
只单次执行命令: -c command
指以目标用户执行command后,再回到当前用户。
[root@s1 ~]# su - fisftp -c "touch /home/fisftp/suTest.txt"
[root@s1 ~]# ll /home/fisftp/suTest.txt
-rw-rw-r--. 1 fisftp fisftp 0 Jul 27 15:29 /home/fisftp/suTest.txt
注意:与sudo用法类似,也可以避免真正切换用户;不同的地方需要知道目标用户密码。
参考:《鸟哥的Linux私房菜》:http://linux.vbird.org/linux_basic/0410accountmanager.php#sudo