简介
日常工作中,我们常常遇到客户需要搭建一个文件服务器,来提供各种类型的文件保存之用。本篇是介绍如何在CentOS上搭建文件服务器系列文章的第一篇,主要是介绍搭建一个基于Samba协议的文件共享服务器,以及Linux桌面如何连接这些文件共享。
安装Samba
我们按照最小配置安装CentOS7,接着安装必须的软件。
sudo yum -y install epel-release sudo yum install -y nano samba samba-client
然后我们启用Samba。
sudo systemctl enable smb sudo systemctl enable nmb sudo systemctl start smb sudo systemctl start nmb
开启防火墙,samba使用TCP端口139和445,NetBIOS(nmb)使用UDP端口137,CentOS预定义了samba服务,包括这两项配置。
sudo firewall-cmd --permanent --zone=public --add-service=samba sudo firewall-cmd --reload
开放共享文件夹
开放共享文件夹,允许任何用户,无需账户和密码,就可以访问此只读资源。
我们首先创建一个用户群sharegroup,后续的文件夹权限和共享用户都要用到。
sudo groupadd smbuser
接下来在根目录创建一个开放共享文件夹, /shared/public,并且把group owner设置为刚才我们新增的smbuser,并且设置相应的群组继承属性,以后在shared目录下新建的文件和文件夹,都会自动继承smbuser为group owner。
sudo mkdir -p /shared/public sudo chgrp -R smbuser /shared sudo chmod -R 2775 /shared
CentOS缺省启用了SELinux,因此需要设置相应的SELinux策略。但是SELinux的context非常复杂繁琐,因此我们呢直接关闭了SELinux.
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config sudo setenforce 0
如果你不想禁用SELinux,可以按照以下方法配置SELinux策略。不过需要先要装一个应用semanage。
sudo yum install policycoreutils-python sudo semanage fcontext -a -t samba_share_t "/shared/public(/.*)?" sudo restorecon -R -v /shared/public/
为了方便管理,我们专门创建了一个不能登录shell的账户sadmin, 专门用于上传文件之用。
sudo useradd -M -s /usr/sbin/nologin -G smbuser sadmin sudo smbpasswd -a sadmin sudo smbpasswd -e sadmin
现在我们可以设置samba配置文件。照惯例,我们先备份它,然后直接用你熟悉的编辑器修改其内容。
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.original sudo nano /etc/samba/smb.conf
在配置文件中,增加以下内容:
[global] workgroup = WORKGROUP netbios name = filer map to guest = Bad User log file = /var/log/samba/%m log level = 1 security = user passdb backend = tdbsam [public] # This share allows anonymous (guest) access # without authentication! comment = Public folder path = /shared/public read only = yes guest ok = yes browseable = yes write list = sadmin
说明:
- netbios name,是你网络上看到的服务器名称
- map to guest = Bad User: 匹配任何不存在的用户为访客。这里我们设置共享文件为只读。
- write list = smbadmin: 仅限特定用户或者特定用户群组(@起头),用逗号间隔开
在重启smb服务前,可以用testparm检查配置是否合法。然后重启服务让新的配置生效。
sudo testparm sudo systemctl restart smb
最后, 在使用客户端做第一次连接之前,我们可以使用smbclient程序在本机进行测试。下面两个命令供参考,第二个“-U”选项是用于指定登录账户,拿掉后可以匿名访问。
smbclient -L localhost smbclient \\\\localhost\\public -U sadmin
Home文件夹共享
如果需要允许用户访问自己在Linux服务器上的Home文件夹,可以在smb.conf配置文件中增加一个share,如下所示。”valid users”限制了只有本人才能访问相应的Home文件夹。
[homes] comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes
启用SELinux的客户,还需要以下额外配置。
setsebool -P use_samba_home_dirs 1
Linux客户端挂载共享文件夹
Windows和MAC下挂载共享文件夹非常方便,网上也有很多资源,我们就不赘述了。这里只单独介绍一下如何在Linux下加载共享文件夹。
首先,安装相应的软件包。
sudo yum install samba-client cifs-utils -y
测试一下文件夹访问是否正常。
smbclient \\\\samba_hostname_or_server_ip\\sharename -U username
创建一个加载位置。
sudo mkdir /mnt/smbmount
挂载到上面创建的文件夹。
sudo mount -t cifs -o user=username,password=password, \ //samba_hostname_or_server_ip/sharename /mnt/smbmount
如果想要每次重启自动挂载,编辑/etc/fstab文件,在文件尾添加以下行。
//SERVER/sharename /mnt/smbmount cifs _netdev,user=username,password=password, 0 0