1,279 瀏覽數

sudo

#sudo 這個指令主要是用在給非特權使用者有權限去執行 root(特權使用者) 才能執行的指令.
sudo 的設定檔(/etc/sudoers)
sudo 的設定檔 /etc/sudoers ,不過我們不會去用 vi 直接編輯這個檔,而是使用指令 #visudo 去編輯 /etc/sudoers ,因為 visudo 還會幫我們檢查是否有語法或編寫錯誤….等

應用

目的讓使用者 user1,user2 具有掛載光碟,磁碟機(#mount /mnt/cdrom,#mount /mnt/floppy) 的能力
系統預設一般非特權使用者可以掛載光碟,磁碟機定義在 /etc/fstab 的 /dev/cdrom … owner ,現在我們只希望 user1 , user2 有權利掛載光碟,磁碟機,所以在實驗前要先將 /etc/fstab  /dev/cdrom …     ,   /dev/fd0…. 的 “owner" 移除

使用 root 身份登入,新增使用者 user1,user2.

[root@benjr ~]# adduser user1
[root@benjr ~]# adduser user2

設定使用者 user1,user2 的密碼

[root@benjr ~]# passwd user1
Changing password for user user1
New Password:
Retype new password:
passwd: all authentication tokens updated successfully
[root@benjr ~]# passwd user2
Changing password for user user2
New Password:
Retype new password:
passwd: all authentication tokens updated successfully
[root@benjr ~]# visudo
user1    ALL=/bin/mount /mnt/cdrom,/bin/mount /mnt/floppy
user2    ALL=/bin/mount /mnt/cdrom,/bin/mount /mnt/floppy

定義 user1 , user2 (user2 定義同 user1)具有掛載光碟,磁碟機的能力
說明:
user1
定義 user1 具備 root 的權限去執行接下來的指令  
ALL
定義 user1 是從哪裡登入系統(本機或遠端 telnet,ssh…)來做限制,ALL表示不受限,localhost表示只有本機使用者可用,也可以根據遠端機名稱來設限.
=/bin/mount /mnt/cdrom,/bin/mount /mnt/floppy
定義 user1 具有哪些指令可以以 root 身份執行,使用 user1 身分登入並看看 user1 有哪些 sudo 指令可用

[user1@benjr ~]# sudo -l
Password:
User user1 may run the following commands on this host:
(root) /bin/mount /mnt/cdrom
(root) /bin/mount /mnt/floppy

user1 就可以透過 sudo 指令去執行 /bin/mount /mnt/cdrom 的動作了.

[user1@benjr ~]# sudo /bin/mount /mnt/cdrom

or

[user1@benjr ~]# sudo mount /mnt/cdrom

user2 也具有 user1 相同的權限去執行 /bin/mount /mnt/cdrom
sudo 正規寫法 
方法同上但寫法採用正規的寫法

[root@benjr ~]# visudo
# Host alias specification
# User alias specification
User_Alias ADMIN=user1,user2
# Cmnd alias specification
Cmnd_Alias  MOUNTCMD=/bin/mount /mnt/cdrom,/bin/mount /mnt/floppy
# User privilege specification
ADMIN ALL=MOUNTCMD

定義 user1 , user2 具有掛載光碟,磁碟機的能力說明:

User_Alias   ADMIN=user1,user2  

User_Alias 為定義使用者保留字,ADMIN 為使用者定義別名(一個別名可包含多個使用用者),但規定上名稱都必須為大寫.
Cmnd_Alias  MOUNTCMD=/bin/mount /mnt/cdrom,/bin/mount /mnt/floppy
Cmnd_Alias 為定義命令者保留字,MOUNTCMD 為命令定義別名(一個別名可包含多個命令),但規定上名稱都必須為大寫.

ADMIN ALL=MOUNTCMD 

“ADMIN"      #定義 ADMIN 具備 root 的權限去執行接下來的指令
“ALL"           #定義 ADMIN 是從哪裡登入系統(本機或遠端 telnet,ssh…)來做限制,ALL表示不受限制,localhost表示只有本機使用者可用,也可以根據遠端機名稱來設限.
“=MOUNTCMD"     #定義 ADMIN 具有哪些指令可以以 root 身份執行

Note:你也可以不用為群組定義別名,可以直接使用 /etc/group 中的群組來定義,但在 #User privlege specification 中的群組必須以 “%"(代表使用 /etc/group 中的群組) 開頭.
功能同第一個範例,但使在 #User privlege specification 中的群組以 “%"(代表使用 /etc/group 中的群組)來定義

[root@benjr ~]# visudo
%users    ALL=/bin/mount /mnt/cdrom,/bin/mount /mnt/floppy

%users 的定義存放在 /etc/group

[root@benjr ~]# cat /etc/group users:x:100:user1:user2

則 user1 , user2 具有掛載光碟,磁碟機的能力

sudo 更多的應用

ex:讓 user1 可以執行所有 root 才能執行的指令

[root@benjr ~]# visudo
user1     ALL=(ALL) ALL

這樣 user1 就可以執行 root 才能執行的指令,sudo 除了可以為非特權使用者新增某些特別權限外,還可以將 root 變成其他使用者來執行指令

ex: 改變 root 身份為 user1 來建立檔案 使用 root 身份登入

[root@benjr ~]# sudo -u user1 touch /home/user1/rootfile
[root@benjr ~]# ll /home/user1/
total 0
-rw-r–r–    1 user1    user1           0 Aug 12 13:07 rootfile

很明顯 rootfile 的 owner,group 都是 user1.

網友的想法

  1. 自動參照通知: 安全性 | Benjr.tw

發表迴響