目录
-
参考网址:
整体环境搭建:
https://blog.csdn.net/weixin_41515615/article/details/79636465
Samba权限详解:
https://blog.csdn.net/maotianwang/article/details/52524732
-
实验环境:
UOS 桌面操作系统(1021专业版)(安装环境和Debian相同),其他版本linux应该也可以。
-
实现效果:
使用Samba来实现如下功能:
在WIN资源管理器输入\\samba服务器IP地址,如\\192.168.31.193可访问文件共享服务器,也可映射到本地磁盘。
- 各部门有各自的文件夹,部门内成员有共同的读写权限,外部门无法访问,领导组成员可访问但仅有读权限。
- 每个人有自己的个人文件夹,有完全读写权限,并对其他人不可见。
- 公告栏,内容只有人力资源部成员可以编辑发布,其他人只读。
- 交换空间,可以临时存放资料,便于组间成员资料互传。
使用apache环境加changepassword模块实现:让用户访问网页修改自己的密码,如下图。
在浏览器输入以下网址可以更改密码
http://192.168.31.193/samba/changepassword.cgi
-
软件包、配置文件、脚本及素材:(点击跳转到下载页面)
右键单击附件可保存到文件,解压开如下:
-
搭建步骤:
-
Samba服务安装:
-
查看服务器是否安装
netstat -lntup |grep -i smbd #查看服务是否启动
默认自带SAMBA服务,只需要修改配置文件即可。
若未启动,请联网下载安装包或直接用apt-get命令安装,命令如下:
apt-get install samba
-
修改配置文件
直接解压文中附件里的smb.conf复制到对应目录/etc/samba/即可
cp smb.conf /etc/samba/
详情如下:
vim /etc/samba/smb.conf
(1)在global后加入以下内容,将认证方式修改该成smbpasswd,并将认证文件加密保存在/usr/local/samba/smbpasswd下,所以编译安装changepassword时需要指定这个文件
[global]
security = user
load printers = yes
log file = /usr/local/samba/var/log.%m
max log size = 50
pam password change = no
passdb backend = smbpasswd
smb passwd file = /usr/local/samba/smbpasswd
(2)在配置文件末尾写上文件夹访问权限:
参考网址:https://blog.csdn.net/maotianwang/article/details/52524732
中间略。。。
-
创建对应文件夹
文件夹全部给777权限,后面用samba来灵活控制权限。
直接解压文中附件里的mkdir脚本,复制到samba服务器上,设置执行权限并执行。
chmod +x mkdir.sh #增加执行权限
sh mkdir.sh #批量添加文件夹
详情如下:
也可以复制脚本内容,vim mkdir.sh 后粘贴进新文件保存退出。
(注意:ssh链接时vim默认无法粘贴,需在命令模式下输入:set mouse=c 后回车切换模式)
root@huanghe-PC:/home# cat mkdir.sh #以下为脚本内容
#!/bin/bash
mkdir -p /home/samba/XiaoShouBu
mkdir -p /home/samba/ChanPinBu
mkdir -p /home/samba/JiaoFuBu
mkdir -p /home/samba/CaiWuBu
mkdir -p /home/samba/QuDaoBu
mkdir -p /home/samba/ZongHeGuanLiBu
mkdir -p /home/samba/LingDaoZu
mkdir -p /home/samba/RenZiBu
mkdir -p /home/samba/public
mkdir -p /home/samba/exchange
cd /home/samba
chmod 777 -R *
-
批量添加系统及samba用户
直接解压文中附件里的add_uos_smb_user.sh脚本和用户名文件users.txt,复制到samba服务器上,设置执行权限并执行。
chmod 755 add_uos_smb_user.sh
sh add_uos_smb_user.sh users.txt #批量增加用户
执行结果如下,最后可以查看3个文件是否添加成功:
注意:批量添加时,users.txt文件要在linux下创建以保证格式是UNIX,最后一行要是空行。
脚本可以读取文件,批量增加用户,也可以单独增加某个人如
sh add_uos_smb_user.sh user001:group001
脚本内容如下:
#!/bin/bash
# FileName: add_smb_user.sh
# Useage : sh add_smb_user.sh userlistfile / username:groupname
#批量添加用户
add_list(){
#从userlist中读取用户帐号并循环添加
cat $1 | while read username_groupname
do
username=`echo $username_groupname |awk -F ':' '{print $1}'`
groupname=`echo $username_groupname |awk -F ':' '{print $2}'`
groupadd -f $groupname
useradd -g $groupname $username -s /sbin/nologin
#添加系统账户和密码 密码和账户名相同
echo "$username\n$username" | passwd -q $username
#添加samba账户和密码 密码和账户名相同
echo "$username\n$username" | smbpasswd -a $username -s
if [ 0 = $? ];then
echo "$username 系统及samba添加成功!"
else
echo "$username 系统或samba添加成功!"
fi
done
}
#单个添加用户
add_one() {
username=`echo $1 |awk -F ':' '{print $1}'`
groupname=`echo $1 |awk -F ':' '{print $2}'`
groupadd -f $groupname
useradd -g $groupname $username -s /sbin/nologin
#添加系统账户和密码 密码和账户名相同
echo "$username\n$username" | passwd -q $username &
#添加samba账户和密码 密码和账户名相同
echo "$username\n$username" | smbpasswd -a $username -s
if [ 0 = $? ];then
echo "$username 系统及samba添加成功!"
else
echo "$username 系统或samba添加失败!"
fi
}
# 先确认系统安装了samba,如果没有就安装
which smbpasswd || apt install -y samba
#如果参数1是文件那么执行批量添加,否则就单个添加
if [ ! -z $1 ];then
test -f $1 && (add_list $1) || (add_one $1)
echo ""&&tail -n5 /etc/passwd &&echo ""&& tail -n5 /etc/shadow &&echo ""&&tail -n5 /usr/local/samba/smbpasswd
exit 0
else
echo "参数1未找到。用法: $0 userlistfile / username:groupname"
echo ""&&tail -n5 /etc/passwd &&echo ""&& tail -n5 /etc/shadow &&echo ""&&tail -n5 /usr/local/samba/smbpasswd
exit 1
fi
注:这里创建samba账户时必须设置系统账户密码,以及smb账户密码
因为changepassword更改密码的机制是,先修改系统账户密码,然后将系统账户密码同步到 /usr/local/samba/smbpasswd SMB密码库文件下。
-
登录验证
Win下在资源管理器里输入samba服务器IP地址\\192.168.31.193
访问成功,说明samba服务器我们已经搭建好了。
-
安装changepassword程序实现客户端更改密码
-
上传文件
解压文中附件里的changepassword-0.9.tar.gz并上传到服务器
# tar -zxvf changepassword-0.9.tar.gz
# cd changepassword-0.9
-
安装依赖包
# cd smbencrypt/
# tar -xzvf libdes-4.04b.tar.gz
# cd des/
# make
# cp libdes.a ../
# cd ../..
-
编译安装changepassword
创建目录
# mkdir -p /usr/local/apache/htdocs/samba
# mkdir -p /usr/local/samba/smbpasswd
编译
# ./configure -enable-cgidir=/usr/local/apache/htdocs/samba -enable-language=Chinese -enable-smbpasswd=/usr/local/samba/smbpasswd -disable-squidpasswd -enable-logo=samba/logo.jpg
注:-enable-cgidir=...
# 自定义apache根目录路径
-enable-language=Chinese
# 设置页面为简体中文
-enable-smbpasswd=/etc/samba/smbpasswd
# 自定义samba密码的库文件
-disable-squidpasswd
# 禁用squid
-enable-logo=...
# 设置web根目录logo文件,此处的相对路径对应的是apache根目录也就是 samba/logo.jpg对应/usr/local/apache/htdocs/samba/logo.jpg
复制附件中的logo.jpg文件到/usr/local/apache/htdocs/samba/目录
# make && make install
-
卸载原apache2
由于原来的apache2服务路径对不上,先卸载原apache2
apt remove apache2-*
-
源码安装apache服务器:
直接解压文中附件里的 setup_apache.sh 脚本,复制到samba服务器上,设置执行权限并执行。
chmod +x setup_apache.sh #增加执行权限
sh setup_apache.sh #批量添加文件夹
脚本详情如下,若出错请排查
#!/bin/bash
#Download tar files
wget http://archive.apache.org/dist/apr/apr-1.4.6.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.5.1.tar.gz
wget http://archive.apache.org/dist/httpd/httpd-2.2.23.tar.gz
#安装apr
tar zxvf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure --prefix=/usr/local/apr --build=arm-linux
make
make install
cd ..
#如果在编译中出现如下报错
#/bin/rm: cannot remove `libtoolT': No such file or directory 编辑文件:vim configure--->将 RM='$RM'修改为 RM='$RM -f'即可。
#安装apr-util
tar zxvf apr-util-1.5.1.tar.gz
cd apr-util-1.5.1
./configure --with-apr=/usr/local/apr --build=arm-linux
make
make install
cd ..
#安装apache
tar zxvf httpd-2.2.23.tar.gz
cd httpd-2.2.23
./configure --prefix=/usr/local/apache --enable-dav --enable-so --enable-maintainer-mode --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --build=arm-linux
make
make install
cd ..
-
设置apache支持cgi模块
直接解压文中附件里的httpd.conf复制替换/usr/local/apache/conf/httpd.conf
详情如下:
# vi /usr/local/apache/conf/httpd.conf
搜索cgi 去掉如下注释:
--------------
#LoadModule cgid_module modules/mod_cgid.so #####这个当时没有
AddHandler cgi-script .cgi
--------------
搜索 DocumentRoot,在/usr/local/apache/htdocs类目下找到Options选项,修改为:
--------------
Options Indexes FollowSymLinks ExecCGI
--------------
ServerName 127.0.0.1:80
-----------------
重启服务
# /usr/local/apache/bin/apachectl restart
-
访问web页面验证
http://192.168.31.139/samba/changepassword.cgi
按照提示修改密码提交即可
-
设置httpd服务开机启动
vim /usr/local/apache/bin/apachectl #在开头加入以下内容
### BEGIN INIT INFO
# Provides: httpd
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start httpd daemon at boot time
# Description: Start httpd daemon at boot time
### END INIT INFO
cp /usr/local/apache/bin/apachectl /etc/init.d/apachectl
update-rc.d apachectl enable
reboot重启验证httpd服务是否启动
-
清除window访问samba的缓存:
由于调试需要,切换账户时必须注销或重启,可以用以下脚本快速清除window访问samba的缓存,直接解压文中附件里的“win下不注销清除smb登陆凭证.bat”bat脚本,注意替换相应的samba 服务器IP双击即可完成清除,脚本内容如下:
@echo off
:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
@echo off
echo 清除上次信息,请稍等......
net use
net use \\192.168.31.193\IPC$ /DELETE
::清除win保存的认证
klist purge
::m删除win保存的凭据管理器,delete:后面为你共享的地址
cmdkey /delete:192.168.31.193
echo 清除登录信息完成
@echo off
net stop LanmanWorkstation
net start LanmanWorkstation
start /max "" "\\192.168.31.193"