最近在帮企业部署内网网络存储(nas)系统,方便不同部门之间通过内网共享文件。Linux下的samba软件,能够很好地代替windows共享来完成该项目。
服务器信息
操作系统:CentOS 6.10
硬盘:128G SSD+1TB HDD
安装相关软件
使用yum安装samba
yum -y install samba
在配置NAS之前关闭SELinux以及在iptables放行相关端口,或者关闭iptables,由于在内网,无需防火墙,因此我直接清空了自带的iptables规则
setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disable/g' /etc/selinux/config iptables -F service iptables save
Samba安装完毕后,默认的配置文件在/etc/samba/smb.conf,所有的共享参数均在此配置。
首先是编辑/etc/samba/smb.conf,通过nano或者vi和WinSCP皆可,先编辑[global]全局选项
[global] workgroup = WORKGROUP #工作组名,win下默认是WORKGROUP server string = Samba Server For Linux #自定义字符串,用于描述服务器 log file = /var/log/samba/log.%m #生成日志 max log size = 50 #指定日志大小 security = user #安全级别,这里表示所有用户均需要通过验证才可访问 passdb backend = smbpasswd #密码认证方式,有多种选项,这里选择smbpasswd方便后期员工自助修改密码 smb passwd file = /etc/samba/smbpasswd #这里指定了账户密码的存放文件路径 max connections = 0 #0表示无限制连接,也可手动指定一个数值来限制连接数 load printers = no #加载打印机共享,这里不设定打印机
全局选项配置完毕后,就可以开始配置共享目录了,首先创建一个目录,专门用于存放NAS文件
mkdir -p /media/samba
编辑配置文件smb.conf中的文件夹选项,另起一行,示例如下
#客户端看到的文件夹名称 [部门1] #该共享文件夹在服务器中对应的真实目录 path = /media/samba/部门1 #对该共享具有读取权限的用户 valid users = user1 user2 user3... #用户创建的文件和目录的默认权限 create mask = 0755 directory mask = 0755 #在首页是否隐藏,yes为不隐藏,no为隐藏 browseable = yes #对该共享具有写入权限的用户 write list = user1 user2 user3... #对该共享具有完全控制权限的用户 admin users = user1 user2 user3... #是否允许访客访问,yes为允许,no为禁止 guest ok = no [部门2] path = /media/samba/部门2 valid users = user1 user2 user3... create mask = 0755 directory mask = 0755 browseable = yes write list = user1 user2 user3... admin users = user1 user2 user3... guest ok = no #可根据实际需求,在配置内继续添加其他共享 ...
创建真实目录
mkdir -p /media/samba/部门1 mkdir -p /media/samba/部门2
因为samba用户认证是使用本地用户名+smb独立密码的形式来认证,即用户名必须在系统内存在,所以我创建了一个名为smbuser的组,然后将公司员工的账号批量导入。在设置NAS密码时,使用的是smbpasswd,smbpasswd是一个交互式命令,其使用方法如下:
smbpasswd -a 用户名 New password:(输入密码,密码不会显示在此处)
因为这是一个交互式命令,所以给批量设置默认密码带来了许多麻烦,而幸好有expect命令来解决这个交互的问题。批量导入方法如下:
安装expect
yum -y install expect
写一个批量导入脚本
#!/usr/bin/expect spawn smbpasswd -a 用户1 expect "*password:" send "用户1的密码\r" expect "*password:" send "用户1的密码\r" interact spawn smbpasswd -a 用户2 expect "*password:" send "用户2的密码\r" expect "*password:" send "用户2的密码\r" interact ...
然后赋予脚本执行权限并且执行就行了
chmod +x 脚本名 ./脚本名
配置基本已经完成了,接下去便是启动smb服务器
service smb start
将smb加入开机启动项
chkconfig smb on