在单位建立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".按照顺序每个部门写下来,同部门内,同职位的写在一起.脚本内部也有说明,可参照,写的不好,留做笔记.
- #!/bin/bash
- #########################################
- ######功能###############################
- #添加samba用户
- #samba权限分配
- ######权限分配原则#######################
- #普通用户拥有个人空间,可对该空间可读可写(废话).
- #每部门或项目组拥有共享空间,该部门或该组的成员对该空间内自己的文件可读可写,对其它文件可读.
- #整个公司拥有一个共享空间.任何成员对该空间内自己的文件可读可写,对其它文件可读.
- #部门负责人或项目负责人可对该组员工空间可读.
- #高管对所有员工和部门或项目空间可读.
- ########################################
- #Write By: TerryYW
- #Version: v1.0
- ########################################
- #####前期准备##########
- #手动建立一个系统用户,并配置其使用磁盘quota,将该用户名赋值给initquota参数.
- #####init_list列表各列含义##############
- #name:position:department:password
- #####init_list包含内容如下##############
- #......................
- #jack:staff:hr:passwd123
- #jilly:deptadmin:hr:passwd123
- #tom:companyadmin:company:passwd567
- #...................................
- ########################################
-
- #设置初始化参数
- init_list="name_position_dept_passwd.txt"
- saveifs=$IFS
- sharegroup="company"
- flag=","
- initquota="terry"
- root_uid=0
-
- #必要条件判断
- #该脚本要以root身份运行
- if [ `echo $UID` -ne "$root_uid" ]; then
- echo "Warning:you are not root"
- exit 2
- fi
-
- #initquota用户是否存在
- if less /etc/passwd | awk -F: ''{print $1}'' | grep ^$initquota$ > /dev/null; then
- echo "Info:initquotauser[$initquota] is exist!,continue...."
- else
- echo "Fatal:initquotauser[$initquota] is not exist!"
- echo "Info:please add user [$initquota] to system and setup quota for it!"
- exit 1
- fi
-
- #init_list列表文件是否存在
- if [ -f $init_list ]; then
- echo "Info:get [$init_list] data to runing"
- else
- echo "Fatal:file [$init_list] is not exist!,please renew setup parameter <init_list>"
- exit 3
- fi
-
- #添加全公司共享组company.
- if less /etc/group | awk -F: ''{print $1}''| grep ^company$ > /dev/null; then
- echo "Warning:group[company] is already exist!,continue execute......"
- else
- groupadd company
- if [ -d /home/company ]; then
- chmod 770 /home/company
- chgrp company /home/company
- else
- mkdir /home/company
- chmod 770 /home/company
- chgrp company /home/company
- fi
- fi
-
- #添加项目或部门组.
- less $init_list | awk -F: ''{print $3}'' | sort -k2n | uniq > temp.log
- while read dept
- do
- if less /etc/group | awk -F: ''{print $1}''| grep ^$dept$ > /dev/null; then
- echo "Warning:group[$dept] is already exist!,continue execute......"
- else
- groupadd $dept
- if [ -d /home/$dept ]; then
- chmod 770 /home/$dept
- chgrp $dept /home/$dept
- else
- mkdir /home/$dept
- chmod 770 /home/$dept
- chgrp $dept /home/$dept
- fi
- fi
- done < temp.log
-
- #添加用户到linux系统,建立用户目录,并设置权限.
- #添加samba用户,并设置密码.
- IFS=:
- while read name position dept passwd
- do
- if less /etc/passwd | awk -F: ''{print $1}'' | grep ^$name$ > /dev/null; then
- echo "Warning:user[$name] is already exist!,continue execute......"
- if [ -d /home/$name ]; then
- chmod 750 /home/$name
- else
- mkdir /home/$name
- chmod 750 /home/$name
- fi
- else $groups $name
- echo "Info:[$dept]companyadminuser[$name] be add to group [$groups]"
- ;;
- esac
- done < $init_list
- IFS=$saveifs
- exit 0
|