samba学习笔记

什么是samba? linux与windows局域网共享的桥梁,一起来跳samba吧 ^_^

安装samba-3.0.13:


下载:
ftp://ftp.samba.org/pub/samba/samba-3.0.13.tar.gz

解压:
[root@LFS ~]#tar zxvf samba-3.0.13.tar.gz
编译:
[root@LFS ~]#cd samba-3.0.13/source
[root@LFS source]#install -d /var/cache/samba/
[root@LFS source]#./configure --prefix=/usr/local/samba --localstatedir=/var \
--with-piddir=/var/run --with-smbmount && make
samba可以支持许多东东,例如quota,pam,automount. 使用./configure --help查看相关内容

安装:
[root@LFS source]#make install
[root@LFS source]#mv /usr/local/samba/lib/libsmbclient.so /usr/lib
[root@LFS source]#ln -s /usr/lib/libsmbclient.so /usr/local/samba/lib
[root@LFS source]#install -m755 nsswitch/libnss_win{s,bind}.so /lib
[root@LFS source]#ln -sf libnss_winbind.so /lib/libnss_winbind.so.2
[root@LFS source]#ln -sf libnss_wins.so /lib/libnss_wins.so.2
[root@LFS source]#cp ../examples/smb.conf.default /usr/local/samba/lib/smb.conf

配置:

编辑samba配置文件/usr/local/samba/lib/smb.conf:
[global]......[homes]之间为全局设定. [homes]以下的为共享目录设定

全局设定:
[global]
   workgroup = WORKGROUP      #工作组或NT域名
   NetBIOS Name   = blue-lfs  #本机器的NetBIOS名称
   server string = LFS Samba Server #描述服务器信息
   unix charset  =  gb2312     #使中文目录正常显示
   dos charset=cp936            #同上,在Linux的X终端中正常显示中文名
   security = user       #samba验证密码方式,user:需要密码,share:不需要密码

   hosts allow = 172.16.245.  127. #允许的主机ip
   guest account = nobody    #guest帐号,结合以下两项,没有通过密码验证的机器会以nobody
   map to  guest = Bad User   #访问samba服务器中的公开资源。
   map to  guest = Bad Password

   log file = /var/log/samba/log.%m samba日志存放位置, %m表示以连接机器的netBIOS名称记录
   max log size = 0        #日志最大长度 (KB) 0表示无限制
  encrypt passwords = yes  #是否使用加密密码,user级别使用(samba-3.0.13)不需要设定
   smb passwd file  = /usr/local/samba/smbpasswd #密码存放文件
  socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 #提高性能
  interfaces = 10.70.54.0/24  172.16.245.0/24 172.16.249.0/24
  #如果有多个网络接口,必须全部列出来,否则可能会出错
   dns proxy = no    #不通过dns解析 netBIOS 名称

共享目录设定:  
当使用者以不同帐号登陆samba服务器时,homes会变成相应的家目录(samba根据/etc/passwd决定帐号家目录)
[homes]
   comment = Home Directories  #目录描述信息
   browseable = no    #防止用户浏览其他用户的家目录
   writable = yes     #允许写入,同时需要samba服务器该用户有写入权限

   valid user = %S   #可以使用该目录的帐号,%S表示任何在smbpasswd中记录的
   create mode = 0644 #创建文件的权限
   directory mode = 755 #创建目录的权限

[software]   #使用者看到的共享目录名称
     comment     =  LFS software
     path        =  /software  #共享目录的路径
     public      =  no  # 非公开的,需要合法帐号登陆
     valid user  =  blue root  #允许登陆的帐号
     readonly    =  no  # 允许写入
     writable    =  yes  #如果这里为no,则不可以写入. 最后出现的设定值有效
[public]
     comment     = public file
     path        =  /tmp 
     public      = yes
     writable    = no
     guest ok    = yes   #允许guest帐号访问

建立使用者帐号密码:
samba中的帐号必须真实存在于/etc/passwd中,建立它:
[root@LFS ~]#useradd -c "samba user" -s /bin/false blue
加入到smbpasswd中:
[root@LFS ~]#cd /usr/local/samba
[root@LFS samba]#touch smbpasswd
[root@LFS samba]#chown root:root smbpasswd
[root@LFS samba]#chmod 700 smbpasswd
[root@LFS samba]#smbpasswd -a blue
New SMB password:
Retype new SMB password:
Added user blue.
[root@LFS samba]#cat smbpasswd
blue:501:87F33EC80F6BE805AAD3B435B51404EE:D33DD5DE3AB41AB1E509E8FFBA234FA5:[U          ]:LCT-424FAC42:
[root@LFS samba]#
smbpasswd :  smbpasswd -[ademx]  username
-a 新增一个使用者
-d 禁止一个使用者,会在smbpasswd中多出个"D"
-e 恢复使用者
-m 该username 为机器代码,使用samba做为PDC主机时使用
-x 从smbpasswd中删除使用者

测试:
使用testparm可以测试smb.conf语法是否有错误以及查看设定值:
[root@LFS ~]#testparm
Load smb config files from /usr/local/samba/lib/smb.conf
Processing section "[homes]"
Processing section "[software]"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
......略
[root@LFS ~]#

启动samba :

samba需要启动两个daemon:nmbd,smbd :
nmbd :用来管理群组,NetBIOS name 解析
smbd : 用来管理samba主机共享的目录,文件以及打印机

启动它们:(发行版中有自己的samba服务脚本,启动其脚本即可:service smb start)
[root@LFS ~]#/usr/local/samba/sbin/nmbd -D
[root@LFS ~]#/usr/local/samba/sbin/smbd -D

可以看到137-139端口已经处以监听状态:
[root@LFS ~]#netstat -tunl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN
udp        0      0 10.70.54.31:137         0.0.0.0:*
udp        0      0 172.16.245.1:137        0.0.0.0:*
udp        0      0 172.16.249.1:137        0.0.0.0:*
udp        0      0 0.0.0.0:137             0.0.0.0:*
udp        0      0 10.70.54.31:138         0.0.0.0:*
udp        0      0 172.16.245.1:138        0.0.0.0:*
udp        0      0 172.16.249.1:138        0.0.0.0:*
udp        0      0 0.0.0.0:138             0.0.0.0:*
[root@LFS ~]#

Client端测试下:
[root@LFS ~]#smbclient -L \\blue-lfs -U blue
Password:
Domain=[BLUE-LFS] OS=[Unix] Server=[Samba 3.0.13]

        Sharename       Type      Comment
        ---------       ----      ---------     
        software      Disk      software
        public          Disk      public file
        IPC$            IPC       IPC Service (LFS Samba Server)
        ADMIN$          IPC       IPC Service (LFS Samba Server)
        blue            Disk      Home Directories
Domain=[BLUE-LFS] OS=[Unix] Server=[Samba 3.0.13]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
        WORKGROUP-LFS
[root@LFS ~]# 

常用变量:
%m :Client的NetBIOS名称 %M : client的HostName  %L :samba server的NetBIOS名称
%h :samba server的HostName %H : 使用者的家目录  %g :使用者的群组名
%U :使用者名称   %I Client的IP   %T 当前时间


Samba做PDC(Primary Domain Controller 主域控制器):

设定smb.conf,将以下几行注释去掉:(其余设定同上)
[global]
   local master = yes
   os level = 64   #与网域内其他主机相比,这台主机的级别
   domain master = yes
   preferred master = yes
   domain logons = yes
   logon script = %U.bat
 #使用者登陆后会执行自己帐号的.bat批处理.该批处理文件存放在[netlogon]
   logon script = startup.bat
#我这里设定所有登陆者均使用相同配置,执行startup.bat
   logon path = \\%L\Profiles\%U
# 漫游配置文件存放位置,Profiles将被[Profiles]中的路径取代
   wins support = yes
 
[netlogon] 
   comment = Network Logon Service 
   path  = /home/samba/netlogon
   guest ok = yes
   writable = no 
   write list =blue root  #可以写入的用户,其余用户无法写入
   share modes = no

[Profiles]
    path = /home/samba/profiles
    browseable = no #不可浏览,实际上仍然可以使用该目录,与windows中的c$的"$"作用类似
    guest ok = yes
    readonly = no  #必须设定,否则windows注销时无法将漫游配置文件传回服务器

创建各个目录:
[root@LFS ~]#mkdir -p /home/samba/profiles
[root@LFS ~]#mkdir  /home/samba/netlogon
编写startup.bat :
[root@LFS ~]#cd /home/samba/netlogon
[root@LFS ~]#vi startup.bat
net time   \\blue-lfs /set /yes   #同步client与server时间
net use T:  \\blue-lfs\software   #software目录映射成T盘   
net use X:  \\blue-lfs\public     #public目录映射成X盘

net是windows中的指令,net use 语法:
net use [device:] [directory]

该批处理文件必须是dos格式才可以,即必须以 ^M$换行
[root@LFS ~]#cat -A /home/samba/netlogon/startup.bat
net time   \\blue-lfs /set /yes ^M$
net use T:  \\blue-lfs\software ^M$
net use X:  \\blue-lfs\public ^M$
[root@LFS ~]#
使用vi可通过 :set textmode 达到要求,或使用tr转换字符:
[root@LFS ~]#cat -A startup.bat |tr '$' '\r' >startup.bat

再将漫游用户的配置文件(C:\documents and Settings\username)
放到samba server的/home/samba/profile/下

做为PDC内的机器需要提供给PDC其机器代码:
[root@LFS ~]#groupadd machine
[root@LFS ~]#useradd -g machine -s /bin/false -d /dev/null blue2000$
blue2000为我的windows 2000的NetBIOS名称,后加上'$'表示为机器代码
如果useradd不允许添加带有'$'的帐号,则可添加blue2000,再修改/etc/passwd /etc/shadow
[root@LFS ~]#smbpasswd -a -m blue2000$

win2k第一次登陆PDC需要使用root帐号,添加它,不要samba密码与linux主机相同 :)
[root@LFS ~]#smbpasswd -a root

Client端设定 :
首先Client上必须已安装" Microsoft 网络的文件和打印机共享"
win2000: 开始-->控制面板-->网络和拨号连接-->高级-->网络标识-->属性
修改主机名为blue2000及加入工作组WORKGROUP.重启
网络标识--->网络ID 按照提示进行,设置后重启即可选择域登陆

Linux中访问samba服务器共享目录:
使用smbclient :
[root@LFS ~]#smbclient -U blue //blue-lfs/blue
Password:
Domain=[WORKGROUP-LFS] OS=[Unix] Server=[Samba 3.0.13]
smb: \> ls
  .                                   D        0  Tue Mar 29 00:31:13 2005
  ..                                  D        0  Sat Apr  2 21:13:18 2005
  blue.passwd                                 19  Tue Mar 29 00:30:43 2005
  public_html                         D        0  Tue Mar 29 13:03:07 2005

                43987 blocks of size 131072. 14865 blocks available
smb: \> exit
[root@LFS ~]#
?可以查看可用命令,使用它不如smbmount,mount方便

使用smbmount:
[root@LFS ~]#smbmount  //blue-lfs/software tmp/ -o username=blue,password=blue
这样就可以象挂载其他分区一样//blue-lfs/software的东东了 :)

使用mount :
[root@LFS ~]#mount -t smbfs -o username=blue,password=blue //blue-lfs/software tmp/

OK,完工 ^_^

posted @ 2007-10-18 22:57  一瞬间  阅读(425)  评论(0编辑  收藏  举报