在单位建立samba文件服务器时, 用户数大概有60人左右,难道要一次一次useradd,再smbpasswd,最后再usermod,这样岂不是杯具,还是写个shell脚本吧, 本来以为挺容易的事,但因有些方面没考虑周全,写成还颇费周折,对于用户权限我是这样考虑的
       (1)普通用户拥有个人空间,可对该空间可读可写(废话)  
       (2)每部门或项目组拥有共享空间,该部门或该组的成员对该空间内自己的文件可读可写,对其它文件可读。
       (3)整个公司拥有一个共享空间。任何成员对该空间内自己的文件可读可写,对其它文件可读。
       (4)部门负责人或项目负责人可对该组员工空间可读。
       (5)高管对所有员工和部门或项目空间可读。   
      运行脚本前,有两件事情要做,建立员工列表,设置一个用户的磁盘quota。员工列表格式如下所示:
                                   jack:staff:hr:passwd123
                                   jilly:deptadmin:hr:passwd123
                                   tom:companyadmin:company:passwd567

      四列分别对应:员工姓名,职位,部门,密码 。职位我分了三种:staff(普通员工), deptadmin(部门管理者),companyadmin(公司管理者)。companyadmin(公司管理者)所处的部门是"company".按照顺序每个部门写下来,同部门内,同职位的写在一起。脚本内部也有说明,可参照,写的不好,留做笔记.

 
  
  1. #!/bin/bash  
  2. ######################################### 
  3. ######功能############################### 
  4. #添加samba用户 
  5. #samba权限分配 
  6. ######权限分配原则####################### 
  7. #普通用户拥有个人空间,可对该空间可读可写(废话)。 
  8. #每部门或项目组拥有共享空间,该部门或该组的成员对该空间内自己的文件可读可写,对其它文件可读。 
  9. #整个公司拥有一个共享空间。任何成员对该空间内自己的文件可读可写,对其它文件可读。 
  10. #部门负责人或项目负责人可对该组员工空间可读。 
  11. #高管对所有员工和部门或项目空间可读。 
  12. ######################################## 
  13. #Write By: TerryYW
  14. #Version: v1.0 
  15. ######################################## 
  16. #####前期准备########## 
  17. #手动建立一个系统用户,并配置其使用磁盘quota,将该用户名赋值给initquota参数。 
  18. #####init_list列表各列含义############## 
  19. #name:position:department:password 
  20. #####init_list包含内容如下############## 
  21. #...................... 
  22. #jack:staff:hr:passwd123 
  23. #jilly:deptadmin:hr:passwd123 
  24. #tom:companyadmin:company:passwd567 
  25. #................................... 
  26. ######################################## 
  27.  
  28. #设置初始化参数 
  29. init_list="name_position_dept_passwd.txt" 
  30. saveifs=$IFS 
  31. sharegroup="company" 
  32. flag="," 
  33. initquota="terry" 
  34. root_uid=0 
  35.  
  36. #必要条件判断 
  37. #该脚本要以root身份运行 
  38. if [ `echo $UID` -ne "$root_uid" ]; then 
  39. echo "Warning:you are not root" 
  40. exit 2 
  41. fi 
  42.  
  43. #initquota用户是否存在 
  44. if less /etc/passwd | awk -F: '{print $1}' | grep ^$initquota$ > /dev/null; then 
  45. echo "Info:initquotauser[$initquota] is exist!,continue...." 
  46. else 
  47. echo "Fatal:initquotauser[$initquota] is not exist!" 
  48. echo "Info:please add user [$initquota] to system and setup quota for it!" 
  49. exit 1 
  50. fi 
  51.  
  52. #init_list列表文件是否存在 
  53. if [ -f $init_list ]; then 
  54. echo "Info:get [$init_list] data to runing" 
  55. else 
  56. echo "Fatal:file [$init_list] is not exist!,please renew setup parameter <init_list>" 
  57. exit 3 
  58. fi 
  59.  
  60. #添加全公司共享组company. 
  61. if less /etc/group | awk -F: '{print $1}'| grep ^company$ > /dev/null; then 
  62.    echo "Warning:group[company] is already exist!,continue execute......" 
  63. else 
  64.    groupadd company 
  65.    if [ -d /home/company ]; then 
  66.         chmod 770 /home/company 
  67.         chgrp company /home/company 
  68.       else 
  69.         mkdir /home/company 
  70.         chmod 770 /home/company 
  71.         chgrp company /home/company 
  72.    fi 
  73. fi 
  74.  
  75. #添加项目或部门组. 
  76. less $init_list | awk -F: '{print $3}' | sort -k2n | uniq > temp.log 
  77. while read dept 
  78. do 
  79.   if less /etc/group | awk -F: '{print $1}'| grep ^$dept$ > /dev/null; then 
  80.      echo "Warning:group[$dept] is already exist!,continue execute......" 
  81.   else 
  82.      groupadd $dept 
  83.      if [ -d /home/$dept ]; then 
  84.         chmod 770 /home/$dept 
  85.         chgrp $dept /home/$dept 
  86.      else 
  87.         mkdir /home/$dept 
  88.         chmod 770 /home/$dept 
  89.         chgrp $dept /home/$dept 
  90.      fi 
  91.   fi 
  92. done < temp.log 
  93.  
  94. #添加用户到linux系统,建立用户目录,并设置权限。 
  95. #添加samba用户,并设置密码。 
  96. IFS=: 
  97. while read name position dept passwd 
  98. do 
  99.   if less /etc/passwd | awk -F: '{print $1}' | grep ^$name$ > /dev/null; then 
  100.      echo "Warning:user[$name] is already exist!,continue execute......" 
  101.      if [ -d /home/$name ]; then 
  102.         chmod 750 /home/$name 
  103.      else 
  104.         mkdir /home/$name 
  105.         chmod 750 /home/$name 
  106.      fi 
  107.   else 
  108.      useradd -d /home/$name -s /bin/false -m $name 
  109.      chmod 750 /home/$name 
  110.      echo "Info:user[$name] be add to system!,continue execute......." 
  111.  
  112.      #复制磁盘quota到其他用户 
  113.      edquota -p $initquota $name 
  114.      
  115. #添加系统用户密码. 
  116. passwd $name >> logpasswd.log 2>&1 << sysuser 
  117. $passwd 
  118. $passwd 
  119. sysuser 
  120. #添加samba用户密码. 
  121. smbpasswd -s -a $name >> logsmb.log 2>&1 << sambauser 
  122. $passwd 
  123. $passwd 
  124. sambauser 
  125.   fi 
  126.  
  127.   #用户依据自己所属部门,加入不同的组。 
  128.   case $position in 
  129.   staff) 
  130.        #一般用户加入自己所属部门或项目组和公司共享组(sharegroup) 
  131.        usermod -G ${dept}${flag}${sharegroup} $name 
  132.        echo "Info:[$dept]staffuser[$name] be add to group [${dept}${flag}${sharegroup}]" 
  133.        ;; 
  134.   deptadmin) 
  135.        #部门主管或项目主管加入自己所属部门或项目组和自己部门所有员工组和公司共享组(sharegroup)
    less $init_list | awk -F: '{print $1":"$2":"$3}'| grep -v ^$name:$position:$dept$ | grep $dept | grep -v $position | awk -F: '{print $1}' > temp1.log 2>&1 
  136.        groups="" 
  137.        while read deptusergroup 
  138.        do 
  139.        groups=${groups}${deptusergroup}${flag} 
  140.        done < temp1.log 
  141.        #usermod -G `echo "$groups" | sed 's/,$//'$name 
  142.        groups=${groups}${dept}${flag}${sharegroup} 
  143.        usermod -G $groups $name 
  144.        echo "Info:[$dept]deptadminuser[$name] be add to group [$groups]" 
  145.        ;; 
  146.   companyadmin) 
  147.        #高管加入所有员工组和部门或项目组和公司共享组(sharegroup) 
  148.        #高官在$init_list中设置的所属部门是company 
  149.        #高管加入所有部门或项目组 
  150.        #高管加入所有员工组 
  151.        less $init_list | awk -F: '{print $1":"$2":"$3}'| grep -v ^$name:$position:$dept$ | grep -v $position | awk -F: '{print $1}' > temp2.log 2>&1 
  152.        less $init_list | grep -v $dept | awk -F: '{print $3}' | sort -k2n | uniq >> temp2.log 2>&1 
  153.        groups="" 
  154.        while read group 
  155.        do 
  156.        groups=${groups}${group}${flag} 
  157.        done < temp2.log 
  158.        groups=${groups}${sharegroup} 
  159.        usermod -G $groups $name 
  160.        echo "Info:[$dept]companyadminuser[$name] be add to group [$groups]" 
  161.        ;; 
  162.   esac    
  163. done < $init_list 
  164. IFS=$saveifs 
  165. exit 0