说明参考

https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server

安装

1
sudo apt install -y samba smbclient

服务

1
systemctl enable smbd nmbd

加防火墙(没墙跳过)

1
2
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload

安装工具

1
sudo apt -y install policycoreutils-python-utils

创建共享目录

1
mkdir /var/netdisk/

配置权限

1
2
3
groupadd netdisk
chgrp netdisk /var/netdisk/
chmod 2775 /var/netdisk/

检查一下默认的SELinux

不开启SELinux时跳过带(SElinux)的配置。

1
ls -dZ /var/netdisk

将samba_share_t上下文类型应用于组共享(SElinux)

1
semanage fcontext -a -t samba_share_t "/var/netdisk/"

让samba可以创建新的主目录(SElinux)

1
setsebool -P samba_create_home_dirs=1

要使用Samba共享NFS文件系统(SElinux)

1
setsebool -P samba_share_nfs=1

写入权限(SElinux)

1
setsebool -P allow_smbd_anon_write=1

配置Samba

1
vim /etc/samba/smb.conf
1
2
3
4
5
6
7
8
9
10
11
12
[netdisk]
comment = netdisk share
path = /var/netdisk/%U/root/
writable = yes
browseable = yes
printable = no
guest ok = no
write list = @netdiskuser
read list = @netdiskuser
valid users = @netdiskuser
create mask = 0770
directory mask = 0770

测试配置

1
testparm -s

输出Loaded services file OK
其它输出与配置文件一致则配置正确

查看目录(SElinux)

1
ls -dZ /var/netdisk/

修改目录(SElinux)

1
chcon -t samba_share_t /var/netdisk/

创建samba用户

1
useradd -s /sbin/nologin -g netdisk samba

samba创建密码

1
passwd samba

启动服务

1
systemctl start smbd nmbd

使用脚本sambadduser.sh创建测试用户dev2

1
./sambadduser.sh x "dev2 dev2"

sambadduser.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
if [ ! "$2" ];then
echo "arg2 is empty"
exit 0
fi
n=`echo $2 | cut -d ' ' -f 1`
p=`echo $2 | cut -d ' ' -f 2`

useradd -s /sbin/nologin -g netdisk $n
(echo $p;echo $p) | smbpasswd -s -a $n
mkdir -m 0770 "/var/netdisk/${n}"
mkdir -m 0770 "/var/netdisk/${n}/root"
mkdir -m 0770 "/var/netdisk/${n}/cache"
chown "${n}:netdisk" "/var/netdisk/${n}"
chown "${n}:netdisk" "/var/netdisk/${n}/root"
chown "${n}:netdisk" "/var/netdisk/${n}/cache"

测试用户dev2

1
smbclient //localhost/netdisk -U dev2

火苗999℃

使用脚本smbdeluser.sh删除测试用户dev2

1
./smbdeluser.sh x "dev2"

smbdeluser.sh

1
2
3
4
5
6
7
8
9
#!/bin/bash

if [ ! "$2" ];then
echo "arg2 is empty"
exit 0
fi
smbpasswd -x $2
userdel -r $2
rm -rf /var/netdisk/$2/