Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4264293
  • 博文数量: 776
  • 博客积分: 13014
  • 博客等级: 上将
  • 技术积分: 10391
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-22 17:00
文章分类

全部博文(776)

文章存档

2015年(55)

2014年(43)

2013年(147)

2012年(20)

2011年(82)

2010年(429)

分类: LINUX

2010-11-05 18:20:07

ChinaUnixlovegqin兄曾有一片大作:《终于实现samba可写不可删除》,其文深入浅出,受教非浅。最终效果是:在公用目录里,用户对自己所创建的目录、文件

有完全的权限(可以删除),对他人创建的目录则不可删除。
 
    
在实际的应用当中,有些单位、企业的文件服务管理有些不同。可能有很多人使用同一个帐户登录。只有到了一定的级别,才会分配一个私有的帐户。

     比如,所有的初级员工都用:user登录文件服务器,大家的帐户都是user,不允许自己删除文件。用lovegqin兄的方法,初级员工则可以互相删除。

     其实《终于实现samba可写不可删除》文的高楼里,已经有高人给出了解决办法。不过高人都是点到为止的,我不是高人,还是系统的整理一下的好。
----------------------------------------------------------------------------------------------------------------------------------------------
Samba
设计要求:
    *
一个公用目录,一个私有目录,一个共享的软件库
    *
初级员工全部用帐号user登录,可以向公用目录写文件,不可删除任何文件
    *
非初级员工有自己的私有目录,对私有目录有完全的权限
    *
每个私有目录最大1G(这个要用qouta,不在这里多说了)
    *
ROOT,任何人不可删除公用目录,共享软件库中的内容


基本知识点:   
    *
每个文件都有一个所有者(uid),一个组编号(gid)
    *
如果是一个可执行文件, 那么在执行时, 一般该文件只拥有运行该文件的用户具有的权限. setuid, setgid 可以来改变这种设置.
    * Linux
的文件有个扩展文件属性,即在-rwxrwxrwx属性前,还有一个扩展文件属性,同样用数字421表示,4s表示设置setuid2s表示设置setgid1t表示设

sticky bit
    * setuid:
设置使文件在执行阶段具有文件所有者的权限. 典型的文件是 /usr/bin/passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root权限,

从而可以更改用户的密码.
    * setgid:
该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.
    * sticky bit:
该位可以理解为防删除位.

    让我来稍稍解释一下sticky bit。应该分成两块来说:
    1
、目录的sticky bit位。
      
当一个目录具有sticky bit位。用户如果对此目录没有写的权限。则不可删除此目录下任何文件,也不可向此目录写任何文件      
    2
、文件的sticky bit
      
当一个文件具有sticky bit位。即使用户对此文件所在的目录有写权限(即可以写入文件),用户也不能删除该文件。除非用户对此文件本身有写权限。

    设置了扩展文件属性之后,再ls的时候就会出现例如:
    -rwsrw-r--
表示有setuid标志
    -rwxrwsrw-
表示有setgid标志
    -rwxrw-rwt
表示有sticky标志
   
占用了原来的x位,因此有这样的约定:如果原来有x权限,则用sst表示。否则,用SST表示。

开始实做:
    #>useradd user
    #>chown root:root /home/user (
这个目录为公用目录 所有者是root,群组是root)
    #>mkdir /home/soft (
这个目录为共享软件库 所有者是root,群组是root)
    #>mkdir /home/person (
所有者是root,群组是root)
    #>chmod 777 /home/user
    #>chmod +t /home/user (
/home/user加上sticky bit)
    #>chmod 755 /home/soft

    Samba的配置文件smb.conf
-------------------------------------------------------------------------------
    [global]
        workgroup = Haoding
        server string = Fileserver
        cups options = raw
        guest account = guest
        log file = /var/log/samba/%m.log
        max log size = 50
        security = user
        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
        dns proxy = no
        :
为了支持中文,必须加上下面两行
        dos charset=cp936
        unix charset=gb2312

   [homes]
        comment = Home Directories
        browseable = no
        writable = yes

   [公用目录]
        comment =
公用目录,任何人都没有删除的权限
        path = /home/hd
        writable=yes
        guest ok=yes
        create mask=1400
        directry mask=1400

   [软件库]
        comment=soft
        path=/home/soft
        public=yes
        :/home/soft
是属于root的,权限的755,即使samba开了可写,非root也没办法写东西进去
        writable=yes
        guest ok=yes
-------------------------------------------------------------------------     
好了,这样一来,新建的空目录是可以删除,改名的。不会出现一大堆的新建文件夹了,^_^。只要目录里面有文件,这个目录就不能删除了。
 
  
把这些个目录都ln/root下面去,方便root管理
   #>cd /root
   #>ln -s /home/person .
   #>ln -s /home/user .
   #>ln -s /home/soft .
  
增加samba用户
   #>smbpasswd -a user
   #>smbpasswd -a root
-------------------------------------------------------------------------
   
另外,如果要实现同一个目录,不同的用户,不同的群组具有不同的权限。比如说,每个部门有个部门目录,有些人只读,只有人不可删。
这个就需要用到POSIX ACL,和Samba可没有太大的关系。qoutaACL同时使用的话,fstab需要这样写:
    /dev/hda8 /home ext3 acl,grpquota,usrquota,defaults 1 2

以上内容抱残守缺,欢迎高人拍砖,多谢。

 

阅读(932) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~