我现在向大家介绍如何在windows和linux中双方共享,本人这些天一直在研究,当然要靠了各位兄弟指点。再这里还要谢谢来自五湖四海的兄弟
先来讲讲从linux中访问windows中的共享把
首先你要把windows中的共享打开,这样我门以后才能访问。
在fc[56]中,原来的smbmount 改成了 mount -t cifs 对 ,我们就是用这个命名来实现共享的 比如说我们想共享windows中的c盘 我就可以这样敲命名
mount -t cifs -o username=Administrator%123 //192.168.1.8/c /mnt/windowsdisk
这句话是说的什么意思呢? 就是把目的主机的共享的挂到本地的windowsdisk这个文件夹下,
其中username代表是windows中login帐户,%代表是要我们输入密码(这个密码不能太长了,我先前就是用我的16位密码搞了半天),当然我们也可以不加这一向,可以在下面输入密码
而 //192.168.1.8/c代表是目标主机的共享的盘子(这里也可以是文件夹) 而/mnt/windowsdisk 是我们要挂载的目录这个windowsidsk是我自己创建的文件夹,这个名字可以谁变怎么写。
好废话就不多讲了,自于怎样在命名提示符下看共享,我这里就不过多介绍了
下面讲的是如何从windows中进入linux的共享呢
如何在linux共享目录里创建和修改资料
还是举例子:(不过在这之前你必须对samba的配置文件了解)
mkdir /opt/linuxsir(创建一个文件夹)
groupadd linuxsir (添加一个组)
adduser -g linuxsir -G linuxsir -d /opt/linuxsir -s /bin/bash linuxsir (添加一个用户,并把这个用户赋予一个组,并且在/opt底下创建一个目录)
smbpasswd -a linuxsir (添加一个samba帐户并把这个帐户设置密码)
chmod -R 775 linuxsir (775对应的是rwxrwxr-x,r(读)代表4,w(写)代表2,x(执行)代表1,第一个rwx代表是用户的权限,第二个rwx代表的是其用户组的权限,第三个r-x是代表其他人的权限)(整句的含义就是给linuxsir这个文件赋予相应的权限)
(-R代表是其子集都具有和linuxsir一样的权限)
chown -R linuxsir:linuxsir linuxsir (把这个文件夹赋予谁)(-R和上面那个意思是一样的意思)
在smb的配置文件下我们要做的:
把你的共享目录设置好
[ global] (全局变量)
workgroup = workgroup
Security = user
share 下 (共享的目录)
[linuxsir] (在windows中的名字,这里可以谁边怎么写都可以)
path = /opt/linuxsir (路径)
writeable = yes
browseable = yes
valid user = linuxsir (拥有者)
create mask = 0664 (#create mask是用户创建文件时的权限掩码;对用户来可读可写,对用户组可读可写,对其它用户可读)
directory mask =0775(是用来设置用户创建目录时的权限掩码,意思是对于用户和用户组可读可写,对其它用户可读可执行;)
好基本上我们做的修改差不多快完了
但是当你访问windows是不是会出现什么问题呢?
比如说 默认的登陆帐户是灰色的,不能在共享目录里创建和修改文件呢?
这里只用改2个地方就可以解决上面的问题了
在smb的配置文件中 把Security = user(这里有4个共享级别,其中user是第2个,
,意思说的就是要有用户登陆界面,如果这个地方改成了share,那windows那边的登陆界面就是灰色了,当然也可以进去)
好第一个问题已经解决了 接下来 我来说说第2个问题
其实都瞒简单的 在/etc/selinux/config 下把SELINUX = enforced 改成SELINUX = disabled
做完之后还要重起linux就行了
自于你想知道selinux是什么就要查看具体的资料了 我这里只简单的说说 selinux 全名是(Security-Enhanced Linux )
SELinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统
好我们要做的事情都做完了 接下来我们就可以在windows中任意修改linux中的内容
我要讲的都讲完了 我觉得我要学的东西还很多 一个小小的samba的问题就把我折腾了半天,不过种算解决了。以后还要更加努力学习linux
在这里还要谢谢以下的几位兄弟:i770880 ,piaoyizu (Dyron) ,52BSD ,xdw007 ,briangao (Brian)。
还要感谢以上的几个网站:http://www.linuxsir.org http://www.chinaunix.net/
******************************************************************************************************
Samba2006年11月16日 星期四 下午 02:051. Samba协议基础
自从出现NetBIOS协议,Microsoft用它实现了网络文件/打印服务,即大家熟知的打印与共享服务,它是基于SMB(Server Message Block)协议,实现不同计算机之间共享打印机、串行口和通讯抽象(如命名管道、邮件插槽等)。
随着Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为Internet上计算机之间相互共享数据的一种标准。 因此它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为 CIFS(Common Internet File System),并打算将它与NetBIOS相脱离,试图使它成为Internet上的一个标准协议。
为了让Windows和UNIX主机实现资源共享,可行的一种方法就是在UNIX计算机中安装支持SMB/CIFS协议的软件,这样Windows客户就 不需要更改设置,同对待Windows主机一样,能用UNIX计算机上的资源了。Samba是用来实现SMB的一种软件,它的工作原理是让NetBIOS (Network Basic Input/Output System)和SMB这两个协议运行于TCP/IP协议之上,并且使用Windows的NetBEUI(Net BIOS Enhanced User Interface)协议,让类UNIX主机可以在网络邻居上被Windows主机看到。它的功能有:
实现Linux主机之间和Linux主机与Windows主机之间的文件共享
实现Linux主机之间和Linux主机与Windows主机之间的打印机共享
2. Samba的配置
(1) 安装Samba
检查是否已经安装了Samba:
#rpm -qa | grep samba
samba-swat-3.0.7-1.3E.1 --Samba的web管理工具,端口为901
samba-3.0.7-1.3E.1 --Samba的核心文件
redhat-config-samba-1.0.16-2 --Samba的可视化配置工具
samba-common-3.0.7-1.3E.1 --Samba通用文件
samba-client-3.0.7-1.3E.1 --Samba客户端工具
如果没有安装,则可以通过光盘或NFS(后面讲解)安装。安装文件的具体光盘位置,请查看光盘下RedHat/RPMS下的内容。安装的方法如下:
#rpm -ivh *samba*.rpm --可以一次完成所有安装
(2) 启动Samba服务器和web管理服务
#chkconfig smb on --将服务添加到服务管理器中
#service smb start --启动共享服务,但修改后仍需要重启动
#chkconfig swat on --取消swat在xinetd服务中的不启动限制
#service xinetd restart --通过重新启动xinetd服务启动swat服务
(3) 配置Samba
(1)方法1:利用system-config-samba 进行配置,方法如下:
#system-config-samba
这里你可以对samba服务器进行一些基本的设置里,应该说比较简单了,我看没有必要介绍了,配置好之后,记住重新启动服务.
重新启动的方法有两种:
#service smb start或restart
#/etc/rc.d/init.d/smb start
(2)方法2:利用samba-swat
swat文件在/etc/xinetd.d/下,文件名就是swat
首先,你要修改swat的配置文件,默认的情况下是关闭的
service swat
{
port = 901 (swat用到的端口是901)
socket_type = stream(类似tcp协议的东西,呵呵这是我自己的理解)
wait = no
only_from = 127.0.0.1(只从这个启动swat,关键!)
user = root(启动swat用到的名子)
server = /usr/sbin/swat
log_on_failure += USERID
disable = yes (一定要把yes改成no)
}
修改过之后,启动xinetd就可以了
启动方法跟刚才我说的一样
然后在浏览器里些上:http://127.0.0.1:901/ 回车,你成功了 !(注意,这个IP地址要跟你在SWAT配置文件里的IP地址一样才形,切记!)
至于如何使用swat,自己摸索一下应该不成问题了,配置完成以后,记得重新启动服务就可以了.对了,为了使得samba和swat在每次开机的时候启动,你可以这样:
#setup,然后找到system service,在SMB和SWAT前搞个*,也可以#ntsysv,同样的效果.
3)方法3:修改smb.conf文件
Samba的配置文件为/etc/samba/smb.conf,该文件的初始内容很多,其实很多都是注释,但这些注释往往对我们的后续配置很有帮助,建议读者仔细阅读。
Samba的配置可以分为三部分:全局部分(由[global]标识)、打印机部分(由[printers]标识)和共享部分(由[homes]标识和自 己设定的其他标识)。全局部分的配置影响到其它所有部分,打印机部分用于设置打印机的共享,而其余部分则是提供一般共享的部分。所以,Samba配置的一 般方法就很明确了,配置global部分,设置全局参数,配置打印机部分则可以实现打印机共享,其它共享部分的配置则是提供特殊共享服务,配置 [homes]部分可以让本地用户的目录也加入共享。
a) 全局设置
workgroup = syd168Group
设置该Samba服务器所在的工作组或者域(如下面的security=domain的话)。
server string = syd168’s Samba Server %v
设定Samba服务器的显示名。还可以包含特定变量。常用的包括:
变量 含 义
%S 当前服务名(如果有的话)
%P 当前服务的根目录(如果有的话)
%u 当前服务的用户名(如果有的话)
%U 当前对话的用户名
%H 当前服务的用户的Home目录
%v Samba服务的版本号
%h 运行Samba服务机器的主机名
%m 客户机的NETBIOS名称
%L 服务器的NETBIOS名称
%M 客户机的主机名
%I 客户机的IP
%T 当前日期和时间
表2-1
hosts allow = 172.12.0 EXCEPT 172.12.0.8 123.0.0.1 .syd164.com
可以设置允许访问的网络和主机IP,比如允许192.164.1.0/24和192.164.2.1/32访问,就用hosts allow = 192.164.1. 192.164.2.1 123.0.0.1 注意后面加“.”号,各个项目间用空格隔开,注意要把本机也加进去,否则本地也将无法测试。
printcap name = /etc/printcap
存放打印机描述信息的文件,一般是/etc/printcap。
load printers = yes|no
设定是否自动共享打印机而不用设置[printers]部分
printing = lprng
定义打印系统的类型,缺省是lprng,可选项有:bsd, sysv, plp, lprng, aix, hpux, qnx。
guest account = guest
定义游客帐号,而且该账号必须已经存在于/etc/passwd中,不然它就用缺省的nobody
log file = /var/log/samba/%m.log
定义记录文件的位置LogFileName(一般是用/var/log/samba/%m.log)
max log size =100
定义记录文件的大小size(单位是KB,如果是0的话就不限大小)
security = security_level
定义Samba的安全级别,按从低到高分为四级:share,user,server,domain。它们对应的验证方式:
share:任何用户无需用户名和口令即可访问服务器上的资源。
user:samba的默认配置,在访问共享资源之前必须通过本地用户验证。
Server:验证是通过另一台服务器进行的,如果失败,就退到user级。
domain:验证通过网络上的Windows的主域控制器进行。
后面三种安全级都要求“用户”在提供共享的Linux主机上要有帐户。
password server = <NT-Server-Name>
设置验证服务器的服务器名。当security设为server或者domain的时候才有必要。
encrypt passwords = yes|no
设置是否对密码进行加密,samba本身有一个密码文件/etc/samba/smbpasswd,如果不对密码进行加密则在验证会话期间客户机和服务器之间传递的是明文密码,samba直接把这个密码和Linux里的/etc/samba/smbpasswd密码文件进行验证。但是在Windows 95 OS/2以后的版本和Windows NT SP3以后的版本缺省都不传送明文密码,要让这些系统能传送明文密码必须在其注册表里更改,比较麻烦,好的方法就是把这里的这个开关设置为yes。
smb passwd file = /etc/samba/smbpasswd
设置存放samba用户密码的文件smbPasswordFile(一般是/etc/samba/smbpasswd)。
ssl CA certFile = sslFile
当samba编译为支持SSL的时候,需要指定SSL的证书的位置(一般在/usr/share/ssl/certs/ca-bundle.crt)。
UNIX password sync = yes|no
passwd program = /usr/bin/passwd %u
passwd chat =*New*UNIX*password* %n/n *ReType*new*UNIX*password* %n/n *passwd:*all*authentication*tokens*updated*successfully*
这三项设置能否从Windows的应用程序修改UNIX系统的用户密码
username map =/etc/samba/smbusers
指定用户映射文件(一般是/etc/samba/smbusers),当我们在里面指定一行root = administrator admin的时候,当客户机以用户admin或者administrator连接时会被当作用户root看待。
include = MachineConfFile
指定对不同机器的连接采用不同的配置文件MachineConfFile(一般为了灵活管理设置为/etc/samba/smb.conf.%m,由于采用了samba的变量,把配置文件和客户机的NETBIOS名称关联起来,能很容易地控制这些客户机的权限和设置)。
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
这个是网络socket方面的一些参数,能实现最好的文件传输性能。相关的选项还有SO_KEEPALIVE、SO_REUSEADDR、 SO_BROADCAST、IPTOS_LOWDELAY、IPTOS_THROUGHPUT、SO_SNDLOWAT(*)、SO_RCVLOWAT (*)等,带*号的要指定数值。本地网络,就只用IPTOS_LOWDELAY,如果是广域网络,就试试IPTOS_THROUGHPUT。
interfaces = interface1 interface2
如果有多个网络接口,就必须在这里指定。如interface = 192.164.12.2/24 192.164.13.2/24
remote browse sync = host(subnet)
这里指定浏览列表同步信息从哪里取得, 如用host(比如192.164.3.25)或者整个子网(192.164.1.255)。
remote announce = 192.164.2.255/SERVERS 192.164.4.255/STAFF
指定这些机器向网络宣告自己,从而在“网络邻居”中可以看到该机器。
local master = yes|no
这个参数指定nmbd是否试图成为本地主浏览器,默认值是yes,如果设为no则samba服务器就永远都不会成为本地主浏览器。但即使设置了yes,也不等于samba服务器就会成为本地主浏览器。只是参与本地主浏览器选择。
os level = n
n的值是个整数,决定了nmbd是否有机会成为本地广播区域的工作组里的本地主浏览器,默认值是零,零则意味着nmbd失去浏览选择。如果要nmbd更有机会成为本地主浏览器的话,可以设为65。
domain master = yes|no
这个参数让nmbd成为一个域浏览器,取得各本地主浏览器的浏览列表,并将整个域的浏览列表递交给各本地主浏览器。
preferred master = yes|no
这个参数指定nmbd是否是工作组里的主浏览器,如果指定为yes,nmbd在启动的时候就强制一个浏览选择。
preserve case = yes|no
short preserve case = yes|no
指定拷贝DOS文件的时候保持大小写,缺省是no
default case = lower|upper
所有的DOS文件的缺省是大写还是小写
case sensitive = yes|no
大小写敏感,一般是no,不然会出现一些问题。
b) 共享设置:
每个SMB服务器能对外提供文件或打印服务,每个共享资源需要被给予一个共享名,这个名字将显示在这个服务器的资源列表中。共享名必须放在[]中,如 [homes]。如果一个资源的名字的最后一个字母为$,则这个共享就为隐藏共享,不能直接出现在浏览列表中,而只能通过直接访问这个名字来进行访问。
[homes]段 这是samba共 享中比较奇怪的一个段,专门用于提供用户目录共享的。这个段一般不需要设置共享资源的路径,其实路径就是每个用户的主目录。当客户机发出服务请求时,首先 查找由smb.conf文件的其它配置部分设定的共享服务,如果没有发现,并且配置了homes段,则通过搜索/etc/passwd得到用户的home 目录。通过homes段,Samba可以得到用户的home目录并使之共享。下面是这个段的最基本的几个设置。
[homes]
comment=Home Directory
browseable=no
writable=yes
其它共享段。其它共享段是提供特殊共享的段,每个共享继承[global]中的设置,但如果该段中再次设置了参数,则覆盖[global]中的设置参数。下面是一个显示为share1的共享的配置:
===========================共享的建立============================
[share1] --共享名
comment =comment --共享说明
path = /home/grind --共享文件位置
allow hosts = host(subnet) --允许共享访问的设置,同[global]中设置方法
deny hosts = host(subnet) --不允许访问共享的限制,方法同上
writable = yes|no --共享是否可以写入
valid users = user(@group) --允许访问的用户和组
invalid users = user(@group) --不允许访问的用户和组
read list = user(@group) --只允许读取的用户和组
write list = user(@group) --总是允许读写的用户和组
admin list = user(@group) --能管理该共享(读写和权限修改等)的用户和组
guest ok = yes|no --是否允许游客访问,即无需密码访问
guest account = nobody --游客访问帐号,必须在/etc/passwd中存在
hide dot files = yes|no --是否不显示隐含文件
create mode = 0755 --新建立的文件的属性,一般是0755
directory mode = 0755 --新建立的目录的属性,一般是0755
sync always = yes|no --对该共享资源进行写操作后是否进行同步操作
case sensitive = yes|no --是否区分大小写,一般选no,不然可能引起错误
force user = grind
如果一个目录,让guest可以写,那么guest就可以删除,如果用force user= grind强制建立文件的属主是grind,同时限制create mask = 0755,这样guest就不能删除了。
wide links = yes|no
上面设置确定是否允许共享外符号连接,比如共享资源里面有个连接指向非共享资源里面的文件或者目录,如果设置wide links = no将使该连接不可用。
max connections = 100 --同时连接最大数
read only = yes|no --共享为只读方式
===========================共享的建立============================
通过上面的方法,我们可以实现多个不同的共享设置,只要各个共享的显示名不同就可以了。但如果想把光驱、移动硬盘等“动态”设备共享,就需要注意,这些设备可能不是常“在线”的,所以,需要动态建立共享。下面我们就以光驱的共享为例,看看如何实现“动态”资源的共享。
===========================光驱的共享===========================
[cdrom]
comment = syd168’s DVDROM
path = /mnt/cdrom
public = yes
browseable = yes
root preexec = /bin/mount -t iso9660 -0 iocharset=cp936 /dev/cd0 /mnt/cdrom
root postexec = /bin/umount /mnt/cdrom
===========================光驱的共享===========================
这里root preexec指明了连接时用root的身份运行mount命令,而root postexec则指明了断开时用root身份运行umount,有效实现了对光驱的共享。
c) 打印机共享的设置:
==========================打印机的共享===========================
[printers]
path = /var/spool/samba
writeable = no
guest ok = yes
printable = yes
printer driver = HP LaserJet 5L
==========================打印机的共享===========================
这里printable指明该打印机可以打印, guest ok说明游客也能打印,path指明打印的文件队列暂时放到/var/spool/samba目录下。printer driver的作用是指明该打印机的类型,这样我们在安装网络打印机的时候可以直接自动安装驱动而不必选择。
d) Samba用户管理:
需要注意的是,如果Samba的security配置为user,则将由 Samba服务器负责用户的认证。所有要访问Samba的本地用户帐号必须包含在smb passwd file 参数指定的文件中,默认是/etc/samba/smbpasswd。要将系统用户添加到smbpasswd中,使用smbpaswd命令即可实现,smbpasswd的命令格式如下:
smbpasswd 参数 用户
具体参数见下表:
变量 含 义 举例
-a 添加用户 #smbpasswd -a syd1
-x 删除用户 #smbpasswd -x syd168
-d 禁用帐号 #smbpasswd -d guest
-e 取消禁用 #smbpasswd -e guest
-n 清除密码 #smbpasswd -a syd1
表2-2
上面主要介绍了Samba服务端的设置,一般应用中使用上面的配置就可以满足需要了,对于一些不常用的配置就省略了,详细的信息可以用man smb.conf参考。
e) Linux 下访问Samba服务
1)列出可共享的网络资源:
smbclient -L IP或NETBIOS名
作用是显示某台提供samba服务的服务器上的共享资源。命令执行效果如下:
#smbclient –L 172.12.0.3
该命令的执行结果如下:
========================下面是共享的信息========================
共享名 共享类型 说明
--------- ---- -------
Homes Disk Home Directories
Var Dis var
IPC$ IPC syd168's samba server v3.0.7-1.3E.1
ADMIN$ IPC syd168's samba server v3.0.7-1.3E.1
sydlinuxp1 Printer Created by redhat-config-printer 0.2.x
================下面是共享服务器的信息========================
服务器 说明
--------- -------
SYDLINUX syd168's samba server v3.0.7-1.3E.1
=====================下面是Mast机器的信息=====================
工作组 主服务器
--------- -------
SYD168-RHAS3 SYDLINUX
上面第一段列举了该机器172.12.0.3上面的共享资源,第二段列举了172.12.0.3所在的工作组里面所有提供samba服务的机器,第三段列举了其他工作组提供Browse服务的Master机器信息。
2)使用网络资源:
smbclient //IP或NETBIOS名/共享名 [-U 用户名]
命令执行效果如下:
#smbclient //172.12.0.3/syd1
added interface IP=172.12.0.3 bcast=172.12.251.255 nmask=251.251.0.0
got a positive name query response from 172.12.0.3 (172.12.0.3)
Password:
Domain=[BLUESUN] OS=[Windows 1.0] Server=[Windows 2000 LAN Manager]
smb: >
接着的操作和ftp的命令一样,用get下载文件,用put上传文件,用help命令查看帮助。
另一种使用共享的方法就是将共享挂载在文件系统下,象访问本地目录一样访问。挂载的方法如下:
smbmount //IP或NETBIOS名/共享名 /本地挂接点 [-o option]
常用的option有username=<用户名>,password=<密码>,guest(指定为用guest访问,不用提 供密码,但username=guest也会要求输入密码),ro(有时候为了系统安全要指定为只读模式),rw为可读写,如有多个option,之间用 逗号隔开。
或者可以用如下命令实现同样的功能:
mount -t smbfs [-o option] //IP或NETBIOS名/共享名 /本地挂接点
例子如下:
#smbmount /172.12.0.3/syd1 /mnt/test1 -o guest
或
#mount -t smbfs -o guest iocharset=cp936 //172.12.0.3/syd1 /mnt/test1
然后就能通过访问/test来使用网络上的资源了。
如果不再需要,可以简单地使用如下的命令卸载连接:
smbumount /mnt/test1 或 umount /mnt/test1
f) Windows下访问Linux的共享
要在Windows下访问Linux中提供的共享,和使用一般的Windows共享一样,可以有多种方法:
1) 在Windows搜索Linux服务器
2) 在使用Windows提供的网络邻居功能
3) 在地址栏输入//samba服务器IP/共享名
该介绍的我都介绍完了,重新启动服务!
或许您会发现客户端无法连接,奶奶的,真让人生气,忙了这么久,还是不能访问,why?
1)客户端应安装tcp/ip netbios ipx(这个东东不太懂)
2lmhosts, IP地址和netbios名子对应.
3)iptables(这个东西最坏,就是因为他,我浪费了两天时间!我得出一个小小的结论,做各种配置前把iptables给关闭!)
由于我对iptables不太懂,我的解决方式有两种:
1:#setup 然后选择防火墙,然后关闭
2.修改/etc/sysconfig/iptables
-A INPUT -j RH-Lokkit-0-50-INPUT
-A FORWARD -j RH-Lokkit-0-50-INPUT
-A RH-Lokkit-0-50-INPUT -i lo -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 0:1023 --syn -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 2049 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 0:1023 -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p udp -m udp --dport 2049 -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 6000:6009 --syn -j REJECT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 7100 --syn -j REJECT
COMMIT
把0:1023的两行的REJECT改成ACCEPT
重新启动防火墙就可以了
#service iptables start
这样应该可以了,建议多实践,由于自己是个新手,可能有很多地方让您见笑了
samba中文乱码问题
vi /etc/samba/smb.conf
根据locales的设置,修改该文件:
1. 如果locale是zh_CN.UTF-8,做如下设置:
display charset = UTF-8
unix charset = UTF-8
dos charset = UTF-8
2. 如果locale是zh_CN.GBK或zh_CN.gb2312,做如下设置:
display charset = cp936
unix charset = cp936
dos charset = cp936
重启samba:
service samba restart
则无论从windows的网上邻居,还是直接用securecrt登陆,均可显示正常中文