|
Samba 文件服务器用户复杂权限模型设计和实现 v0.1b 作者:北南南北
来自:LinuxSir.Org
摘要:如何构建比较复杂权限模型的Samba文件服务器,可能是一些新手所面对的问题。本文通过简单的实例,引导新手弄明白如何在五分钟之内解决Samba复杂权限的构建和扩展。炒作一下,仅需要五分钟!
++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++
1、前言;
现在Linux桌面环境极其强大,如果在桌面环境下,点点鼠标,就完全能解决几乎所有的服务器架设问题。对于复杂权限模型的Samba文件服务器,还是有点不太明白。我就借这篇文章来说几句。虽然Samba文件服务器的文档堆积如山,但我写的这篇能算做技巧或提示,或许对一些弟兄有点用;高手来拍砖,我开门欢迎中~
如果你是Linux初学者,不会创建用户,不会用编辑器,不会安装软件包之类的, 请参考:《一步一学Linux与Windows 共享文件Samba》 。在这篇中有收集和整理,谢谢~
2、Samba 文件服务器是什么;
Samba 文件服务器就是Windows的文件共享服务器,就是网上邻居那个东西,现在是CIFS文件系统;
3、复杂权限用户模型和文件系统构建示例;
比如我想构建如下的权限模型:
3.1 文件系统结构规划;
在这个文件系统上,我们要让所有用户都有统一的路径入口;在Windows文件浏览器中,我们要通过\\IP或域名\共享目录名查看,而在Linux的Gnome文件浏览器中查看的方式是 smb://域名或ip地址/共享目录名。而我们让所有用户都通过唯一的地址进入共享文件系统。
/linuxsir (注:Samba文件系统中共享目录名)
|
|───/管理部 (管理部成员的家目录)
| |_______/sirmas01 (注:管理成员sirmas01的家目录sirmas01)
| |_______/sirmas02 (注:管理成员sirmas0202的家目录sirmas02)
|
|─── /software (注:软件共享目录,只有管理部成员或更高权限的管理员能管理)
|
|─── /公共文档 (注:所有用户都能查看的文档,只有管理部用户sirmas01和sirmas02有写入权限,进行文档管理)
|─── /共享可写 (注:所有用户都能在此目录下写入文件,sir03或sir04用户可以进行管理,或文件服务器管理员权限用户进行管理)
|─── /成员 (注:公司员工的家目录存放地,每个成员在此目录下都有自己的家目录)
|────|_______/sir03 (注:sir03用户的家目录)
|────|_______/sir04 (注:sir04用户的家目录)
我们先看个图,以Windows下的文件系统管理器所看到的Samba文件系统为例;根据上面目录的规划,我们看到的应该是这样的目录结构;
![](http://www.linuxsir.org/main/files/smb001linuxsir.jpg)
3.2 文件示例的说明;
根据3.1 的文件系统结构的规则,我们来简单说一下,这个文件系统要实现什么功能;
1]所有用户的统一登录入口都是 linuxsir 目录;
2]管理部目录:管理部目录下设sirmas01和sirmas02目录。管理部成员sirmas01和sirmas02的私有目录设置在 管理部目录下的sirmas01和sirmas02的目录中,并且siradm01和siradm02这两个用户的目录是私有的,也就是说siradm01用户能查看但不能写入siradmin02所有的目录siradm02。相反同理;管理部成员sirmas01和sirmas02用户能管理/software , /公共文档 , /共享可写, /成员 目录;
3]software 目录:这个目录是存放软件的仓库,sirmas01用户和sirmas02用户拥有管理权,对任何用户(包括匿名用户)都有读的权限;
4]公共文档 目录:这个目录是存放公司公用文件的地方,比如各种制度和文档模板之类的。sirmas01用户和sirmas02用户拥有管理权,对任何用户(包括匿名用户)都有读的权限;
5]成员 目录:成员目录下有sir03和sir04目录,sir03和sir04目录,归属于公司员工sir03和sir04所有,并可以写入。sir03的sir04用户无权查看或写入彼此的目录;
6]共享可写 目录:共享可写目录,是让所有成员都可写入,但管理权在管理部成员手中;
这样看来, 一个相对复杂的权限模型就构建起来了。而且条理也比较清晰。用户统一入口也确立了。这样在Samba配置文件也比较简单了;
4、 用户和权限说明;
siradm 总管理员,可以拥有Samba文件系统的共享目录linuxsir的所有权限,包括删除、写入等操作……
sirmas01 管理员权限,可以除了不能操作sir02的私有目录以外,其它都可操作,包括删除、写入、查看……
sirmas02 管理员权限,可以除了不能操作sir01的私有目录以外,其它都可操作,包括删除、写入、查看……
sir03 普通用户:除了能操作属于自己的的私有目录 [sir03] 目录以外,在·[共享可写]目录下拥有写入权,在 [software] , [公共文档]下仅有查看权。对[管理部]目录并没有查看和写入权;
sir04 普通用户: 和sir03用户类似;
5、 创建目录、用户、用户组及设置权限;
5.1 创建目录
root@beinanIBM:/home# mkdir -p /home/samba/管理部/sirmas01
root@beinanIBM:/home# mkdir -p /home/samba/管理部/sirmas02
root@beinanIBM:/home# mkdir /home/samba/software
root@beinanIBM:/home# mkdir /home/samba/共享可写
root@beinanIBM:/home# mkdir /home/samba/公共文档
root@beinanIBM:/home# mkdir -p /home/samba/成员/sir03
root@beinanIBM:/home# mkdir /home/samba/成员/sir04
5.2 创建用户和用户组;
root@beinanIBM:/home# groupadd siradm
root@beinanIBM:/home# groupadd sirmas
root@beinanIBM:/home# groupadd siruser
root@beinanIBM:/home# useradd -g siradm -G sirmas,siruser -d /home/samba -s /bin/false siradm
root@beinanIBM:/home# useradd -g sirmas -G sirmas,siruser -d /home/samba -s /bin/false sirmas01
root@beinanIBM:/home# useradd -g sirmas -G sirmas,siruser -d /home/samba -s /bin/false sirmas02
root@beinanIBM:/home# useradd -g siruser -d /home/samba -s /bin/false sir03
root@beinanIBM:/home# useradd -g siruser -d /home/samba -s /bin/false sir04
5.3 对相关目录归属和权限;
root@beinanIBM:/home# ls -l |grep samba
drwxr-xr-x 5 root root 128 2007-07-13 14:54 samba
root@beinanIBM:/home# ls -l |grep samba
drwxr-xr-x 5 siradm siradm 128 2007-07-13 14:54 samba
root@beinanIBM:/home# cd /home/samba/
root@beinanIBM:/home/samba# ls -lh
总计 0
drwxr-xr-x 2 root root 48 2007-07-13 14:53 software
drwxr-xr-x 2 root root 48 2007-07-13 15:35 公共文档
drwxr-xr-x 2 root root 48 2007-07-13 15:36 共享可写
drwxr-xr-x 4 root root 96 2007-07-13 15:37 成员
drwxr-xr-x 4 root root 96 2007-07-13 15:36 管理部
root@beinanIBM:/home/samba# chown -R siradm:sirmas software 公共文档 共享可写 管理部
root@beinanIBM:/home/samba# chown -R siradm:siruser 成员
root@beinanIBM:/home/samba#chmod 1777 共享可写
root@beinanIBM:/home/samba#chmod 775 software 公共文档
root@beinanIBM:/home/samba#chmod 770 管理部 成员
root@beinanIBM:/home/samba# ls -lh
总计 0
drwxrwxr-x 2 siradm sirmas 48 2007-07-13 14:53 software
drwxrwxr-x 2 siradm sirmas 48 2007-07-13 15:35 公共文档
drwxrwxrwt 2 siradm sirmas 48 2007-07-13 15:36 共享可写
drwxrwx--- 4 siradm siruser 96 2007-07-13 15:37 成员
drwxrwx--- 4 siradm sirmas 96 2007-07-13 15:36 管理部
root@beinanIBM:/home/samba# cd 成员
root@beinanIBM:/home/samba/成员# chown sir03:sirmas sir03
root@beinanIBM:/home/samba/成员# chown sir03:sirmas sir04
root@beinanIBM:/home/samba/成员# chmod 770 sir03 sir04
root@beinanIBM:/home/samba/成员# ls -lh
总计 0
drwxrwx--- 2 sir03 sirmas 48 2007-07-13 14:53 sir03
drwxrwx--- 2 sir04 sirmas 48 2007-07-13 14:53 sir04
root@beinanIBM:/home/samba/成员# cd ../管理部/
root@beinanIBM:/home/samba/管理部# ls
sirmas01 sirmas02
root@beinanIBM:/home/samba/管理部# ls -lh
总计 0
drwxr-xr-x 2 root root 48 2007-07-13 14:54 sirmas01
drwxr-xr-x 2 root root 48 2007-07-13 14:54 sirmas02
root@beinanIBM:/home/samba/管理部# chown sirmas01:sirmas sirmas01
root@beinanIBM:/home/samba/管理部# chown sirmas02:sirmas sirmas02
root@beinanIBM:/home/samba/管理部# ls -lh
总计 0
drwxr-xr-x 2 sirmas01 sirmas 48 2007-07-13 14:54 sirmas01
drwxr-xr-x 2 sirmas02 sirmas 48 2007-07-13 14:54 sirmas02
6、修改Samba的配置文件;
[global]
workgroup = sirgrp
netbios name = sirserver
server string = linuxsir File Server
hosts allow = 192.168.1. 192.168.2. 127. #注:允许192.168.1 和192.168.1.2及127网段的用户可以访问;可以改成自己的IP网段,
security = share
printcap name = cups
printcap name = cups
guest account = nobody
guest ok = yes
[linuxsir] #注:共享名
comment = linuxsir samba server
path = /home/samba #在Linux系统中,共享文件夹所在位置;
create mask = 0664 #注:用户创建文件时的以限;
directory mask = 0775 #注:创建目录时的权限;
writeable = yes #注:可写;
valid users = @siradm,@sirmas,@siruser,nobody #注:用效用户和用户组,用户和用户组之间以,号隔开,用户组前面要加@符号,nobody是匿名用户;
browseable = yes #注:是否可以浏览,是;
guest ok = yes #注:匿名用户是否可以访问,是;
说明:#注是说明性的内容,使用本配置文件时,请删除;
7、添加Samba 用户;
root@beinanIBM:/home/samba# smbpasswd -a siradm
New SMB password:000000 注:在这里输入000000做为密码;
Retype new SMB password:000000 注:确认密码;
Added user siradm
用同样的办法来添加sirmas01 、sirmas02 、sir03、sir04 用户;修改Samba用户的密码用下面的办法:
smbpasswd 用户名
注意:smbpasswd 是用来设置Samba用户的密码的,并不是设置系统用户密码的。原理是sambapasswd先读取/etc/passwd上的用户,然后把这个用户添加到Samba用户配置文件中,在Slackware,是写到/etc/samba/private/smbpasswd,Samba用户的密码也是写在 /etc/samba/private/smbpasswd 并加密到/etc/samba/private/secrets.tdb 。而系统用户的密码是存在/etc/shadow文件中。好象这块有点有晕,对吗?这种方式创建的用户,用的是系统帐号,Samba的用户也是系统用户,但密码是分开的。
简单的说,我们要设置Samba密码,一定要先添加系统帐号,然后再用 smbpasswd 来添加并创建密码。当我们要修改Samba密码,也是要通过smbpasswd。
如果我们想修改系统用户的密码呢?要用passwd 工具;
8、启动Samba 文件服务器;
每个发行版都有启动Samba服务器的办法,如果您是新手,就可以用下面的办法来试试;请参考:《一步一学Linux与Windows 共享文件Samba》
root@beinanIBM:/home/samba# pkill smbd
root@beinanIBM:/home/samba# pkill nmbd
root@beinanIBM:/home/samba# /usr/sbin/smbd
root@beinanIBM:/home/samba#/usr/sbin/nmbd
9、挂载Samba文件系统,并测试文件系统的可靠性;
9.1 访问Samba文件系统;
如果是匿名访问,并不喜欢登录名,也能向共享可写目录中写入文件;在Windows下匿名访问文件系统的办法是:
\\ip或域名\共享名
因为我们在这里设置的共享名是 linuxsir ,而我写本文时所用的机器的IP地址是 192.168.1.19 ,于是在Windows中匿名访问,应该IE浏览器的地址栏中输入
\\192.168.1.19\linuxsir
注:在Linux系统中,如果你用GNOME桌面环境,应该用nautilus-connect-server,在终端下打命令就能调出“连接服务器”,服务器类型选Windows共享,文件夹输入linuxsir,用户名处输入用户名,无论你输入什么样的用户,都不会提示密码验证,这是GNOME文件管理器的一个BUG。为了解决这个问题,就得把匿名用户访问屏掉,创建一个公共帐号,比如sirall用户,密码也是sirall。当然这样无论是在Windows还是在Linux下,都无法匿名访问了。如果没有分配给帐号的公司成员,只能用sirall用户来访问。在KDE下可能不存在这样的问题,试试再说,我没有KDE,这事也不敢说。
禁止匿名用户访问,要修改smb.conf ,一般位于/etc/samba/smb.conf ;在前面的配置文件中,有下面的一行;
valid users = @siradm,@sirmas,@siruser,nobody
改为
valid users = @siradm,@sirmas,@siruser
这样就把匿名用户访问禁掉了;如果你仅仅是为Windows用户提供网络文件服务器,或者你用的不是GNOME桌面,大可不必禁掉匿名用户。主要是GNOME桌面环境中的 nautilus-connect-server 程序有BUG。我也感觉郁闷……
9.2 挂载Samba文件系统到本地使用;
在Windows中
应许用映射网络驱动器的办法,请参考《一步一学Linux与Windows 共享文件Samba》 。如果在Win2000中有不能挂载,你要建一个Samba服务器中相应的用户名才行。比如sirmas01 ,并以这个用户登录Win2000系统,这样就能挂载使用了。
但也有一个问题,当我们一开始用匿名用户访问时,再用以用户名和密码挂载网络驱动器之前,要断开匿名挂载的网络驱动器,在网上邻居上按右键。断开以前挂载的网络驱动器;
在Linux系统中
如果你用GNOME桌面环境,请参考前面所说的;
您也可以以命令执行挂载;
root@beinanIBM:/home/xbeinan# mkdir /mnt/linuxsir
root@beinanIBM:/home/xbeinan# /sbin/mount.cifs //192.168.1.19/linuxsir /mnt/linuxsir -o user=sirmas01,pass=111111
或
root@beinanIBM:/home/xbeinan# /sbin/mount -t cifs //192.168.1.19/linuxsir /mnt/linuxsir -o user=sirmas01,pass=111111
对于较低版本的Samba服务器或客户端,应该参考:
《一步一学Linux与Windows 共享文件Samba》
注:用命令挂载的办法,可能存在点问题,比如您在另一台客户机上以其它用户名登录时,可能不能写入文件。解决办法是你要在你所用的系统中,建一个服务器管理员分配给你的用户,比如sirmas01 。以这样用户登录登入桌面,就能在挂载好的Samba文件系统写入文件了。
10、本文的优点和不足;
有的弟兄会问,有必要写Samba文件系统吗?还是有点必要吧。我看有的弟兄在问,为什么我的Samba不能写入文件呢?其实他是不知道是权限的事,分配一下权限就OK了。我写这篇文档的最大理由是:让新手知道Samba服务器,并不是简单的点几下鼠标就OK的。还要注意一下他的权限,权限和文件归属是极其重要的。如果你不懂这个,什么服务器在我们的手中也搞不明白。在本文中,我们设计了几个用户组,几个用户来示例,就是想给新手弟兄说明白这事;
另外,本文的另一个优点就是让所有用户都拥有一个统一的访问路径,或登录路径。因为我们把在Samba客户端(Windows中)所看到的文件系统都设置在了 //192.168.1.19/linuxsir而在服务器上的所有Samba用户的家目录都设置在了/home/samba中。这样就比较容易管理;无论是Linux还是Windows中登录Samba,所有的用户都能通过唯一的共享名来访问或挂载Samba网络磁盘。只是用户名和密码不一样罢了。登录后,每个用户都有自己的文件夹,可以写入,当然也有交叉权限,目的是管理方便;
另外采用统一共享路径的办法,避免了当我们用Windows系统中,会显示出一堆的共享文件夹,而这里只有一个。呵。。。看上去直观方便。登录后你再来选择自己的文件夹是哪个。是不是方便点?
其实所做的一切,就是权限管理,并没有什么高深的东西;
当然不足之处也是有的,有的弟兄会问,为什么不用 Berkeley database 中的 db_load来导入虚拟用户或用Mysql来管理虚拟用户呢?这就需要你来写了~~~~期待弟兄们的大作,我也正等您的大作呢。值得声明的是,我需要的是真实实践过的文档,必须由你亲自动手实践而写出的,而不是cp过来贴在LinuxSir.Org 上。没有经过实践的文档,就不收了~请理解。
当然可能也有的弟兄需要pam验证或 LDAP之类高级应用,那还得需要您查找SAMBA文档,这篇文档并不适合您的需要;
在本文中,为什么有的文件夹是用中文的??因为公司有人对英文不感冒的,所以就用中文。我是通过远程登录到服务器上,服务器环境是zh_CN.UTF-8的,而我用的Slackware系统语言环境也是zh_CN.UTF-8的。创建一个中文目录还是比较容易吧;
11、关于本文;
本文是给Linux初级用户而准备的,并不是高级应用文档,特此声明,欢迎弟兄们斧正,谢谢!
12、更新日志;
2007/07/13 v0.1b 完成正文;比较郁闷的是nautilus-connect-server 有 BUG ,会把用户当成匿名用户;
13、参考文档;
《Samba-HOWTO》
14、相关文档;
《一步一学Linux与Windows 共享文件Samba》 |
|