LinuxEye - Linux系统教程

LinuxEye - Linux系统教程

当前位置: 主页 > Linux配置 >

Samba服务配置详解

时间:2012-06-10 09:43来源:51cto 编辑:admin 点击:
Samba是一种自由软件包,用来让Unix系统的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协定做连结。和windows上的网上邻居原理是一样的。通过SM
      Samba是一种自由软件包,用来让Unix系统的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协定做连结。和windows上的网上邻居原理是一样的。通过SMB协议可以实现资源共享及打印机共享。Samba是Windows与Unix系统OS(Operating System的缩写,操作系统:windows、linux、Unix、Mac等)之间搭建起的一座桥梁,可以实现资源共享,可以像FTP这样使用。
SAMBA的工作原理:
步骤1:协议协商

步骤2:建立连接

步骤3:资源共享

步骤4:断开连接

Samba服务主要安装包为前三个安装包:
samba-2.2.7a-7.9.0.i386.rpm //Samba的服务端软件(第一张镜像盘)
samba-client-2.2.7a-7.9.0.i386.rpm  //Samba客户端软件(第一张镜像盘)
samba-common-2.2.7a-7.9.0.i386.rpm //包括Samba服务器和客户端都需要的文件(第一张镜像盘)
samba-swat-2.2.7a-7.9.0 //Samba的WEB配置工具(第一张镜像盘)
redhat-config-samba-1.0.4-1.noarch.rpm  //Samba的GUI配置工具(第一张镜像盘)
samba-swat-2.2.7a-7.9.0.i386.rpm //Samba的Web配置工具(在第三张镜像盘)
samba的主配置文件是/etc/samba/smb.conf
[root@localhost root]# rpm -qa|grep samba
//显示是否安装的samba服务

如果没有安装,“主菜单”--“系统设置”--“添加/删除应用程序”--“打开软件包”--“windows 文件服务器”--“更新”,或安装linux第三块镜像盘中的rpmdb辅助安装包,然后切换到第一张linux镜像盘,用mount /dev/cdrom /mnt/cdrom命令将第一张镜像盘挂载,安装samba主程序包,samba-client客户端软件包,还有samba的工具包samba-common.用,#rpm –ivh –aid samba*.rpm。如果安装samba所需的依赖软件包都辅助安装了,就不用一个一个找依赖包数据包安装上去,才安装软件包了。一次性安装。
[root@localhost root]# smb
//安装好后,samba服务端及客户端工具也安装上去了,输入smb按两次Tab键就会弹出以smb开头的工具出来。这些工具都存放在/usr/bin目录中。
smbadduser  smbcontrol  smbmount    smbspool    smbumount
smbcacls    smbd        smbpasswd   smbstatus
smbclient   smbmnt      smbprint    smbtar
[root@localhost root]# service smb start
//启动samba服务可以上面的命令启动,也可以在主菜单--系统设置--服务器设置--服务--在smb前打勾--开始--启动samba服务,重新启动服务时service smb restart命令

[root@localhost root]# ls -l /usr/sbin |grep mbd
//显示两个超级用户服务器,是Samba的核心两个守护进程,一个是nmbd,一个是smbd,在服务器启动到停止期间持续的运行。Smbd负责监听139TCP端口,nmdb负责监听137TCP和137UDP端口。可以在/etc/samba/smb.conf主配置文件中了解smbd和nmbd全部配置信息,smbd进程的主要作用是处理来到的SMB数据包,为使用该数据包的资源与Linux协商,而nmbd进程使得其他主机(或工作站)能浏览Linux服务器。
-rwxr-xr-x    1 root     root       632276 2003-03-14  nmbd
-rwxr-xr-x    1 root     root      1794708 2003-03-14  smbd
[root@localhost root]# pstree |grep mbd
//查看服务器是否启动
     |-nmbd
     |-smbd
[root@localhost root]# pgrep smbd
//查看smbd是否运行
[root@localhost root]# pgrep nmbd
//查看nmbd是否运行

[root@localhost root]# netstat -tlnp|grep smb
//查看smb的139端口和445端口是否被防火墙封掉,只有一139个也行了
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN
9193/smbd
[root@localhost root]# iptables –F
//如果不懂开放端口,就用上面的命令清楚防火墙规则,我也是新手。呵呵。或用#/sbin/iptables –F命令清除是一样效果的。

查看windows xp的IP配置,开始--运行(WIN+R)--cmd --ipconfig/all

[root@localhost root]# netconfig
//用netconfig网络配置工具进行配置,如果你不想这样配置也可以用vi 打开编辑/etc/sysconfig/network-scripts/ifcfg-eth0配置文件,
DEVICE=eth0  //网卡设备别名
ONBOOT=yes //重启系统时启动该服务
BOOTPROTO=static  //使用静态IP类型
IPADDR=172.19.22.85 //IP地址是172.19.22.85
NETMASK=255.255.255.0 //子网掩码是255.255.255.0
GATEWAY=172.19.22.254 //网关IP是172.19.22.254
BROADCAST=172.19.22.255 //网络的广播地址.
NETWORK=172.19.22.85 //网络的初始地址
USERCTL=no//非root用户没有控制设备的权限
PEERDNS=no //dhcp类型一般都默认为yes,让服务器修改/etc/resolv.conf文件.静态默认为no
TYPE=Ethernet //以太网类型
按Esc,然后按:wq保存退出

//提示是否进行网络设置,点击yes

不要选择Use dynamic IP configuration这是自动获取IP,要设置我们想要的IP 地址,及子网掩码。IP address:172.19.22.85,netmask:255.255.255.0网关和主DNS服务不用到先不设置用tab建切换到OK,回车。
[root@localhost root]# service network restart
//重新启动网络服务器
[root@localhost root]# ifconfig
//用inconfing命令查看是否配置成功。

[root@localhost root]# ping -c 4 172.19.22.84
//网络是可以ping通的,ping 加一个选项c,跟参数4,意思是发送4次数据包。到指定的主机中。返回的信息显示是通的
//在windows xp创建一个文件夹,如:在F盘创建一个windows,在windows文件夹,并设为共享,设置共享名为share,共享的文件夹其实为windows,然后再windows文件夹中创建一个linux.txt文件,如果不能设置共享,就要安装网络向导了,然后关掉防火墙。
现在我们开始在linux下借助于smbmount命令来实现网络驱动器映射,具体命令是:
smbmount //windowsHostName/ShareName /mnt/smbdir  -U administrator
说明:此处的sharename指代windows共享目录名称,smbdir指代挂载点名称,U指代登陆windows系统的用户名,administrator指代登陆windows主机下的共享文件夹sharename映射为/mnt/smbdir.目录具体步骤是:
在实现网络驱动映射前,首先在linux下建个文件夹:
[root@localhost root]# mkdir -p /mnt/linux
//在/mnt/目录下建一个名为linux的目录挂载点,如果/mnt不存在,就先创建一个/mnt目录在建一个linux目录,如果/mnt存在,就直接建linux目录。这就是mkdir 带一个参数-p的作用。
[root@localhost root]# smbmount //172.19.22.84/share /mnt/linux -U administrator
//用smbmount挂载工具挂载windows的共享目录到,/mnt/linux目录中,如果windows用户没有设置密码,直接回车。如果设置密码,输入windows登陆用户密码,回车会行了。
[root@localhost root]# ls -l /mnt/linux/
//显示/mnt/linux目录下是否有linux.txt文件

[root@localhost root]# smbclient -L //172.19.22.84
//smbmount是samba的Linux的客户端,查看windows的共享资源

接下来配置,用samba服务将linux下的共享目录共享出来
Linux下有samba有四种安全级别,即Share、User、Server、Domain,它们的安全级别由低到高,在配置文件中具体由security参数指定。其中,Share级是指用户不需要账户和口令即可登录服务器;User级是Samba服务器默认的安全级别,是指服务器负责检查登陆者的账户和口令;Server级是指账户和口令的检查由另外的Samba或Windows服务器负责;Domain级是指由一台Windows NT/2000域服务器负责检查账户和口令。用户在配置Samba服务器时,可以根据所需要的不同安全等级来具体配置
[root@localhost root]# cd /etc/samba/
//切换到/etc/samba目录
[root@localhost samba]# mv smb.conf smb.conf.bak
//将smb.conf文件改名为smb.conf.bak
[root@localhost samba]# grep -v "#" smb.conf.bak > ./smb.conf
//显示去掉前面“#”说明,并显示文件的内容重定向导到当前目录的smb.conf文件中。
[root@localhost samba]# vim smb.conf
//打开编辑smb.conf配置文件

[global]             //设置全局参数global
   workgroup = MYGROUP //windows的工作组
   netbios name=Linuxsamba //设置主机名,Linux系统的主机名
   server string = Samba Server //samba服务说明
;   hosts allow = 192.168.1. 192.168.2. 127.
   printcap name = /etc/printcap //设置打印机配置文件路径
   load printers = yes //设置是否允许共享打印
   printing = cups  //设置目录文件的路径
;  guest account = pcguest //
 
   log file = /var/log/samba/%m.log //设置目录文件的路径
   max log size = 0 //对日志文件的文件长度不作限制
   security = share //设置User级的安全等级
;   password server = <NT-Server-Name>
;  password level = 8
;  username level = 8
   encrypt passwords = yes //设置用户采用口令加密
   smb passwd file = /etc/samba/smbpasswd //设置口令文件的路径
;   ssl CA certFile = /usr/share/ssl/certs/ca-bundle.crt
   unix password sync = Yes //设置Samba用户和Linux系统账户同步
   passwd program = /usr/bin/passwd %u //设置本地口令程序
   passwd chat = *New*password* %n\n *Retype*new*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
   pam password change = yes //设置用户使用pam更改口令
;  username map = /etc/samba/smbusers
;   include = /etc/samba/smb.conf.%m
  obey pam restrictions = yes //认证用户时,服从pam管理
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 //设置服务器和客户间会话的Socket选项
   dns proxy = no //不为客户做DNS查询
 [homes] //设置用户的主目录共享
   comment = Home Directories //提供用户主目录服务
   browseable = no //其他用户不能浏览该用户主目录
   writable = yes //允许用户进行写操作
   valid users = %S
   create mode = 0664 //创建文件模式制定的权限为当前用户为读写,组用户为读写,其他用户为读
   directory mode = 0775//创建目录模式为当前用户为读写执行权限,组用户为读写执行权限,其他用户为读执行权限
; map to guest = bad user
; [netlogon] //网络登录服务共享名
;   comment = Network Logon Service //网络登录说明
;   path = /usr/local/samba/lib/netlogon //网络登录的共享文件夹路径
;   guest ok = yes //是否允许匿名用户访问
;   writable = no //是否允许匿名用户读操作
;   share modes = no //共享模式默认为否
[Profiles] //共享目录为profile
;    path = /usr/local/samba/profiles //共享目录路径
;    browseable = no //是否可浏览的
;    guest ok = yes //是否允许匿名用户访问
[printers] //设置全部打印机共享
   comment = All Printers //共享说明为所有的打印共享
   path = /var/spool/samba //打印共享目录为/var/spool/samba
   browseable = no //浏览时是否显示
   guest ok = no //是否允许匿名用户访问
   writable = no //是否允许匿名用户写操作
   printable = yes //是否允许打印
 
;[tmp] //设置共享目录名为tmp
;   comment = Temporary file space //共享目录说明
;   path = /tmp //共享目录
;   read only = no //是否为只读操作
;   public = yes //是否是公用的
 
;[public] //公用目录共享名
;   comment = Public Stuff //共享说明
;   path = /home/samba //共享目录的路径
;   public = yes //是否公开目录
;   writable = yes //是否有写的权限
;   printable = no //是否允许打印
;   write list = @staff //staff组有写的权限
 
;[fredsprn]
;   comment = Fred's Printer //共享目录说明
;   valid users = fred //说明访问fredsprn的用户是fred
;   path = /home/fred //共享路径
;   printer = freds_printer //打印机类型
;   public = no //是否允许匿名用户访问
;   writable = no //目录是否可写
;   printable = yes //是否可以打印
 
;[pchome]
;  comment = PC Directories
;  path = /usr/local/pc/%m
;  public = no
;  writable = yes
;[myshare] //共享目录名
;   comment = Mary's and Fred's stuff //共享目录说明
;   path = /usr/somewhere/shared //共享目录路径
;   valid users = mary fred //允许mary 和fred用户访问
;   public = no //是否允许匿名用户访问
;   writable = yes //是否有写的权限
;   printable = no //是否允许打印
;   create mask = 0765 //创建文件的默认的权限,当前用户有读写执行,组有读写权限,读执行权限
现在来试一下share安装级别,找到security=user,将其改为security=share,如果很多显示文件,可以通过下列方式寻找,在命令模式中输入/security 然后回车就行跳到安全级别security单词位置先查了一遍smb.conf文件所有的单词都标上另特定的颜色,最后跳到第一个security单词位置,按i进入编辑模式。按左右光标进行向左向右移动,按上下光标进行上下移动。
编辑好后,将光标移到末尾[myshare]共享目录这行,按Esc键转为命令模式。要将[myshare]共享目录名以后的样本前的分号去掉,将光标定在[myshare]行
在命令模式,输入”:”,”.”点代表“当前行”,”,”逗号“到”,“$”最后一行,”s”替换“/^”行首的“;”,”\”转意符合,“//”删除
如果到这部会发现[myshare]的分号没有被删除,可以手动删除
然后保存退出
[root@localhost samba]# mkdir -p /usr/somewhere/else/public
//创建目录public目录,如果前面的目录不存在,就同时创建。
[root@localhost samba]# mkdir -p /usr/somewhere/shared
//创建目录与共享目录名下的path对应,如果没有shared前面的目录不存在,先创建,如果存在不会提示
[root@localhost samba]# service smb restart
//重启smb服务,让配置生效
开始—运行或(win+R)在打开输入linux的IP地址:\\172.19.22.85,然后按确定
可以看到myshare、public共享目录及打印机和传真共享
在目录中创建word文件不允许创建
[root@localhost samba]# ls -ld /usr/somewhere/else/public/
//因为window访问属于其它用户,从显示的详细的文件信息中看出,其它用户只有执行的权限,其它用户对目录没有读写的权限
drwxr-xr-x    2 root     root         4096  4月 12 22:19 /usr/somewhere/else/public/
[root@localhost samba]# chmod o+rw /usr/smewhere/else/public/
//设置其它用户的权限,其它用户可以读写
//关掉窗口在重新打开,可以对目录进行读写操作了
如果访问myshare是不允许访问的,安全级别不是share不能访问。
[root@localhost samba]# useradd mary
//创建mary用户
[root@localhost samba]# useradd fred
//创建fred用户
[root@localhost samba]# smbpasswd -a mary
//设置smb用户mary的密码,可以用smbpasswd +用户,进行修改密码,加选项参数-d:删除用户权限,无法访问。-x:删除用户。-e:使用户重新恢复权限。-m:加成信任主机账户
New SMB password:
Retype new SMB password:
unable to open passdb database.
Added user mary.
[root@localhost samba]# smbpasswd -a fred
//设置smb用户fred的密码
New SMB password:
Retype new SMB password:
Added user fred.
[root@localhost samba]#
[root@localhost samba]# grep mary /etc/passwd
//查看mary用户密码,如果将:x:中的x去掉,该用户就不要用密码,就可以登录了。
mary:x:501:501::/home/mary:/bin/bash
[root@localhost samba]# grep fred /etc/passwd
fred:x:502:502::/home/fred:/bin/bash
[root@localhost samba]# more /etc/samba/smbpasswd
//smb用户的密码被加密保存在/etc/samba/smbpasswd文件中
将Security=share的级别修改为security = user,然后重启smb服务
在访问就会弹出一个连接到172.19.22.85的对话框,要求输入用户及密码
访问一次后,mary的用户和密码被系统记住了,如果在访问会直接跳到下面的界面。要想让目录可以读写,要同时满足两条件,一个是smb.conf配置权限设置,一个是目录权限设置
[root@localhost samba]# ls -ld /usr/somewhere/shared/
//查看权限,其他用户是不可读写的
[root@localhost samba]# chmod o+rw /usr/somewhere/shared/
//设置其它用户的权限为读写
[root@localhost samba]# ls -ld /usr/somewhere/shared/
//查看修改的权限,其它用户是可读可写可执行
drwxr-xrwx    2 root     root         4096  4月 12 22:19 /usr/somewhere/shared/
//用fred用户登录的,如果以前做的是服务器记住访问用户,当重启Linux系统后就用fred用户登录
//可读可写可了
练习security=user安全级别。设一个简单的共享。
编辑samba主配置文件/etc/samba/smb.conf
[root@localhost root]# cd /etc/samba
//切换到/etc/samba目录
[root@localhost samba]# mv smb.conf smb.conf.bak
//将smb.conf改名为smb.conf.bak,进行备份
[root@localhost samba]# grep -v "#" smb.conf.bak > ./smb.conf
//去掉smb.conf.bak文件以“#”开头的说明信息,显现剩下的内容重定向导到当前目录的smb.conf文件中
[root@localhost samba]# vim smb.conf
//打开编辑smb.conf文件
[redhat] //共享目录名为redhat
comment=redhat is share directory //说明redhat是一个共享目录
path=/mnt/share //共享目录的路径
valid users = redhat @root //只用redhat用户及root超级用户可以访问
wirte list = redhat //只有redhat用户有写的权限
writable = yes //说明目录是可写的
public = no //是否是公用的
printable = yes //是否可以打印
create mode = 0664 //创建文件后,文件的权限
directory mode = 0775 //创建目录后,目录的权限
 
然后保存退出。
[root@localhost samba]# useradd redhat
//创建一个redhat用户
[root@localhost samba]# smbpasswd -a redhat
//对redhat添加smb密码,与passwd redhat没有关系呀,这个是登陆本机用户密码。
[root@localhost samba]#smbpasswd -a root
//给root用户添加smb密码。
[root@localhost samba]# mkdir -p /mnt/share
//创建路径目录,如果/mnt不存在,同时创建。
[root@localhost samba]#chmod 0777 /mnt/share
//给用户添加,当前用户,组,及其他用户,对目录/mnt/share有读写执行的权限。
[root@localhost samba]# service smb restart
//重启smb服务,让配置文件重新加载
最好在win7进行访问,win+R(开始--运行):\\IP(linux下的IP地址)回车。
用户输入:redhat
密码:***(你设置的redhat的smb密码)

转载请保留固定链接: https://linuxeye.com/configuration/560.html

------分隔线----------------------------
标签:samba
栏目列表
推荐内容