公司一直以来都有个共享盘的需求,之前使用的 windows server 做共享,但是用户的权限控制一直都做的很不理想,趁着这次服务器重置把共享搬到了 Linux 平台上,也摒除了要去使用各种类似 wingftp 的软件的麻烦。

制作用户列表

用户名称与用户组(userlist)

可以采用excel输入,然后复制出来或者导出都可以,注意导出的文本文件最后添加一个空行,不然会少一个用户

zhangs	arch	leader	yysj
lis	arch	leader	yysj
wangw	struc	leader	yysj

为用户创建随机密码并加入userlist

# 为用户列表创建随机的6位数密码
awk '{cmd="echo `date +%Y-%m-%d-%H-%M-%S.%N|md5sum|cut -b 1-6` "$system(cmd)}' userlist.txt > userlist

由于不知道怎么把生成的密码放到第二列,就放在第一列算了,创建用户跟密码的时候注意下就可以了。

创建密码后的文件类似:

842w3b	zhangs	arch	leader	yysj
1cb3f4	lis	arch	leader	yysj
e0t4a6	wangw	struc	leader	yysj

添加用户组

组列表文件

组列表文件为每行一个用户组(文件名:groups)。

yysj
arch
struc
assis
garden
mechat
bim
leader
stuff
intern

批量添加组

脚本如下(add_group.sh):

#!/bin/bash

cat $1 | while read group
do
    groupadd ${group}
done

使用命令 sudo ./add_group.sh groups 添加用户组。

批量添加用户

脚本如下(add_samba_users.sh):

#!/bin/bash

# Create users
cat $1 | awk {print}| while read password username group_pro group_pos group_depa
do
    useradd -M -s /usr/sbin/nologin -p ${password} -g ${group_depa} -G ${group_pro},${group_pos} $username
    echo -e "$password\n$password" | smbpasswd -a $username -s
done

使用如下命令批量添加用户:

sudo ./add_samba_users.sh userlist

在批量添加用户以后要注意去查看一下/etc/passwd/etc/group*两个文件,确认用户都按自己的需求添加了,而且属于对应的组。*

samba设置

编辑/etc/samba/smb.conf文件,记得备份原版文件

[global]
    workgroup = WORKGROUP
    server string = %h server (Samba, Ubuntu)
    dns proxy = no
    log file = /var/log/samba/log.%m
    max log size = 1000
    syslog = 0
    panic action = /usr/share/samba/panic-action %d
    security = user
    passdb backend = tdbsam
    obey pam restrictions = yes
    unix password sync = yes
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    pam password change = yes
    map to guest = bad user
    usershare allow guests = yes

# 注意:/samba/share/projects文件夹需要设置权限:sudo chmod 1775 /samba/share/projects,这样才能实现用户建立的文件其他人不能删除修改,包括Software和Rules共享同样设置
[Projects]
    comment = Projects (read-and-write for @leader, read-only for others)
    path = /samba/share/projects
    browsable = yes
    public = no
	# yysj这个用户组才可以访问此文件夹
    valid users = @yysj
	# 仅用户yuhb和leader组的用户可以写目录
    write list = yuhb,@leader
    create mode = 0740
    directory mode = 1755

[Software]
    comment = Software (read_and_write for yuhb, read-only for others)
    path = /samba/share/software
    browsable = yes
    public = no
	# yysj这个用户组才可以访问此文件夹
    valid users = @yysj
	# 仅用户yuhb和leader组的用户可以写目录
    write list = yuhb,@leader
    create mode = 0740
    directory mode = 1750

[Rules]
    comment = Rules (read-and-write for @leader, read-only for others)
    path = /samba/share/rules
    browsable = yes
    public = no
	# yysj这个用户组才可以访问此文件夹
    valid users = @yysj
	# 仅leader组的用户可以写目录
    write list = @leader
    create mode = 0740
    directory mode = 1750

samba的权限除了samba本身允许的权限以外,文件系统的权限也会对用户共享造成限制,所以打开了samba本身允许写的权限的时候,一定要注意系统文件夹和文件是否允许登录的用户修改

关于samba的目录权限设置可以参考这个来设置:

# 只有用户b02,b01,c01,a01,以及用户组A可以访问该文件夹,但是只有用户组A能够写该文件夹。
[AA]
    comment = AA
	path = /samba/A
	public = no
	valid users = b02,b01,c01,a01,@A
	write list = @A
	
# 只有用户a01,c01,b01,以及用户组B可以访问该文件夹,但是只有用户组B能够写该文件夹。
[BB]
    comment = BB
	path = /samba/B
	public = no
	valid users = a01,c01,b01,@B
	write list = @B
# 所有账号能够访问对方,但是不能编辑或删除对方建立的文件
# 要修改文件夹权限才能实现这个目的:sudo chmod 1777 /samba/share-rw
[share-rw]
	comment = share-rw
	path = /samba/share-rw
	public = yes
	writable = yes