zoukankan      html  css  js  c++  java
  • 文件服务器 之 Samba 文件服务器用户复杂权限模型设计和实现

    作者:北南南北
    来自: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》

  • 相关阅读:
    软件开发各列阶段需要达到的目标和生成的成果
    SQL Server 2005 Express附加数据库为“只读”的解决方法
    System.Web.HttpException: Request timed out.
    [收藏]javascript keycode大全
    MS SQL Server中的CONVERT日期格式化大全
    转贴 对于大型公司项目平台选择j2ee的几层认识(一)
    项目经理:做好项目开始阶段的九条经验(1) 项目 技术应用
    .Net Core 实现账户充值,还款,用户登录(WebApi的安全)
    JS如何通过月份,计算月份相差几个月
    .Net core Api后台获取数据,异步方法中,数据需采用Linq分页
  • 原文地址:https://www.cnblogs.com/licheng/p/1047592.html
Copyright © 2011-2022 走看看