Linux搭建Samba共享文件服务器(一)

系统:centos7
服务器ip:172.16.0.145

版本:Samba4.4.4

用途:给windows客户端共享存取用,为了以后linux客户端也能使用,所以安装成Samba.

1、安装samba
sudo yum install samba

可以看到版本是4.4.4,和我在官网上看到的最新版4.6.7相差不是很旧,那就决定通过yum来安装了,毕竟还可以解决掉依赖包。
就这样就安装成功了,重要的是对samba的配置!

2、配置samba
1). 备份Samba的配置文件:sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
2). 修改vim /etc/samba/smb.conf 在文件末尾添加上:

[ulok]
comment = ulok
path = /data/ulok
writable = yes

(注:实验最后这条会变成 read only = no ,所以感觉也可以直接改read only = no)

(再注:原来是测试显示的语句和配置文件里写的是可以不一样的,所以还是writable = yes吧)

保存。
从上面简单的配置就可得知,我准备在/data/ulok目录下开个共享给ulok用户。
所以我得在服务器上建立这个目录和用户,来做好准备。

sudo useradd -d /data/ulok -M -s /sbin/nologin ulok
#以上为建立ulok用户,-M不生成家目录,-s /sbin/nologin 不给登录系统的权限,
-d /data/ulok 指定的是登入时的初始目录,其实感觉也不用设这个(相当于家目录且已经不允许登录了)
sudo passwd ulok 虽然ulok用户不用来登陆系统,但安全起见,还是起个复杂密码。
sudo mkdir /data/ulok 创建ulok目录,注意这个时候的ulok目录属主是root,权限是755的。回头可能需要改。

3). Samba的所有用户都必须是系统(/etc/passwd)里已存在的用户。
授权系统用户访问Samba,命令:
sudo smbpasswd  -a   ulok  #添加用户ulok到Samba用户数据库中
这条命令输入完后,会提示为新建的用户ulok设置访问密码。
sudo systemctl restart smb 重启一下smb服务生效。

4) 很多时候还需要关闭SELINUX和设置Iptables规则:

setenforce 0 (临时关闭SELINUX)
然后为以后着想再vim 修改 /etc/selinux/config配置,将SELINUX=enforcing 改为 disabled。

如果不想关闭SELINUX的话还可以这样做,单独放行samba
setsebool -Psamba_enable_home_dirs on
setsebool -Psamba_export_all_rw on

getsebool  -a  | grep  samba 查看有关sabma的是不是全都on了。

我关闭SELINUX后就能通过ulok用户和它的samba密码连接上服务器的ulok目录了。
只是这个时候还没有权限去做更多的事情。

先补充一下要是不想关闭iptables的话,要加那些规则进去
依次在命令行敲…
iptables -I RH-Firewall-1-INPUT 5 -m state –state NEW -m tcp -p tcp –dport 139 -j ACCEPT
iptables -I RH-Firewall-1-INPUT 5 -m state –state NEW -m tcp -p tcp –dport 445 -j ACCEPT
iptables -I RH-Firewall-1-INPUT 5 -p udp -m udp –dport 137 -j ACCEPT
iptables -I RH-Firewall-1-INPUT 5 -p udp -m udp –dport 138-j ACCEPT
iptables-save
service iptables  restart
可以看到主要用的是tcp 139和445端口,还有udp的137和138端口。

5). 将/data/ulok 目录的属主属组等权限设置好。
sudo chown ulok:ulok /data/ulok (如果不是空文档,可以-R递归)

然后再在windows客户里测试通过URL方式连接,成功,创建文件也成功。

在windwos地址栏输入 \\172.16.0.145\ulok
第一次连接会弹出用户和密码输入框,输入完成就ok了。
为方便可以做成映射在windows的虚拟驱动器上。

最后建议更改完smb.conf的话用命令可以测试一下配置正确与否
敲testparm

如图,按回车,会列出配置
# Global parameters
[global]
workgroup = SAMBA
printcap name = cups
security = USER
idmap config * : backend = tdb
cups options = raw

[homes]
comment = Home Directories
browseable = No
inherit acls = Yes
read only = No
valid users = %S %D%w%S

[printers]
comment = All Printers
path = /var/tmp
browseable = No
printable = Yes
create mask = 0600

[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
create mask = 0664
directory mask = 0775
write list = root

[ulok]
comment = ulok
path = /data/ulok
read only = No
——————————————–

注:详细的多用户共享一个目录,然后分不同权限设置打算下一次实验再做。理论上也是与linux上的分配权限相关,会比windows更灵活可靠,因为还有粘滞权限等。

再注:后面发现用户新建的文件如果有执行权限,对服务器是一个很大的安全隐患,
所以配置文件至少得补上create mask = 0660 表示用户新建的文件都不会有执行权限才行。不然默认就会是744权限。

后面发现别的用户可以只有读取的权限也能复制文件到本地客户端,所以为了安全和限制,权限要对其它用户设置为0!
也就是660的权限。
而如果不想在共享的根目录下直接看到其他部门的共享目录,还得在配置文件上配置上browseable = no
public = no。
以后要进这个目录得输全绝对路径。

最后的配置文件为安全起见更改成:
[ulok]
comment = ulok
path = /data/ulok
writable = yes
create mask = 0660
directory mask = 0770
browseable = no
public = no

目录权限chmod更改为3770
sudo chmod 3770 /data/ulok
至于子文件就不好直接递归全改了,因为你子目录要是改成6的话是没有了执行权限就看不到里面的内容了。

之后再sudo systemctl restart smb 重启一下服务。

文:铁乐与猫
2017-8-18至8-22修订

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5 × 2 =