目的
linux中目前还比较常用的文件共享服务主要就是NFS和Samba,但其实NFS一般也就linux间用用,Samba通常是一个更加好的选择,可以方便的在linux和windows间进行文件共享。(现在还有一种WebDav也不错)
下面内容将以Raspbian进行介绍,同系列的发行版(Debian、Ubuntu、Minit、Deepin等)都可以参考下面的方式,不同系类的可能安装方式或包名称有所差异。我这里演示中Samba版本是4.9.5-Debian,不同版本下可能也会有所差异。
基础使用
软件包安装
在Raspbian中可以使用下面命令安装Samba软件包: sudo apt install samba smbclient
如果没有发现软件包请尝试更新: sudo apt update
后面使用中有问题可以尝试用下面命令: sudo ap install acl attr samba samba-dsdb-modules samba-vfs-modules winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user
独立服务器
Samba当服务器使用时可以工作在多种模式下,最常用的就是作为独立服务器(standalone server)使用,这里也将以此作为基础进行介绍。Samba当服务器使用最主要的就是对 /etc/samba/smb.conf 文件进行配置,默认情况下该文件大概是这个样子的:
[global]
server role = standalone server
unix password sync = yes
map to guest = bad user
;[homes]
; comment = Home Directories
; browseable = no
; read only = yes
; create mask = 0700
; directory mask = 0700
; valid users = %S
[printers]
...
[print$]
默认的smb.conf文件注释很详细,基本上只要能了解 以 # 和 ; 开头的都是注释 , 以 [global] 起始的段落都是全局参数配置 , 剩下的 以 [] 标签为首的段落是一条分享规则 这三条规则就行。我们想要分享目录也只要编写一个以 [] 标签为首的段落就行。
使用下面配置是一个最简单的Samba共享示例:
[global]
map to guest = bad user
[guest]
path = /home/pi/Desktop/guest/
read only = no
guest ok = yes
每次更改smb.conf文件后可以使用 testparm 指令测试该文件的参数是否符合规范,以及显示文件中起效的参数: 上面配置中配置了可匿名登陆并且可写入的权限,但读写权限还和目录本身的权限有关: 完成设置以后可以使用 smbd 让Samba服务套用更改: 上面就是Samba最基本的使用了,随便输个用户名就可以访问了,也不需要密码,如果只是自己的内网中自己用用这样就可以了,如果是在公共环境的话通常来说最好还是设置上账号密码这些。
使用Samba分享目录时如果需要设置访问的账号,这个账号首先得是这台设备上已经有的账号,使用 sudo smbpasswd -a 命令可以将已有的用户添加到Samba数据库: 使用下面配置是一个最简单的需要账号密码的Samba共享示例:
[global]
; map to guest = never
[share]
path = /home/pi/Desktop/share/
read only = no
上面两个是最简单的例子了,实际使用中我们可能还会对不同用户设置不同的共享目录等,比如下面这样:
[global]
map to guest = bad user
[guest]
path = /home/pi/Desktop/guest/
read only = no
guest ok = yes
[share]
path = /home/pi/Desktop/share/
read only = no
[naisu]
path = /home/pi/Desktop/naisu/
read only = no
valid users = naisu
这里我使用 sudo useradd -M -s /sbin/nologin naisu 创建了一个没有home目录,且不允许登陆的名为naisu的用户,然后使用 sudo smbpasswd -a naisu 将它添加到samba中,然后进行测试(windows中删除已登录的smb账号有点纠结,下面没能完整测试不同账号的情况): smb.conf文件可设置的参数非常多,可以通过 man smb.conf 来查看。更多内容可以参考下面链接: https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server
作为Samba服务器我们可以使用 sudo smbstatus 来查看客户端接入情况。
客户端
在linux中可以使用smbclient完成samba所有客户端功能,但通常我们只是用 smbclient -L //IP地址 -U 用户名 或者 smbclient -L //IP地址 -U 用户名%密码 的方式来查看某个服务器分享的情况: 访问samba服务共享目录我们可以使用 mount -t cifs //IP地址/目录 /挂载点 -o username=,password= 方式来挂载,同样的卸载就是用 umount了:
总结
Samba具体的功能选项等非常多,更多内容可以参考下面链接: https://www.samba.org/samba/ https://wiki.samba.org/index.php/Main_Page http://cn.linux.vbird.org/linux_server/0370samba.php#smbpasswd
|