安装及测试环境ubuntu10.04 / windows 7
Note:
在windows7中可能无法正常访问共享的文件夹,需要修改本地安全策略,步骤如下:
开始-运行-输入:secpol.msc-打开本地安全策略,依次打开“本地策略”-“安全选项”找到“网络安全:LAN管理器身份验证级别”,双击,将选项的值改为“发送LM和NTLM-如果已协商,则使用NTLMv2会话安全”,最后确定重新登陆共享文件夹即可。
1. 首先安装samba
sudo apt-get install samba smbfs
2. 创建一个文件夹用来共享文件,例如在home目录下创建share文件夹
Sudo mkdir /home/share
3. 更改该文件夹权限为可写可读可执行
注意:此处给予最大权限是便于ununtu在该文件夹中进行添加文件等操作,samba远程登录用户的权限将在后面的步骤中设定
sudo chmod 777 /home/share
4. 编辑samba配置文件/etc/samba/smb.conf
a. 首先,备份配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
b. 开始编辑配置文件
sudo gedit /etc/samba/smb.conf
首先查找到#security = user这一行,然后用下面两行取代
security=user
username map=/etc/samba/smbusers
然后查找到[global] 在workgroup = WORKGROUP 后面加入如下几行代码,目的是为防止出现中文目录乱码。
display charset = UTF-8
unix charset = UTF-8
dos charset = cp936
接着跳转到配置文件的最后一行,将下面几行代码增加到文件最后面。假设允许访问的用户为new,而共享的文件夹为/home/share
[share]
comment = Shared Folder with username and password
path = /home/share
public = yes
writable = yes
valid users = new
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
available = yes
browseable = yes
保存并退出。
5. 为系统增加用户new
注意:此处只是增加了new这个用户,但是并没有给用户赋予登陆本机的密码,所以这个用户只能从远程访问,不能从本机登陆。如果要为new用户增加本机访问权限运行sudo passwd new为其设置登录密码即可。
sudo useradd new
6. 新增网络使用者账号并设定密码。
注意:此处设置的samba登陆密码与本机的登录密码无关,可以相同也可以不同。例如:1234
sudo smbpasswd –a new
7. 编辑文件etc/samba/smbusers
sudo gedit /etc/samba/smbusers
在文件中加入下面一行并保存
new = “user_1” #win7端使用该用户名登陆,以达到隐藏Linux用户的目的
8. 测试并启动samba
sudotestparm
[press ENTER]
sudo service smbd restart
sudo service nmbd restart
到此,配置结束。
测试:
在共享的文件夹中新增任意一个文件,在terminal中输入ifconfig记录下当前ubuntu的ip地址,例如:192.168.0.6。
在windows7系统中。按键win+R输入服务器的IP地址//192.168.0.6
此时可以看到共享的文件夹share双击,输入预先设定好的用户名和密码:user_1和1234
此时即可以看到share文件夹中所共享的文件了。
nfs和samba的优势和劣势对比
NFS(网络文件系统)是TCP/IP协议集提供的一种子协议,用于实现LINUX/UNIX主机之间的文件共享。优点是更简洁方便,原生,兼容性更好
Samba是一种基于LINUX/UNIX平台中利用SMB(服务信息块)协议,实现LINUX/UNIX与MS主机之间的文件及打印共享。优点是和windows集成,可以使用windows域
实现一个组的用户对特定文件夹的访问
通过编辑etc/samba/smbusers文件(该文件保存的是Linux系统账户与samba服务器账户的映射关系)可以为Linux系统账户创建访问samba服务器的虚拟账户(通常是对应Windows系统的多个账户),使他们之间建立映射关系,而且是一个Linux账户可以映射多个samba账户,即可以理解成这些账户组成一个用户组,组内的用户可以实现对特定的共享文件夹的访问。
建立映射关系的格式为:
Linux系统账户 = samba服务器账户_1 samba服务器账户_2 …
例如:将Linux系统账户new映射成samba账户user_group1_1和user_group1_2
new = user_group1_1 user_group1_2
根据以上原理,在上面测试内容的基础上新增用户组功能,使得每个用户组的用户只能访问特定的共享文件夹
1. 新增账户old
sudo useradd old
2. 设定其登陆samba服务器的密码。例如:输入4321
sudo smbpasswd –a new
3. 新建old账户所能访问的共享文件夹/home/share1
sudo mkdir /home/share1
4. 打开配置文件/etc/samba/smb.conf
sudo gedit /etc/samba/smb.conf
将以下代码添加至文件尾
[share1]
comment = Shared Folder with username and password
path = /home/share1
public = yes
writable = yes
valid users = old
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
available = yes
browseable = yes
5. 编辑文件etc/samba/smbusers
sudo gedit /etc/samba/smbusers
将文件的内容更改为以下代码并保存退出
new = user_group1_1 user_group1_2
old = user_group2_1 user_group2_2
6. 测试运行
sudotestparm
[press ENTER]
sudo service smbd restart
sudo service nmbd restart
通过以上修改可以实现group1(包括user_group1_1和user_group1_2两个samba账户)可以对home/share文件夹的内容进行访问。而group2(包括user_group1_1和user_group1_2两个samba账户)可以对home/share1文件夹内容进行访问。group1中所有账户的密码是1234,group2中所有账户的密码是4321.
不同访问权限的实现
下面通过编辑set/samba/smb.conf文件,实现账户new和old对相同文件夹的不同访问权限。
例如:共享文件夹为home/share,new对其可读可写,old对其只读。
在为系统添加new和old用户并分别设定密码之后,将set/samba/smb.conf文件尾修改为如下代码
[share]
comment = Shared Folder with username and password
path = /home/share
public = no
write list = @new
valid users = @new @old
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
available = yes
browseable = yes
此时即可实现账户new和old对相同文件夹的不同访问权限。