smb环境

点击这里在哔哩哔哩bilibili在线观看配套的教学视频

点击跳转到smb课程所有目录

1 内核server搭建

请查看smb server (ksmbd)

2 用户态server搭建

安装用户态工具:

apt-get install samba -y # debian
dnf install samba -y # fedora

用户操作(优先用pdbedit而不是smbpasswd):

pdbedit -L # 查看cifs用户
pdbedit -Lw # -w: 使用旧版的 smbpasswd 格式显示
pdbedit -a -u root # -a: 新增,这里的用户名必须是系统用户名(在/etc/passwd中有)
smbpasswd -a root # 添加用户,这里的用户名必须是系统用户名(在/etc/passwd中有)
# 如果 smbpasswd -a 添加用户test失败,就要先创建系统用户test
useradd -s /bin/bash -d /home/test -m test
pdbedit -x -u root # 删除用户
smbpasswd -x root # 删除用户
smbpasswd -s root # 修改密码,显示密码
smbpasswd root # 修改密码,不显示密码
smbpasswd -n root # 设置成没密码, 但挂载时好像还是需要密码,以后再看为什么吧

编辑/etc/samba/smb.conf配置文件(不区分大小写),具体参数用法查看man 5 smb.conf:

[global]
# 注意注释要单独一行,不能加在配置内容后面
# 通过 man smb.conf 查看
server min protocol = NT1
# 以下3行表示用smbpasswd修改密码时也会修改/etc/shadow密码
unix password sync  = yes
passwd program      = /usr/bin/passwd %u
pam password change = yes

[TEST]
    # browseable = yes
    # 如果无法访问,create mask可以设置为0770或0777(但不建议)
    # create mask = 0700
    # 如果无法访问,directory mask设置为0770或0777(但不建议)
    # directory mask = 0700
    # valid users = sonvhi
    # available = yes
    # guest ok = no
    comment = xfstests test dir
    path = /tmp/s_test
    public = yes
    read only = no
    writeable = yes

执行脚本samba-svr-setup.sh启动用户态的samba server。

文档查看/usr/share/doc/samba*

如果windows和macOS客户端无法访问Linux的文件夹,Linux可能需要再进行以下步骤:

sudo firewall-cmd --permanent --add-service=samba   #(允许samba服务)
sudo firewall-cmd --permanent --add-service=samba-dc    #(允许samba-dc服务,可能不需要操作)
sudo setsebool -P samba_enable_home_dirs on     #(把用户目录的samba功能使能,可读写)
sudo firewall-cmd --reload      #(防火墙重新加载配置)
sudo systemctl stop firewalld.service   #(关闭防火墙)
sudo systemctl disable firewalld.service    #(开机不启动防火墙)
sudo firewall-cmd --get-services # 查看所有的service
sudo firewall-cmd --list-services # 查看已添加的service
sudo systemctl restart smb.service      #(重启samba服务)

3 smb客户端环境

3.1 Linux客户端

安装所需工具:

apt install cifs-utils -y # 安装 cifs 客户端, 否则无法挂载
dnf install cifs-utils -y # fedora
apt install smbclient -y # 查询服务器共享了哪些目录

测试:

smbclient -L //127.0.0.1 -U root
smbclient //127.0.0.1/TEST -U root # 然后用help查看帮助,ftp的语法
nmblookup -U 192.168.53.209 netbios_name
nmblookup -S netbios_name

挂载命令:

getsebool -a | grep samba
setsebool -P samba_enable_home_dirs=1
# 选项: password=密码,iocharset=本机编码(如big5、utf8、cp950),codepage=远程主机编码
mount -t cifs -o username=root,vers=1.0,cifsacl //localhost/TEST /mnt
mount -t cifs -o username=root,mfsymlinks,vers=2.0,cifsacl,nocase //localhost/TEST /mnt
mount -t cifs -o username=root,mfsymlinks,vers=2.1 //localhost/TEST /mnt
mount -t cifs -o username=root,mfsymlinks,vers=3.0 //localhost/TEST /mnt

错误日志请查看/var/log/samba/log*

3.2 Windows和macOS客户端

Windows系统下,在Windows资源管理器中输入 \\192.168.122.1\TEST就可访问Linux系统的文件。

macOS系统下,在Finder中按快捷键cmd+k,跳出Connect to Server窗口,输入smb://192.168.122.1/TEST就可访问Linux系统的文件。