1,760 瀏覽數

sudo

要讓一般使用者有特權指令可以透過 #sudo 指令,或是使用 #visudo 去編輯使用者的權限.

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

後面幾個範例會使用到不同使用者,這邊可以透過 #sudo 新增使用者 user1,user2 並設定使用者的密碼.

ben@ubuntu:~$ sudo adduser user1
Adding user `user1' ...
Adding new group `user1' (1001) ...
Adding new user `user1' (1001) with group `user1' ...
The home directory `/home/user1' already exists.  Not copying from `/etc/skel'.
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for user1
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] Y
ben@ubuntu:~$ sudo adduser user2
Adding user `user2' ...
Adding new group `user2' (1002) ...
Adding new user `user2' (1002) with group `user2' ...
The home directory `/home/user2' already exists.  Not copying from `/etc/skel'.
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for user2
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] Y

應用

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

下面的例子使用 root 身份登入,可以參考 如何使用 root 登入 Ubuntu – http://benjr.tw/96855

[root@benjr ~]# visudo
user1 ALL=/bin/mount /mnt/cdrom,/bin/mount /mnt/floppy
user2 ALL=/bin/mount /mnt/cdrom,/bin/mount /mnt/floppy
[/php]
定義 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.

One Reply to “sudo”

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

發表迴響