昨天中午,剛學完ACL和掛載,試著寫了一個小指令碼,假設一個小組開發一個項目,需要建立1個項目小組裡面有3個使用者,他們一個共用資料夾,為防止互相之間修改甚至刪除對方的檔案,給這個檔案夾設立SGID和STICKY .
指令碼功能如下:
1. 可以自動建立一個10GB的邏輯分區,並格式化為ext3分區格式
2. 自動掛載第一步建立的分區,並且開機掛載
3. 讓使用者手動選擇建立3個使用者,自動建立並分別密碼為他們的使用者名稱,並讓建立一個指定的研發組,讓這三個使用者自動加入。
4. 讓使用者指定一個目錄,自動更改那個目錄的屬組為剛才第3步建立的組,並且加入SUID許可權和STICY粘帖位
5. 可以設定指定檔案的ACL許可權。
6. 整個過程中抓取使用者的ctrl + c 撤銷操作,不儲存退出。
#!/bin/bash#: Title:acl.sh #: Synopsis: #: Date:2011-07-30 01:48:01#: Version: 1.0#: Author: Dean #: Options:function FS { //自動格式化函數 fdisk /dev/sda << Endn+10GwEnd partprobe /dev/sda F=`fdisk -l /dev/sda | tail -1 | cut -d/ -f3 | awk '{print $1}'` mkfs -t ext3 /dev/$F read -p "which dir your want mount?" FILE mkdir $FILE &> /dev/null mount /dev/$F $FILE -o acl echo '/dev/$F $FILE ext3 defaults 0 0' >> /etc/fstab}function GU { //添加使用者和組 read -p "which gruop you want make?" GP //添加組 grep $GP /etc/group || groupadd $GP //如果添加的組存在,那麼不添加,否則添加 read -p "input 3 username:" U1 U2 U3 //讓使用者輸入三個使用者名稱 grep $U1 /etc/passwd || useradd $U1 && echo "$U1" | passwd -stdin $U1 &> /dev/null //自動將所建立的使用者密碼設為其使用者名稱 grep $U2 /etc/passwd || useradd $U2 && echo "$U2" | passwd -stdin $U2 &> /dev/null grep $U3 /etc/passwd || useradd $U3 && echo "$U3" | passwd -stdin $U3 &> /dev/null chown :$GP $FILE //修改檔案夾屬組 chmod g+s o+t $GP //增加SGID和STICKY}function ACLW { //ACL許可權修改函數 read -p "please input a file path:" P if [ -e $P ] ;then //檢查所要修改的檔案是否存在 echo "The file is not exist!" else exit fi echo "which kind of perssition you want add the file:1)r-- 2)rw- " //提供兩種許可權方式,r--和rw-- read -p 'chose:' N read -p "which user influced:" UN case $N in '1') setfacl -m u:$UN:r-- $P ;; '2') setfacl -m u:$UN:rw- $SP ;; *) echo "Wrong input!" ;; esac}echo "======================================================="echo " Program for an object team"echo " made by dean version 1.0 "echo "======================================================="echo "Which mode your want user: 1)FS 2)ADDUSER 3)ACL 4)ALL" //讓使用者選擇相應的模組echo "Useage: The FS will creat a 10G filesystem." //暫時只提供10G的分區,不支援手動調整分區read -p "Choise:" Ccase $C in '1')trap 'echo "exit unsaved"&&exit' 2 //trap跟蹤使用者撤銷操作,隨時退出,並返回unsaved FS ;; '2')trap 'echo "exit unsaved"&&exit' 2 GU ;; '3')trap 'echo "exit unsaved"&&exit' 2 ACLW ;; '4')trap 'echo "exit unsaved"&&exit' 2 FS GU ACLW ;; *) exitesac