sudo用法:不切换用户,快捷执行root的管理命令

1、sudo是什么?

让普通用户可以执行root用户才能执行的命令的方法。

2、为什么?

1)职责分解,如专门定义一个用户进行用户管理;
2)保护root用户安全,即使用户a要做系统管理的动作,也不需要知道root的密码;

3、如何做?

1.sudo的工作流程

  1. 當使用者執行 sudo 時,系統於 /etc/sudoers 檔案中搜尋該使用者是否有執行 sudo 的權限;
  2. 若使用者具有可執行 sudo 的權限後,便讓使用者『輸入使用者自己的密碼』來確認;
  3. 若密碼輸入成功,便開始進行 sudo 後續接的指令(但 root 執行 sudo 時,不需要輸入密碼);
  4. 若欲切換的身份與執行者身份相同,那也不需要輸入密碼。

2.sudoers文件配置

通过sudoers文件配置哪些用户可以使用sudo命令。
该文件在/etc/sudoers下,默认只有root。
格式如下:
使用者帳號 登入者的來源主機名稱=(可切換的身份) 可下達的指令

root                         ALL=(ALL)           ALL  
fisftp                       ALL=(oracle)        ALL

说明:

  1. 『使用者帳號』:系統的哪個帳號可以使用 sudo 這個指令的意思;
  2. 『登入者的來源主機名稱』:當這個帳號由哪部主機連線到本 Linux 主機,意思是這個帳號可能是由哪一部網路主機連線過來的, 這個設定值可以指定用戶端電腦(信任的來源的意思)。預設值 all 可來自任何一部網路主機
  3. 『(可切換的身份)』:這個帳號可以切換成什麼身份來下達後續的指令,預設 root 可以切換成任何人;
  4. 『可下達的指令』:可用該身份下達什麼指令?這個指令請務必使用絕對路徑撰寫。 預設 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

猜你喜欢

转载自blog.csdn.net/heroicpoem/article/details/107614442
今日推荐