歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> 在solaris下,讓普通用戶執行root的腳本

在solaris下,讓普通用戶執行root的腳本

日期:2017/2/28 11:12:17   编辑:關於Unix


問題:在solaris下,文件的suid位的特性,只對binary的程序有效,現在要求實現我們編寫的腳本,也具有類似的功能。
一、系統需求:
1、支持的平台
簡單的說:主流的unix都支持。如果要查看更多的細節,請查看sudo網站上的說明
2、需要gcc、gzip
  
二、下載sudo-1.6.6.tar.gz
我下載到solaris的/usr/loca/src目錄下,下面以此目錄為基准做講解。

三、解壓縮:
# pwd
/usr/local/src
# tar zxf sudo-1.6.6.tar.gz

四、編譯與安裝:
請查看sudo自帶的README和INSTALL,其中有許多安裝選項,默認的安裝如下:
# cd /usr/local/src/sudo-1.6.6
# ./configure
# ./make
# ./make install

五、系統配置:
1、主要文件
/etc/sudoers 經授權的使用者檔案。
/etc/stmp visudo 的 lock file 。
/usr/local/bin/sudo sudo 的執行檔。
/usr/local/etc/visudo 修改 sudoers 檔案的工具。
2、主配置文件sudoers的介紹
Sudo 允許經過同意的使用者以超級使用者的身分執行指令。 Sudo 參考/etc/sudoers 這個檔案來判定誰是被授權的使用者。Sudo 將會提示使用者輸入密碼來啟始一段 N 分鐘的允許時間(其中 N 是在安裝的時候定義的且預設值為 5 分鐘)。
Sudoers 這個檔案是由一個選擇性的主機別名 (host alias) 節區,一個選擇性的指令別名 (command alias) 節區以及使用者說明 (user specification)節區所組成的。所有的指令別名或主機別名必須需以他們自己的關鍵字作為開始 (Host_Alias/Cmnd_Alias)。注意,只有第一次使用者(在使用者說明節區裡有記錄的使用者)使用時會有說明。

使用者說明節區格式:
使用者接取群組 [: 接取群組 ] ...
接取群組 ::= 主機象徵 = [op]指令象徵 [,[op]指令象徵] ...
主機象徵 ::= 一個小寫的主機名稱或主機別名。
指令象徵 ::= 一個指令或指令別名。
op ::= 邏輯的 '!' 否定運算元。
主機別名節區格式:
Host_Alias 主機別名 = 主機列表

Host_Alias ::= 這是一個關鍵字。
主機別名 ::= 一個大寫的別名。
主機列表 ::= 以逗號間隔的一些主機名稱。

指令別名節區格式:
Cmnd_Alias 指令別名 = 指令列表

Cmnd_Alias ::= 這是一個關鍵字。
指令別名 ::= 一個大寫的別名。
指令列表 ::= 以逗號間隔的一些指令。

所有在 '#' 符號後面的文字都會被當作是注解。
太長的行可以使用倒斜線 '\' 字元來分成新的行。
保留的別名 'ALL' 在 {Host,Cmnd}_Alias' 裡都可以使用。
不要用 'ALL' 來定義一個別名,這個別名無效。
注意到 'ALL' 暗示全部的主機跟指令。
你可以使用這個語法從整個范圍中減掉一些項目:

user host=ALL,!ALIAS1,!/etc/halt...

范例

# Host alias specification
REMOTE=merlin,kodiakthorn,spirit
Host_Alias MACHINES=kalkan,alpo,milkbones
Host_Alias SERVERS=houdini,merlin,kodiakthorn,spirit

# Command alias specification
Cmnd_Alias LPCS=/usr/etc/lpc,/usr/ucb/lprm
Cmnd_Alias SHELLS=/bin/sh,/bin/csh,/bin/tcsh
Cmnd_Alias MISC=/bin/rm,/bin/cat:\
SHUTDOWN=/etc/halt,/etc/shutdown

# User specification
britt REMOTE=SHUTDOWN:ALL=LPCS
robh ALL=ALL,!SHELLS
nieusma SERVERS=SHUTDOWN,/etc/reboot:\
HUB=ALL,!SHELLS
markm HUB=ALL,!MISC,!/etc/shutdown,!/etc/halt
billp ALL=/usr/local/bin/top:MACHINES=SHELLS
davehieb merlin=ALL:SERVERS=/etc/halt:\
kodiakthorn=ALL

上面的 sudoers 說明檔案是由 4 個主機別名說明,4 個指令別名說明以及 7 個使用者說明所組成的。Britt 被允許在遠端機器 (merlin, kodiakthorn, 還有 spirit) 上執行 /etc/halt, /etc/shutdown, /usr/etc/lpc 以及/usr/ucb/lprm 。Rohn 被允許在任何機器上執行除了 SHELL 指令群以外的任何指令。Jill 被允許在 houdini 上執行 /etc/shotdown, /bin/rm, 以及/bin/cat 。Davehieb 可以在 merlin 以及 kodiakthorn 上執行任何指令並且可以 halt SERVERS 。


Sudo 被設計成經由 4.3 BSD syslogging 來記錄,但是如果真的想要的話還是可以記錄到一個檔案來取代。

如果一個沒有被授權的使用者執行了 sudo 的話,將會有一封 mail 從該使用者寄送到當地的授權者處(在安裝的時候定義的)。

所有的設定都是在安裝的時後定義的,從 sudo.h 含入檔及 Makefile 取得。
六、如何使用
可執行文件:
1、sudo - 以超級使用者 (superuser; root) 的身分執行指令
sudo command
2、visudo - 編輯 sudoers 檔案
Sudoers 檔案應該用 visudo 指令編輯,它會鎖住該檔並且做文法檢查。這提供了一個可以避免愚蠢文法錯誤的機制。visudo默認的位置是:/usr/local/sbin,只要直接執行/usr/local/sbin/visudo,就可以對sudoers文件進行編輯。
七、警告
如果使用者可以存取 shell scripts 指令群或允許 shell escapes 的話,沒有簡單的辦法可以防止使用者得到 root shell。
另外,sudo象任何一種軟件一樣,它也會有bug。如果是對安全性要求高的機器,請謹慎使用sudo。
Copyright © Linux教程網 All Rights Reserved