Linux smb共享服务器搭建 发表于 2022-01-11 浏览量 601 没有评论 # 简介 Samba是种自由软件,用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协定做连结。在目前的版本(v3),不仅可存取及分享SMB的资料夹及打印机,本身还可以整合入Windows Server的网域、扮演为网域控制站(Domain Controller)以及加入Active Directory成员。简而言之,此软件在Windows与UNIX系列OS之间搭起一座桥梁,让两者的资源可互通有无。 # 安装 `yum install samba -y` # 配置文件 ``` [global] workgroup = WORKGROUP # 设置工作组 netbios name = Ewain # netbios名 security = user # 安全级别,共有四个 map to guest = bad user #设置public可以进去,不需要用户认证 passdb backend = tdbsam # 用一个数据库文件来建立用户数据库,具体可以百度。 printing = cups printcap name = cups load printers = yes cups options = raw [homes] comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes [tool] comment = Tool path = /data/bbs public = yes writable = yes guest ok = yes write list = +staff [quanxian] # 定义共享名字 comment = test # 描述符,给管理员自己看得 path = /data/xx # 共享的路径,需要存在,并有权限 valid users = ou # 指定哪些用户可以访问,如果不指定则所有用户都可访问 printable = no # 是yes/否no允许打印 create mask = 0755 # 建立文件时所给的权限 directory mask = 0755 # 建立目录时所给的权限 veto files = /*.mp3/*.mp4/*.rmvb/*.wma/*.exe/*.bat/*.dll/*.avi/*.rar #设置禁止上传的文件类型 ``` ## 配置回收站♻️,在单个文件夹设置,就对当前文件夹生效,如果在global 则是全局生效。 ``` vfs object = recycle recycle:repository = /data/bbs/%u #指定该共享文件夹的回收站目录 %U是按登录的用户名分开存放,需要确保此文件夹存在,并有写入权限! recycle:keeptree = Yes #指定是否按删除时的目录结构存放 recycle:versions = Yes #指定是否区覆盖同名的文件,yes是不覆盖 recycle:maxsixe = 0 #指定回收站目录的大小,0是不限制 recycle:exclude = *.tmp|*.mp3 #不放入回收站的文件类型 recycle:noversions = *.doc #指定覆盖同名文件的文件类型 ``` # 注意事项: 1.回收站文件夹的用户和用户组设置, 权限设置要和共享文件夹的设置是一样的, 如果不一致被删除的文件是无法保存到回收站文件夹 2.如果maxsize设置为0, 那么回收站的文件需要管理员手工去删除. 当然, 可以将删除文件的任务交给计划任务去完成,如: ``` vim /etc/crontab 30 8 * * * root find /samba/deleted/ -mtime +30 -exec rm -rf {} \; #设置每天8:30 删除回收站内大于30天的文件 ``` # 添加用户 - 以上配置文件中设置了tdbsam方式,passdb backend = `tdbsam`,还有其他几种方式,这里不演示! 该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。 passdb.tdb用户数据库可以使用`smbpasswd –a` 来建立Samba用户,不过要建立的Samba用户必须先是系统用户。 ``` 修改已经存在的用户使其不允许登录: usermod -s /sbin/nologin 新建用户不允许登录: useradd -s /sbin/nologin smbpasswd -a 用户名 #添加一个samba用户 smbpasswd -d 用户名 #禁用一个samba用户 smbpasswd -e 用户名 #恢复一个samba用户 smbpasswd -x 用户名 #删除一个samba用户 ``` # linux上挂载smb服务 - 1、在 Linux 下安装 samba-client 客户端 # `yum install samba-client` - 2、安装 cifs-utils 软件包 # `yum install cifs-utils` - 3、在 Linux 下创建一个挂载点 # `mkdir /mnt/Windows` - 4、自动挂载 ``` [root@test2 ~]# mount -t cifs -o username=ou //172.16.7.220/quanxain /mnt/smb/ Password for ou@//172.16.7.220/quanxain: ******* [root@test2 ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 486M 0 486M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 32M 464M 7% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup /dev/sda5 48G 4.1G 44G 9% / /dev/sda2 297M 114M 183M 39% /boot tmpfs 100M 0 100M 0% /run/user/0 //172.16.7.220/quanxain 48G 4.2G 44G 9% /mnt/smb //挂载成功 ``` # 排查 ``` 如果linux挂载显示:host is down //在用户后面添加vers=2.0即可! [root@test2 ~]# mount -t cifs -o username=ou,vers=2.0 //172.16.7.220/quanxain /mnt/smb/ netstat -na | grep ESTABLISHED 查看哪些用户连接到了samba服务器 cat /var/log/samba/log.smbd 可以为每个连接的samba用户设置单独的日志文件 ``` # 备份脚本 ``` [root@smb_611:/shell]$ cat smb_rsync.sh #!/bin/bash # 结合 crontab 自动备份samba服务的数据到/backup文件夹下,实现增量备份。 ouge="xxx@163.com" #定义变量 readonly 表示只读变量,在脚本内再次定义无效。 readonly SOURCE_DIR="/data/smb/" # 定义源文件路径 # DATETIME=`date '+%Y-%m-%d_%H:%M:%S'` readonly BACKUP_DIR="/backup/" # 定义备份文件路径 # 定义时间格式化 # 创建文件夹 # mkdir -pv "${BACKUP_DIR}" # 同步文件夹,第一次会全量备份,之后会增量备份 rsync -av "${SOURCE_DIR}" "${BACKUP_DIR}" if [ $? -gt 0 ];then echo "backup file fail,plaese check !!" echo "611_nas_backup_fail!! please check script" | mail -s "611_nas_backup" $ouge #else # echo # echo "success" # echo "611_nas_auto_backup_success!" |mail -s "611_nas_backup" $ouge #fi fi ``` # 删除大于30天的文件并通知管理员 ``` #!/bin/bash find /data/.recycle/ -type f -mtime +30 -exec rm -f {} \; ouge="ouyuanhui@izkun.com" if [ $? -gt 0 ];then echo "611_nas_recycle_delete_fail!please check script" | mail -s "611_nas_recycle_delete_fail" $ouge else echo "611_nas_recycle_delete_success!" | mail -s "611_nas_recycle_delete" $ouge fi ``` # 计划任务 ``` [root@smb_611:/shell]$ crontab -l 0 0 * * 0 /usr/bin/bash /shell/recycle.sh >> /data/log/recycle.log 2>&1 0 0 * * * /usr/bin/bash /shell/smb_rsync.sh >> /data/log/smb_rsync.log 2>&1 ```