您所在的位置:读书频道 > 操作系统 > Linux > 20.3.4 安全等级为用户的工作组设置

20.3.4 安全等级为用户的工作组设置

2007-12-07 09:35 鸟哥 机械工业出版社华章公司 字号:T | T
一键收藏,随时查看,分享好友!

《鸟哥的Linux私房菜——服务器架设篇》(第二版)第20章的主要介绍的是在不同的平台上利用同样的协议进行文件传输的操作。本文说的是安全等级为用户的工作组设置。

AD:

20.3.4  安全等级为用户的工作组设置

设置一台不需要密码即可登录的SAMBA Server是非常简单的,不过,您总不希望某些有机密性质的资料放在不设防的网上邻居中,让大家查阅吧!

那怎么办呢?没关系,我们可以通过SAMBA主机提供的认证方式来进行用户权限的授予,也就是说,在客户端联机到主机时,需要输入正确的账号与密码后,才能够登录SAMBA主机查阅自己的数据。SAMBA本身就提供一个小程序来帮助我们建立密码,整个流程也不是很难。比较重要的是SAMBA用户账号需要存放于Linux系统中(/etc/passwd),但是SAMBA的密码与Unix的密码文件并不相同。这就有点小麻烦,这部分的设置如下。

主机预计分享的资源状态如下:

· 刚刚前一个免密码时的smb.conf设置继续保留。

· 针对NetBIOS Name的解析方式依序由lmhosts、broadcast及host来进行解析。

· 安全等级提升为user等级。

· 密码文件放置到/etc/samba/smbpasswd这个文件中。

· 密码需要加密。

· 每个可使用SAMBA的用户拥有自己的默认目录,users这个群组的用户可以进入 /home/public目录中,且在该目录下users群组的所有人具有写入的权限。

下面开始一步步的处理吧。

1. 设置lmhosts

这部分与前一小节的设置相同,请自行前往查阅。

2. 开始设置smb.conf文件

在这个范例的设置文件中,我们会新增几个参数,新增的参数部分会用特殊字体圈起来,引用之前参数的部分则为一般字体。

[root@linux ~]# vi /etc/samba/smb.conf
[global]
     workgroup=vbirdhouse
     netbios name=vbirdServer
     Server string=This is vbird's samba Server
     unix charset=utf8
     display charset=utf8
     dos charset=cp950
     log file=/var/log/samba/%m.log
     max log size=50
     socket options=TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
     dns proxy=no
     template shell=/bin/false
     winbind use default domain=no

     # 与密码有关的设置项目,包括密码文件所在和加密与否
     security=user
     encrypt passwords=yes
     smb passwd file=/etc/samba/smbpasswd

     # 与NetBIOS Name名称解析有关的设置
     name resolve order=lmhosts bcast host

# 新增的每个用户默认目录及群组用户
[homes]
     comment=Home directories
     browseable=no
     writable=yes
     valid users=%S
     create mode=0664
     directory mode=0775
[public]
     comment=the user groups work directory
     path=/home/public
     public=yes
     writable=yes
     valid users=@users
[temp]
     comment=Temporary file space
     path=/tmp
     read only=no
     public=yes

(1)“[global]”部分

新增的数据部分主要是与密码文件有关,包括安全等级设置为使用本机的密码验证,即security=user项目,而且通过密码加密。至于SAMBA使用的密码文件默认是 /etc/samba/smbpasswd,为了增加自己的记忆,直接写到smb.conf中即可。

至于name resolve order就更有趣了,它说明的是:这台SAMBA主机针对NetBIOS Name的解析方式,主要的解析方式有以下几种。

· lmhosts:直接以lmhosts文件的内容来对照。

· wins:利用一台可管理Windows网上邻居的主控计算机来记录,本SAMBA主机向该台主机(Windows Server)要求NetBIOS名称解析结果。

· host:通过/etc/hosts或者是NIS、DNS等方式来处理NetBIOS Name的结果。

· bcast:在局域网中直接通过NetBIOS的广播功能处理,即向所有SAMBA主机接口的同一网段主机发出名称解析的需求,例如SAMBA主机为192.168.1.254/24,则以bcast解析NetBIOS Name时,服务器会主动向192.168.1.0/24发送出解析数据包的要求。

我们修改了默认值,让SAMBA仅通过lmhosts、bcast及host的方式进行主机名称的解析。

(2)“[homes]”部分

在新增的目录方面,“[homes]”是个比较特殊的共享名称,它代表Linux主机上用户的默认目录。但您总不希望使用SAMBA时找到的资源共享名称为 //127.0.0.1/homes吧?所以才会有“valid users =%S”这个设置值,%S代表拥有可登录SAMBA的所有用户,且当它登录后,“[homes]”会变成 “[账号]”,请到前一小节的变量部分查询相关的说明。用户的默认目录是除了用户本人外,并不会开放给其他人浏览的(browseable=no),另外它的umask为022,因为建立新文件的默认权限为0664,而建立新目录则为0775。

(3)“[public]”部分

另一个新增的共享资源比较有趣,命名为“[public]”,指向的目录为/home/public,使用valid users =@users这个设置项目时,加上@之后的名称代表着群组,即在Linux主机上可使用SAMBA的账号中,只要该账号支持users这个群组,那么理论上它就能够进入 /home/public目录进行存取的权限。不过能否顺利的存取文件还与Linux最底层的文件权限有关,且任何人均可查阅到主机提供“[public]”的共享资源(public=yes)。

例题:在上面的配置文件中提到共享/home/public这个目录,请问这个目录的权限应该如何设置才能符合SAMBA案例的要求?

答:在这个案例中,提到任何具有users群组的用户都能完整的存取/home/public,所以这个目录的群组应该属于users,且权限至少为770才行。如果/home/public默认不存在,应该按照以下方法建立:

[root@linux ]# mkdir /home/public

[root@linux ]# chgrp users /home/public

[root@linux ]# chmod 770 /home/public

这样当属于users群组的用户进入到此目录后,才能够进行读写的操作。

3. 设置可使用SAMBA的账号与密码

设置用户账号是很重要的一个环节,因为设置错误的话,任何人都没有办法登录。在这里必须说明一下Linux的文件系统与SAMBA设置的用户登录权限的相关性。

· 在Linux这个系统下,任何程序都必须取得UID与GID(User ID与Group ID)的身份之后,才能够拥有该身份的权限,也才能够适当的进行存取文件等操作。

· Linux系统的UID、GID与账号的关系记录在/etc/passwd中,当然也能通过NIS、ldap等方式来对应。

· SAMBA仅是Linux下的一套软件,使用SAMBA来进行Linux文件系统时,还是需要以Linux系统下的UID与GID为准。

现在来看一下当我们在Windows计算机上,以网上邻居来连接Linux并且进行数据的存取时,会是怎样的一个情况。
我们需要通过SAMBA所提供的功能进行Linux的存取,而Linux的存取是需要取得Linux系统上面的UID与GID的,因此,登录SAMBA主机时,利用SAMBA获取的其实是Linux系统的相关账号。这也就是说,在SAMBA上的用户账号,需要是Linux账号中的一个。

所以说,在不考虑NIS或LDAP等其他账号的验证方式的情况,单纯以Linux本机账号(/etc/passwd)作为身份验证时,SAMBA主机所提供的可登录的账号名称需要存放于 /etc/passwd中。这是一个很重要的概念。例如,您要先将dmtsai存放在/etc/passwd当中,而后才能将dmtsai加入SAMBA的用户中。这都是很基本的账号权限概念,如果您觉得这里阅读有障碍,可以先参考一下《鸟哥的私房菜——基础学习篇》。

假设我的机器里面已经有dmtsai、nikky、tang等三人,不过我只想让dmtsai及nikky使用SAMBA的话,如何将这两个用户加入账号密码管理文件/etc/samba/smbpasswd中呢?很简单,按照以下操作即可。

1. 先确认密码文件是否存在
[root@linux ~]# ls -l /etc/samba/smbpasswd
-rw-------  1 root root 104 Dec 25 23:13 /etc/samba/smbpasswd
# 注意,要这样的权限才可以。如果您的Linux没有这个文件,请自行建立

2. smbpasswd指令功能
[root@linux~]# smbpasswd [-adem] username
如果没有加上任何参数,例如smbpasswd dmtsai时
表示修改SAMBA密码文件 (/etc/samba/smbpasswd) 里面的dmtsai账号的密码
密码文件里已经存在一个dmtsai 的账号了
参数说明
-a, 在smbpasswd密码文件里新增一个用户
-d,让在smbpasswd密码文件里的某个账号的用户暂时无法使用SAMBA,当多了-d的参数时
在smbpasswd里面某个字段会多出一个D的参数,代表该账号目前无法使用
-e,与-d参数相反,让某个账号恢复使用
-m,该username为机器代码,与domain model有关

2.1 开始新增用户
[root@linux~]# smbpasswd -a dmtsai
New SMB password: <==在这里输入密码。这个密码不一定要与/etc/shadow相同
Retype new SMB password: <==再输入一次
Added user dmtsai.

[root@linux ~]# cat /etc/samba/smbpasswd
dmtsai:501:1B0F61E20F8F2D11AAD3B435B51404EE:F7EDDB3F55CC5DB1FE00D7F75502849
1:[U]:LCT-4590969D:
# 上面的数据为同一行的数据,资料为加密过的

2.2 如果要暂时拒绝一个用户的登录,可以这样做:
[root@linux ~]# smbpasswd -d dmtsai
[root@linux ~]# cat /etc/samba/smbpasswd
dmtsai:501:1B0F61E20F8F2D11AAD3B435B51404EE:F7EDDB3F55CC5DB1FE00D7F75502849
1:[DU]:LCT-4590969D:
#这个D代表暂时disable
[root@linux ~]# smbpasswd -e dmtsai

接下来可以通过相同的方式来新增nikky这个用户的SAMBA密码,这两个人就能够使用SAMBA了。然后开始准备重新启动SAMBA并且进行测试。

4. 重新启动SAMBA并测试

在经过重新启动后,所进行的修订才会生效。然后使用smbClient来检查,是否不同身份会有不一样的浏览结果呢?

[root@linux ~]# testparm
# 这个操作很重要。每次都要进行。确认您的语法无误后再开始

[root@linux ~]# /etc/init.d/smb restart

[root@linux ~]# smbClient -L //127.0.0.1
Password:                       <==直接按下Enter即可
Anonymous login successful   <==是匿名登录
Domain=[VBIRDHOUSE] OS=[Unix] Server=[samba 3.0.10-1.4E.9]

    Sharename   Type  Comment
    ---------   ----  -------
    public      Disk  the user groups work directory
    temp        Disk  Temporary file space
    IPC$        IPC   IPC Service (This is vbird's samba Server)
    ADMIN$      IPC   IPC Service (This is vbird's samba Server)

[root@linux ~]# smbClient -L //127.0.0.1 -U dmtsai
Password: <==输入dmtsai在smbpasswd文件中所建立的密码
Domain=[VBIRDSERVER] OS=[Unix] Server=[samba 3.0.10-1.4E.9]

    Sharename   Type  Comment
    ---------   ----  -------
    public      Disk  the user groups work directory
    temp        Disk  Temporary file space
    IPC$        IPC   IPC Service (This is vbird's samba Server)
    ADMIN$      IPC   IPC Service (This is vbird's samba Server)
    dmtsai      Disk  Home directories

可发现,经由不同的身份登录可以取得不一样的浏览数据,所以在使用上要特别留意。

5. 关于权限的说明

有时候会发现,明明在smb.conf中已经设置了writable可写入,用户登录的身份也没有问题,为什么就是无法写入呢?是否是服务器设置方面还有问题啊?非也,主要的问题常常是来自于Linux文件系统的权限。

举上面的例子来说,在smb.conf中设置“[public]”为可写入,即/home/public是可写入的。假设dmtsai属于users这个群组,因此以dmtsai登录SAMBA服务器后,对于/home/public应该是具有可以读写能力的。但是,如果您以root的身份建立/home/public却又忘记修改权限的话,此时/home/public是无法让users这个群组写入的,因此dmtsai这个用户当然不具有写入的能力,这里应格外注意。

上面的设置案例足以满足一般家庭的需求了。但是如果还要扩充共享的目录与能够登录的用户,可以按照以下操作进行设置:

· 利用编辑smb.conf来开放其他的目录,并且特别注意Linux在该目录下的权限。请使用chown与chmod。

· 利用smbpasswd来新增其他用户到/etc/samba/smbpasswd里面去,如果该账号并没有出现在/etc/passwd里面,请先以useradd新增该账号。

· 不论进行完任何的设置,请先以testparm进行确认,之后以/etc/init.d/smb restart来重新启动。

事实上,SAMBA的一般用途都在这个联机的模式中,多使用SAMBA来共享资源。鸟哥都是使用SAMBA来作为远程服务器与我的工作机互通的重要媒介。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

分享到:

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点职位

更多>>

热点专题

更多>>

读书

实时UML与Rational Rose RealTime建模案例剖析
本书将实时系统、实时统一建模语言、实时系统的统一开发过程和Rational Rose RealTime建模环境有机地结合起来,以案例为基础,系

最新热帖

更多>>

51CTO旗下网站

领先的IT技术网站 51CTO 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院 区块链第一聚合媒体 zhijiapro