安装samba
要安装 Linux 文件服务器,我们需要安装三个包。
对于基于 Red Hat 的发行版,我们可以像这样安装它们:
$ dnf -y install samba
此软件包安装 SMB 服务器。
$ dnf -y install samba-common-tools
该软件包包括服务器和客户端所需的文件。
$ dnf -y install samba-client
对于基于 Debian 的发行版,我们可以像这样安装它们:
$ apt-get -y install samba $ apt-get -y install samba-common-tools $ apt-get -y install samba-client
然后就可以启动samba服务并在启动时启用它:
$ systemctl start smb $ systemctl enable smb
创建 Samba 用户
要为现有系统用户创建 samba 条目,请使用 pdbedit 命令:
$ pdbedit -a onitroad
新用户将在 Samba 默认用户数据库中创建,该数据库是
/var/lib/samba/private/passdb.tdb
文件。
创建 Samba 用户后,我们可以将共享仅提供给经过身份验证的用户,例如用户 onitroad。
该用户可以使用 smbclient 访问他在 Samba 服务器上的资源,如下所示:
$ smbclient -U onitroad -L //192.168.1.3
我们可以使用 smbpasswd 命令更改 SMB 密码,如下所示:
$ smbpasswd onitroad
挂载 Samba 共享
大多数 Linux 内核都支持 SMB 文件系统。
要挂载 Samba 共享,首先,创建一个挂载点:
$ mkdir /mnt/smb
然后我们挂载SMB共享文件夹:
$ mount -t cifs -o guest //192.168.1.2/My_Folder /mnt/smb
如果共享文件夹受密码保护,则键入用户名和密码:
$ mount -t cifs username=onitroad,password=mypassword //192.168.1.2/My_Folder
要卸载 SMB 共享文件夹,请使用如下卸载命令:
$ umount /mnt/smb
在基于 Debian 的发行版上,我们可能需要安装 cifsutils 包才能使用它:
$ apt-get -y install cifs-utils
Linux 文件服务器是功能强大的服务器之一,可与基于 Windows 的 PC 和其他操作系统共享文件和打印机。
在我们讨论使用 Samba 作为文件服务器之前,让我们先讨论一些基础知识。
访问 Samba 共享文件
现在我们需要访问我们共享的内容。
我们可以使用 smbclient 实用程序来访问 Windows 共享文件。
我们可以像这样列出共享文件:
$ smbclient -L localhost -U%
此处的 -U% 选项可避免询问密码。
如我们所见,我们的共享文件夹在列表中。
我们只需在 Windows 资源管理器中键入 IP 地址即可从 Windows 访问此共享文件夹。
\192.168.1.3\
我们可以使用 smbclient 工具列出特定目录,如下所示:
$ smbclient -U% //192.168.1.2/My_Folder
连接后,我们可以使用 Linux 命令来列出和在文件之间移动。
我们可以使用 get 、 put 、 mget 和 mput 命令传输文件。
如果我们使用的是 iptables 防火墙,请不要忘记允许端口 137,139 和 445.
Linux/Samba/Windows 关系
要了解Linux/Samba/Windows 的关系,我们需要了解操作系统、用户和网络的关系。
Linux登录系统不同于Windows登录系统。
因此,维护不同平台之间的登录是系统管理员的工作。
有几种解决方案可以做到这一点:
- Linux可插拔认证模块(PAMs):有两个用户列表,一个本地列表,一个在域控制器(DC)上,用户只需要在Windows系统上维护自己的密码。
- Samba 作为 DC:你在 Linux 系统上维护用户名和密码,用户可以使用 Samba 登录 Windows 机器
- 自定义脚本:我们可以创建用于维护登录名和密码的脚本;这可以使用像 Python 这样的跨平台脚本语言来完成。
由几个组件和守护进程组成的 samba 服务器;三个主要的守护进程是 smbd 、 nmbd 和 winbindd 。
- smbd 守护进程是共享文件和打印机的主要服务。该守护进程使用端口 139 或者 445 来侦听请求。
- nmbd 守护进程处理 NetBIOS 名称服务请求。这个守护进程使用端口 137 来监听请求。
- winbindd 从 Windows 获取用户和组信息。
使用 Windows 服务器验证用户
我们可以使用 winbindd 守护程序来解析来自本机 Windows 服务器的用户帐户信息。
首先,安装 winbind 包。
$ dnf -y install samba-winbind
然后像这样启动服务:
$ systemctl start winbind
之后,在此文件中添加以下选项:
/etc/samba/smb.conf
workgroup = windows-domain password server = 192.1638.1.5 realm = windows-domain.com kerberos method = secrets and keytab winbind use default domain = yes winbind enum users = yes winbind enum groups = yes winbind refresh tickets = yes winbind normalize names = yes winbind nss info = rfc2307 domain master = no local master = no
然后编辑 /etc/nsswitch.conf 文件并修改以下几行:
passwd: files winbind shadow: files winbind group: files winbind
然后编辑 /etc/resolv.conf 文件并更改主 DNS 服务器:
Search windows-domain.com nameserver 192.168.1.5
现在使用 net 命令从 Windows 域加入 Linux Samba 服务器:
$ net join -w WINDOWS-DOMAIN -s ' win-server' -U Administrator%password
我们可以使用 wbinfo 命令列出 Windows 域中的用户
$ wbinfo -u
对于任何问题诊断,我们可以检查下的 samba 日志文件
/var/log/samba/
目录,也可以在修改 samba 配置文件后,使用 testparm 实用程序检查配置。
samba文件共享
当然,我们可以使用基于 Web 的或者 GUI 实用程序来管理 Linux 文件服务器。
但是,从背后了解 GUI 或者 Web 工具正在做什么是很有用的。
现在我们将共享一个名为 myfolder 的文件夹:
$ chmod -R 755 myfolder
打开 Samba 配置文件
/etc/samba/smb.conf
并在最后添加以下几行:
[onitroad] path=/home/onitroad/Desktop/myfolder public=yes writable=no guest ok=yes
第一行是客户端看到的 Samba 服务器名称。
第二行是要共享的文件夹的路径。
第三行表示所有用户(如访客帐户和其他用户)都可以使用共享。
如果设置为 no,这将只允许经过身份验证和允许的用户。
第四行表示我们不能在共享文件夹中创建或者修改存储的文件。
我们可以使用 testparm 命令检查 SMB 配置错误:
$ testparm
现在重启 SMB 服务:
$ systemctl restart smb