一、源码安装
- 编译 ./configure --prefix=/app/samba4.4.4
依赖环境 yum install libacl-devel libblkid-devel gnutls-devel readline-devel python-devel gdb pkgconfig libldap2-dev
报错 Checking for custom code : Could not find the python development headers /app/source/samba-4.4.4/wscript:106: error: the configuration failed (see '/app/source/samba-4.4.4/bin/config.log')
安装 yum install python-devel.x86_64
报错
Error: python-devel conflicts with python-2.6.6-52.el6.x86_64
You could try using --skip-broken to work around the problem
** Found 2 pre-existing rpmdb problem(s), 'yum check' output follows:
python-2.6.6-64.el6.x86_64 is a duplicate with python-2.6.6-52.el6.x86_64
python-libs-2.6.6-64.el6.x86_64 is a duplicate with python-libs-2.6.6-52.el6.x86_64
卸载 rpm -e python-2.6.6-52.el6.x86_64
安装最新python
报错 /app/source/samba-4.4.4/source4/lib/tls/wscript:51:
error: Building the AD DC requires GnuTLS (eg libgnutls-dev, gnutls-devel)
for ldaps:// support and for the BackupKey protocol
安装 yum install gnutls-devel
报错
/app/source/samba-4.4.4/source3/wscript:505:
error: ACL support not found. Try installing libacl1-dev or libacl-devel.
Otherwise, use --without-acl-support to build without ACL support. ACL support is required to change permissions from Windows clients.
- make && make install
- 配置动态链接库路径
安装完成后,我们需要配置动态链接库路径,因为运行samba的进行smbd和nmbd需要到目录/app/samba4.4.4/lib下的动态链接库文件。
但是该目录不是系统默认的动态链接库文件搜索路径,于是我们需要将该目录添加到文件ld.so.conf中。执行下面的命令
# vi /etc/ld.so.conf
打开ld.so.conf文件,并在该文件中加入这一行内容。 /app/samba4.4.4/lib
然后执行命令
# ldconfig 来更新动态链接库缓冲。
二、yum安装
[root@localhost ~]# yum install samba
三、配置文件说明
Samba的安全认证
Samba提供了安全认证等级,分4个级别:
share : 不需要输入用户名和密码
user : 需要输入用户名,密码, Samba对用户进行认证
server : 认证工作由另一台Samba服务器或者Windows server负责
domain : 指定一台windows server来进行用户认证
其中user是Samba的默认安全认证级别,也就是说在/etc/samba/smb.conf配置文件中,
将security一行改为security=user,那么用户在浏览共享内容前,就必须输入用户名和密码。
示例: [global] security=user [linux_share] path=/home/linux/share valid users=sftest #指定有效的用户,多个用可访问用逗号隔开 public=no #公开访问为否 writeable=yes #添加一句,表示具有写权限了 创建用户,必须创建系统用户与samba用户 # useradd sftest # bin/smbpasswd -a sftest #smbpasswd是命令, -a表示add user , sftest表示用户名 添加完用户和密码后,现在可以在windows中通过这个用户名和密码进行访问了
四、挂载smb访问
- smbclient 挂载访问
安装 smbclient , smbfs yum -y install samba-client
[root@localhost ~]# smbclient //192.168.90.233/dy-history --user shufeng
[root@localhost ~]# mount -t smbfs -o username=shareuser,passwd=***** //192.168.90.233/dy-history /mnt/data
提示输入密码 即可挂载访问
- windows主机访问smb共享文件夹
切换账户测试的时候,Windows会有samba缓存自动登录原来的账户,需要清理一下,清除方法:services.msc 服务--Workstation 重启服务清除缓存。
-
- 直接cmd访问
运行 \\192.168.90.233\dy-history
提示输入账号密码
可映射为本地驱动器
-
- 命令行页面:记录保存网络共享访问的账号密码
net use \\host passwd /user:username c:\> net use \\192.168.90.233 123456 /user:shufeng 192.168.90.233 是服务器的IP。 123456 是密码。 shufeng 是用户名。 直接清除所有的共享连接和密码 c:\> net use * /del c:\> net use * /del /y 查看指定主机的共享信息 c:\> net view \\192.168.90.233 查看本机共享 net share,这个命令可以查看哪些盘是共享的,删除的话, net share /del 加上你要删除的共享磁盘(你就是也用上上个命令看到的后面带$这个的东东)
- windows smb账号密码清除脚本,新建文本,拷贝以下内容,修改为bat后缀文件名,管理员权限运行
@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.90.233\IPC$ /DELETE ::清除win保存的认证 klist purge ::m删除win保存的凭据管理器,delete:后面为你共享的地址 cmdkey /delete:192.168.90.233 echo 清除登录信息完成 @echo off net stop LanmanWorkstation net start LanmanWorkstation start /max "" "\\192.168.90.233\dy-outer"
- mac os 挂载
在 Finder 中,选取“前往”>“连接到服务器”。
使用以下一种格式,在“服务器地址”栏中键入电脑的网络地址:
smb://192.168.90.233/dy-username
按照屏幕上的指示键入工作组名称以及用户名称和密码
详见百度说明: https://jingyan.baidu.com/article/fb48e8be3b457d6e622e14aa.html
五、用户权限配置
- 权限配置
新建用户组 groupadd danying
在组下建立用户 useradd -G danying -N shufeng
新建用户 useradd fuqin
再把fuqin加入单影组 usermod -a -G danying fuqin
设置smb用户密码 smbpasswd -a shufeng
- 新建用户文件夹
新建目录结构 mkdir -p /gfs/share/danying/shufeng
改变用户 chown shufeng /gfs/share/danying/shufeng
改变组 chgrp danying /gfs/share/danying/shufeng
改变权限 chmod 755 /gfs/share/danying/shufeng
- 新增用户的操作流程
1,新建用户
2,加入组
3,初始化smb用户密码
4,新建用户文件夹,设置文件夹权限
5,smb配置中增加当前用户信息
6,重启smb服务
- 权限配置说明
权限配置文件所在路径 /etc/samba/smb.conf
testparm检测配置文件命令
参数说明:
- samba服务器全局配置
workgroup 指定工作组名称
server string 主机注释信息
netbios name 指定NetBIOS名
interfaces 指定服务侦听接口和ip
hosts allow 可用“,”,空格,或tab分隔,默认允许所有主机访问,也可在每个共享独立配置。
hosts deny 拒绝指定主机访问
config file = /etc/samba/conf.d/%U 用户独立的配置文件
Log level = 2 日志级别,默认为0,不记录日志
max log size = 50 日志文件达到50k,将轮循rotate,单位KB
passdb backend = tdbsam 密码数据库格式
- samba服务共享目录配置
每个共享目录应该有独立的[ ]部分
[共享名称] 远程网络看到的共享名称
comment 注释信息
path 所共享的目录路径
public 能否被guest访问的共享,默认为no,和guest ok类似
browsable 是否允许所有用户浏览此共享,默认为yes,no为隐藏
writeable = yes 可以被所有用户读写,默认为no
read only = no 和 writeable = yes 等价,如与以上设置发生冲突,放在后面的设置生效,默认只读
write list 三种形式:用户,@组名(如writeable=no,列表中用户或组可读写,不在列表中用户只读)
valid users 特定用户才能访问该共享,如为空,将允许所有用户访问,用户名之间用空格分隔
- 配置示例:
[dy-history]
comment = danying-history
path = /gfs/share/danying/history
public = no
writable = yes
admin users = shufeng fuqin yinsinv
valid users = shufeng yinsinv fuqin
browsable = no
[dy-shufeng]
comment = danying-shufeng
path = /gfs/share/danying/shufeng
writable = yes
public = no
admin users = shufeng
valid users = ohufeng
browsable = no
[dy-fuqin]
comment = danying-fuqin
path = /gfs/share/danying/fuqin
writable = yes
public = no
admin users = fuqin
valid users = fuqin
browsable = no
六、常见问题:
- 对于服务器目录权限的测试:
由于我共享的是share目录,创建时用root,所以在默认的情况下,即使开了writeable也没有权限写,因为服务器目录的本身权限有问题。
(1)先修改用户所属
sudo chown shufeng:shufeng
(2)只保留shufeng用户有权限访问这个目录
sudo chmod u+rwx,g-rwx,o-rwx share
(3)访问,测试写文件
测试成功,shufeng用户有权限写。
关闭 firewalld 防火墙
systemctl stop firewalld.service
开机禁用 systemctl disable firewalld.service
关闭SELIUNX
[root@linux /]# getenforce ;查看当前状态
Enforcing
[root@linux /]# setenforce 0;
#关闭SELinux
[root@node01 ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config