找回密码
 注册
查看: 2003|回复: 0

Samba 文件服务器用户复杂权限模型设计和实现 v0.1b ZT

[复制链接]
发表于 2007-7-27 11:14:05 | 显示全部楼层 |阅读模式
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文件系统为例;根据上面目录的规划,我们看到的应该是这样的目录结构;


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》
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2022-8-18 01:06 , Processed in 0.078254 second(s), 15 queries .

© 2021 Powered by Discuz! X3.4.

快速回复 返回顶部 返回列表