0
点赞
收藏
分享

微信扫一扫

Shell搭建samba共享

#!/bin/bash
#AUTHOR:AN
#DATE:2019-04-10
#DESCRIBE:快速搭建samba共享
#PROBLEM:如何把expect中输出的信息导入到/dev/null

INSERROR=65 #软件安装错误
USEREXIST=67 #用户存在

##############################################################
#输出不同颜色的字体
#$1代表颜色编号,$2代表输出内容
cecho(){
echo -e "\033[$1m$2\033[0m"
}

#创建目录,先检测目录是否存在
MKDIR(){
if [ ! -d "$1" ];then
mkdir -p "$1"
else
cecho 31 "$1已存在" #红色
read -p "重新输入目录名:" DIR
MKDIR $DIR
fi
}

#安装软件
YUM(){
rpm -q $1 &> /dev/null
[ $? -ne 0 ] && cecho 36 "正在安装软件包$1,请稍等......" && yum -y install $1 &> /dev/null
rpm -q $1 &> /dev/null
[ $? -ne 0 ] && echo "软件包$1安装错误" >&2 && exit $INSERROR
}

##############################################################
#服务端
server(){
#安装软件包
YUM samba #调用YUM函数安装samba
YUM expect #用于非交互式

#创建samba用户
read -p "输入samba用户名:" SMB_USER
id $SMB_USER &> /dev/null
if [ $? -eq 0 ];then
echo "$SMB_USER已经存在"
exit $USEREXIST
else
useradd -s /sbin/nologin $SMB_USER
read -p "输入samba用户密码:" SMB_PWD
expect << EOF
spawn pdbedit -a $SMB_USER
expect "password:" {send "$SMB_PWD\r"}
expect "password:" {send "$SMB_PWD\r"}
expect "#" {send "exit\r"}
EOF
sleep 1
clear #清屏
fi

#创建共享目录和发布共享名
read -p "输入共享目录:" Server_Dir
MKDIR $Server_Dir
read -p "输入发布共享名:" Share_Name

#配置权限
read -p "输入工作组:" WorkGroup
read -p "允许访问的网络(如:172.25.0.0/24):" IP
read -p "授予什么权限(r|rw):" Permission

cp /etc/samba/smb.conf /etc/samba/smb.conf.bak #对配置文件进行备份
#修改工作组
line=`sed -n '/workgroup/=' /etc/samba/smb.conf |sed -n '2p'` #提取workgroup所在的行数
sed -i "$line c workgroup = $WorkGroup" /etc/samba/smb.conf #整行替换

case $Permission in
r)
#修改配置文件
cat >> /etc/samba/smb.conf << EOF
[$Share_Name]
path = $Server_Dir
hosts allow = $IP
EOF
#判断布尔值是否符合要求
Bool=`getsebool -a |awk '/samba_export_all_ro/{print $3}'`
[ "$Bool" == "off" ] && cecho 36 "正在修改布尔值,请稍等......" && setsebool samba_export_all_ro on -P #修改布尔值
Bool=`getsebool -a |awk '/samba_export_all_ro/{print $3}'`
[ "$Bool" == "off" ] && cecho 31 "修改布尔值失败"
;;
rw)
#修改配置文件
cat >> /etc/samba/smb.conf << EOF
[$Share_Name]
path = $Server_Dir
write list = $SMB_USER
hosts allow = $IP
EOF
setfacl -m u:$SMB_USER:rwx $Server_Dir #ACL权限
#判断布尔值是否符合要求
Bool=`getsebool -a |awk '/samba_export_all_rw/{print $3}'`
[ "$Bool" == "off" ] && cecho 36 "正在修改布尔值,请稍等......" && setsebool samba_export_all_rw on -P #修改布尔值
Bool=`getsebool -a |awk '/samba_export_all_rw/{print $3}'`
[ "$Bool" == "off" ] && cecho 31 "修改布尔值失败"
;;
*)
echo "请输入(r|rw)"
esac

systemctl restart smb
systemctl enable smb &> /dev/null
cecho 36 "服务端部署成功!!!"
exit 0
}

##############################################################
client(){
#安装软件samba-client和cifs-utils
YUM samba-client
YUM cifs-utils

read -p "输入服务端发布的共享名:" Share_Dir
read -p "创建挂载点:" Client_Dir
MKDIR $Client_Dir

read -p "输入服务端IP地址:" IP
cecho 36 "选择挂载方式" #深绿色
echo "1.单用户挂载"
echo "2.多用户挂载"
read -p "输入挂载方式(1|2):" Mount

case $Mount in
1)
read -p "输入samba用户:" SMB_USER
read -p "输入密码:" SMB_PWD
echo "//$IP/$Share_Dir $Client_Dir cifs user=$SMB_USER,pass=$SMB_PWD,_netdev 0 0" >> /etc/fstab
mount -a
;;
2)
read -p "输入权限最小的samba用户:" SMB_USER
read -p "输入密码:" SMB_PWD
echo "//$IP/$Share_Dir $Client_Dir cifs user=$SMB_USER,pass=$SMB_PWD,multiuser,sec=ntlmssp,_netdev 0 0" >>/etc/fstab
mount -a
;;
*)
echo "请输入(1|2)"
esac
cecho 36 "客户端部署成功!!!"
exit 0
}

#############################主程序#############################
clear
cecho 36 "***************************#快速搭建samba共享#**************************#" #深绿色
echo
cecho 31 "###注意事项###"
cat << EOF
1.该脚本一次只能创建一个用户
2.如果要给共享目录添加多个用户,需要分别创建
3.进行多用户挂载时,以权限最小samba用户挂载
EOF
echo

#将防火墙设置为trusted
FW_Area=`firewall-cmd --get-default-zone`
[ "$FW_Area" != trusted ] && firewall-cmd --set-default-zone=trusted &>/dev/null && firewall-cmd --reload &>/dev/null

read -p "该主机是服务端还是客户端(s|c):" select
while :
do
case $select in
s)
server
;;
c)
client
;;
*)
echo "请输入(s|c)"
esac
done


举报

相关推荐

0 条评论