Samba服务器
Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的网络通讯协议,后来Samba将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。后来微软又把 SMB 改名为 CIFS(Common Internet File System),即公共 Internet 文件系统,较多的用在了Linux与windows之间的数据共享上面。
常见应用
- 分享档案与打印机服务;
- 可以提供用户登入 SAMBA 主机时的身份认证,以提供不同身份者的个别数据;
- 可以进行 Windows 网络上的主机名解析 (NetBIOS name)
- 可以进行装置的分享 (例如 Zip, CDROM…)
Samba使用的 damons:
NetBIOS 机器间的沟通
- 取得对方主机的NetBIOS name 定位该主机所在:
- 利用对方给予权限存取可用资源
SAMBA 使用下面两个服务来控制上面两步骤,分别是:
- nmbd
- 这个daemon是用来管理工作组,NetBIOS name等等的解析。
- 主要利用 UDP 协议开启 port 137 138 来负责名称解析的任务。
- smbd
- 这个daemon主要用来管理SAMBA主机分享的目录,档案与打印机等等。
- 主要利用可靠的TCP协议来传输数据,开放端口为139.
所以SAMBA每次启动至少都需要有这个daemon,而当我启动了SAMBA之后,主机系统就会启动137,138 这两个UDP 及139这个TCP端口。
Samba联机方式
peer/peer(对等模式)
优点:每部计算机均可以独立运作,而不受他人的影响
缺点:当整个网域内的所有人员都要进行数据分享时,需知道所有计算机里面的账号与密码。
比较适合
- 小型的网域
- 没有需要常常进行档案数据分享的网络环境
- 每个使用者都独自拥有该计算机的拥有权(该计算机是用户的,而不是公用的!)
domain model(主控模式)
将所有的账号与密码都放置在一部主控计算机 (Primary Domain Controller, PDC) 上面,在我的网域里面,任何人想要使用任何计算机时,都需要在屏幕前方输入账号与密码,然后通通藉由 PDC 服务器的辨识后,才给予适当的权限。也就是说,不同的身份还具有不一样的计算机资源权限。
Samba服务器搭建
1 | yum -y install samba* |
这里的getenforce结果一定要是Permissive 不然
selinux
可能会阻止了进程
setenforce 0
临时关闭
vim /etc/sysconfig/selinux
永久关闭
\#SELINUX=enforcing
SELINUX=disabled
Samba软件
samba-common
主要提供samba服务器的设置文件与设置文件语法检验程序testparm
samba-client
客户端软件,主要提供linux主机作为客户端时,所需要的工具指令集
samba-swat
基于https协议的samba服务器web配置界面
samba
服务器端软件,主要提供samba服务器的守护程序,共享文档,日志的轮替,开机默认选项Samba服务器安装完毕,会生成配置文件目录/etc/samba
和其它一些samba可执行命令工具,/etc/samba/smb.conf
是samba的核心配置文件。
Samba服务的配置文件
/etc/samba/smb.conf
1 | [global] #全局参数 |
主要配置参数-[global]
参数 | 描述 |
---|---|
workgroup = WORKGROUP | 设定Samba Server所要加入的工作组或域 |
server string = Samba Server Version %v | 设定 Samba Server 的注释,%v表示显示Samba的版本号 |
netbios name = smbserver | 设置Samba Server的NetBIOS名称 |
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 | 说明:设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。 |
hosts allow = 127. 192.168.1. 192.168.10.1 | 表示允许连接到Samba Server的客户端,多个参数以空格隔开,hosts deny 与hosts allow 刚好相反。 |
hosts allow=@example.com | 表示允许来自example.com网域的所有计算机连接 |
hosts allow=172.17.2.EXCEPT172.17.2.50 | 表示容许来自172.17.2.*的主机连接,但排除172.17.2.50 |
max connections = 0 | max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制 |
log file = /var/log/samba/log.%m | 设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个%m (主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。 |
max log size = 50 | 设置Samba Server日志文件的最大容量,单位为kB,0代表不限制 |
encrypt passwords = yes/no | 是否将认证密码加密 |
smb passwd file = /etc/samba/smbpasswd | 如果之前设置的是smbpasswd模式的话 |
username map = /etc/samba/smbusers | 用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。比如:root = administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba Server,更贴近windows用户的习惯。 |
guest account = nobody | 用来设置guest用户名。 |
load printers = yes/no | 设置是否在启动Samba时就共享打印机。 |
printcap name = cups | 设置共享打印机的配置文件。 |
printing = cups | 设置Samba共享打印机的类型 |
security = user
share
不需要提供用户名和口令user
共享目录只能被授权的用户访问,密码要在本Samba Server中建立server
依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。domain
域安全级别,使用主域控制器(PDC)来完成认证
passdb backend = tdbsam
passdb backend
表示用户后台,有三种后台:smbpasswd
、tdbsam
和ldapsam
sam
表示security account manager
(安全账户管理)
smbpasswd
:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba
目录下,不过有时候要手工建立该文件。
tdbsam
:该方式则是使用一个数据库文件来建立用户数据库。数据库文件/etc/samba/passdb.tdb
。要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。
创建删除Samba账户
1 | pdbedit –a username #创建 |
列出Samba用户列表,读取passdb.tdb数据库文件
1 | pdbedit –L |
列出Samba用户列表的详细信息
1 | pdbedit -Lv |
暂停该Samba用户的账号
1 | pdbedit -c "[]" -u u |
恢复该Samba用户的账号
1 | pdbedit –c "[]" –u username |
ldapsam
该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置passdb backend = ldapsam:ldap://LDAP Server
主要配置参数-[Share]
参数 | 描述 |
---|---|
comment = 任意字符串 | comment是对该共享的描述 |
path = 共享目录路径 | /home/share/ 下为每个Linux用户以他的用户名建个目录,作为他的共享目录,这样path就可以写成:path = /home/share/%u |
path= /home/share/%m |
为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径 |
browseable = yes/no | 指定该共享是否可以浏览 |
writable = yes/no | 该共享路径是否可写 |
available = yes/no | 指定该共享资源是否可用 |
admin users = 该共享的管理者 | admin users =david,sandy (多个用户中间用逗号隔开) |
valid users = | 允许访问该共享的用户 |
invalid users = | 禁止访问该共享的用户 |
write list = | 允许写入该共享的用户 |
创建共享目录
1 | useradd -s /sbin/nologin testuserh |
1 | [common] |
linux挂载smb共享目录
安装:yum -y install samba-client cifs-utils
匿名查看smb服务器共享的目录
1 | smbclient -L //192.168.77.199 -N |
1 | smbclient //192.168.201.147/common -U testuserh |
NT_STATUS_ACCESS_DENIED opening remote file \xxx.exe
重要!!! 要想使用户可以上传和删除文件,除了系统当中的定义的允许写操作外,目录文件系统也要有写权限才可以1 | setfacl -m u:testuserh:rwx /common |
日志分析
配置
1 | Default: log level = 0 |
1 | all。该参数是可选的:如果您不指定额外的关键字,假定使用 all。 |
成功登录
1 | [2021/09/11 03:58:39.242932, 2] ../../source3/auth/auth.c:329(auth_check_ntlm_password) |
失败登录
1 | [2021/09/11 04:05:06.906891, 3] ../../auth/gensec/spnego.c:1445(gensec_spnego_server_negTokenTarg_step) |