Linux基本知识点总结——Samba
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。
以下通过两个基础实验来学习samba,实验平台为CentOS 6.2,环境为:
Samba服务器
主机名:luffy IP地址:192.168.56.53
客户端测试机
主机名:zoro IP地址:192.168.56.54
实验一
假设公司有一台samba服务器,提供了一个共享名为/share的共享目录,现在要求只允许192.168.56.0网段的用户可以使用自己的samba帐户登录此目录,并可读写,但不允许动别人的资料。
一、准备工作
1.创建用户user1、user2,并在根目录下创建共享文件夹share及其共享文件,其中share的文件夹属性为777。
创建结果如下:
[root@luffy ~]# cat /etc/passwd
……省略部分内容……
user1:x:502:502::/home/user1:/bin/bash
user2:x:503:503::/home/user2:/bin/bash
[root@ luffy ~]# ls -l /share
total 8
-rw-r--r--. 1 root root 4 May 24 06:41 a
-rw-r--r--. 1 root root 4 May 24 06:41 b
[root@ luffy ~]# ls -ld /share
drwxrwxrwx. 2 root root 4096 May 24 06:41 /share
2.安装samba软件
[root@luffy ~]# yum install samba*
Samba*涉及到的组件是samba,samba-common,samba-client
其中samba必需安装,后面两个在装系统时其实已默认安装(因此其他linux客户端可以直接使用smbclient命令访问samba的共享文件夹)。
3.添加samba用户
Samba中添加的用户,必须是samba服务器所在系统中预先创建的,但该用户登录samba时使用的密码,需由samba创建并保存。
使用到的命令是smbpasswd,参数-a表示添加用户,-x表示删除用户,-d表示禁用用户。
下面将user1和user2加入到samba中,
[root@ luffy ~]# smbpasswd -a user1
New SMB password:
Retype new SMB password:
Added user user1.
[root@ luffy ~]# smbpasswd -a user2
New SMB password:
Retype new SMB password:
Added user user2.
二、配置共享
在服务器SELinux开启(Enforcing状态)的情况下,进行以下实验。
1.在samba主配文件/etc/samba/smb.conf末尾添加以下内容:
1 2 3 4 5 6 | [share] comment = sharefile #描述信息 path = /share #指定共享文件夹的路径 hosts allow = 192.168.56. #允许访问该目录的网段 browseable= yes #可浏览 writable = yes #可写 |
注,hosts allow字段如果不写,则表示所有可访问该服务器的客户端都可访问该共享目录。在本实验和许多实际环境中,都是内网共享,只有同网段的内网用户才可访问,“hosts allow=本网段”其实不需要写。
另外,主配文件第100行附近,
1 2 3 | security = user #smb passwd file = /etc/samba/smbpasswd passdb backend = tdbsam |
表示,当前(默认)使用的是user认证方式,即客户端需要有samba中记录的用户及其密码才能登录,如果是security = share,则表示采用匿名登录方式。
配置修改完成后,重启samba服务,
[root@luffy ~]# service smb restart
客户端访问时,报错:
[root@zoro ~]# smbclient //192.168.56.53/share -U user1
Enter user1's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.9-151.el6]
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \*
40317 blocks of size 262144. 31467 blocks available
smb: \> quit
没有访问权限,是由于请求被selinux拦截了。
(注:如果是出现NT_STATUS_BAD_NETWORK_NAME的报错,大概是因为主配文件中定义共享文件块时,中括号里的名字出错,访问路径//192.168.56.53/share中的share不是指根目录中的share文件夹,而是主配文件中自定义的[share]中括包内的share。)