问:如何在linux下访问windows共享文件夹
Samba服务器可用于windows和Linux之间,局域网内。
一,Samba使用的daemons
nmbd
用来管理工作组、NetBIOS name 等等的解析。主要利用UDP 协议开启port 137, 138 来负责名称解析的任务;
smbd
主要功能就是用来管理SAMBA 主机分享的目录、档案与打印机等等。主要利用可靠的TCP 协议来传输数据,开放的端口为139 及445(不一定存在) 。
二,安装Samba (yum install 以下三个包)
samba
这个软件主要提供了SMB 服务器所需的各项服务程序(smbd及nmbd)、的文件档、以及其他与SAMBA 相关的logrotate配置文件及开机默认选项档案等;
samba-client
samba-client:这个软件则提供了当Linux 做为SAMBA Client 端时,所需要的工具指令,例如挂载SAMBA 文件格式的mount.cifs、取得树形图的smbtree 等等;
samba-common
这个软件提供的则是服务器与客户端都会使用到的数据,包括SAMBA 的主要配置文件(smb.conf)、语法检验指令(testparm) 等等;
三,分析配置文件
/etc/samba/smb.conf Samba的主要配置文件
smb.conf这个配置文件其实可以分为两部份来看,
一个是主机信息部分,在smb.conf当中以[global] (全领域) 作为设定的依据;
另一个则是分享的信息,以个别的目录名称为依据。
【global】
workgroup = 工作组的名称:注意,主机群要相同;
server string = 主机的简易说明,这个随便写即可。
netbiosname = 主机的NetBIOS 名称,每部主机均不同,分享的主机名;
log file = 登录档放置的档案,文件名可能会使用变量处理;
max log size = 登录档最大仅能到多少Kbytes ,若大于该数字,则会被rotate 掉。
hosts allow:白名单
security = share, user, domain:三选一,这三个设定值分别代表
share:分享的数据不需要密码,大家均可使用(没有安全性,废弃)
user:使用SAMBA 服务器本身的密码数据库,密码数据库与底下的passdbbackend 有关;
domain:使用外部服务器的密码,亦即SAMBA 是客户端之意,如果设定这个项目,你还得要提供『password server = IP』的设定值才行(3.5之后废弃);
分享资源的相关参数设定[分享的名称]
[分享名称]:这个分享名称很重要,它是一个『代号』而已
comment:只是这个目录的说明而已
path:这个分享名称实际会进入的Linux 文件系统(目录)。也就是说看到的是[分享] 的名称,而实际操作的文件系统则是在path 里头所设定的。
browseable= yes //是yes/否no在浏览资源中显示共享目录,若为否则必须指定共享路径才能存取
guest ok:是否允许来宾用户访问,即不是属主属组的是否可以访问
writable:是否可以写入
smb.conf内的可用变量功能
%m:代表Client 端的NetBIOS 主机名喔!
%M:代表Client 端的Internet 主机名喔!就是HOSTNAME。
%L:代表SAMBA 主机的NetBIOS 主机名。
%H:代表用户的家目录。
%U:代表目前登入的使用者的使用者名称
%g:代表登入的使用者的组名。
%h:代表目前这部SAMBA 主机的HOSTNAME 喔!注意是hostname 不是NetBIOS name 喔!
%I:代表Client 的IP 咯。
%T:代表目前的日期与时间
%S:取代目前的设定项目值,
【homes】à共享名,共享资源能够看到的名字
valid users = %S,那个用户进来,就替换为那个用户
四,与之相关的设置
用testparm查阅smb.conf的语法设定正确性
在启动samba 之前,我们务必要了解到smb.conf里面语法是否正确,检验的方式使用testparm这个指令即可
关闭SELinux功能及防火墙(或添加规则):
setenforce0
启动Samba服务:
service smb restart (目录共享管理)
service nmb restart (名称解析服务)
添加samba账户
使用smbpasswd添加共享用户的常用方法:smbpasswd-a 添加用户(被添加用户必须是系统用户)smbpasswd-d 冻结用户(这个用户不能用了)
smbpasswd-e 恢复用户(将冻结的用户解冻)
smbpasswd-n 将用户密码设置为空
smbpasswd-x 删除用户
假设自我为客户端的检验(默认用lo 接口)
[root@www~]# smbclient-L [//主机或IP] [-U 使用者账号]
选项与参数:
-L :仅查阅后面接的主机所提供分享的目录资源;
-U :以后面接的这个账号来尝试取得该主机的可使用资源
利用类似FTP 的方式登入远程主机
[root@clientlinux~]# smbclient //[IP|hostname]/资源名称 [-U username]
# 意思是使用某个账号来直接登入某部主机的某个分享资源
举例如下:
[root@clientlinux~]# smbclient //192.168.100.254/smb1 -U smb1
Enter smb1's password:
Domain=[VBIRDHOUSE] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
smb: \> dir
# 在smb: \> 底下其实就是在//192.168.100.254/dmtsai这个目录底下,我们可以使用dir, get, put 等常用的ftp 指令来进行数据传输。
mount.cifs:直接挂载成为网络驱动器
使用smbclient一点也不方便,因为使用的是ftp 的功能语法,有点怪怪的~能不能像Windows 那样。
[root@clientlinux~]# mount -t cifs //IP/分享资源 /挂载点 [-o options]
选项与参数:
-o 后面接的参数(options) 常用的有底下这些:
username=你的登入账号:例如username=smb1
password=你的登入密码:需要与上面username 相对应
# 范例一:以smb1 的身份将其家目录挂载至/mnt/samba 中
[root@clientlinux~]# mkdir/mnt/samba
[root@clientlinux~]# mount -t cifs //192.168.100.254/smb1 /mnt/samba -o
username=smb1,password=4321
[root@clientlinux~]# df
文件系统1K-区段已用可用已用% 挂载点
//192.168.100.254/smb1/
7104632 143368 6606784 3% /mnt/samba
smbtree:网络邻居显示模式
[root@clientlinux~]# smbtree [-bDS]
选项与参数:
-b :以广播的方式取代主要浏览器的查询
-D :仅列出工作组,不包括分享的资源
-S :列出工作组与该工作组下的计算机名称(NetBIOS) 不包括各项资源目录
smbstatus:观察SAMBA 的状态
服务器端指令,主要的目的是查阅目前SAMBA 有多少人来联机,且哪些资源共享已经被使用等等的信息
[root@www~]# smbstatus[-pS] [-u username]
选项与参数:
-p :列出已经使用SAMBA 联机的程序PID ;
-S :列出已经被使用的资源共享状态;
-u :只列出某个用户相关的分享数据
什么参数都不加即为列出所有的信息
需账号密码才可登入的分享(security = user)
Samba 使用者账号必须要存在于Linux 系统当中(/etc/passwd),但是Samba 的密码与Unix 的密码档案并不相同.
五,详细配置
1,利用useradd创建三个用户,并为sambas设定三个账户,名称为smb1, smb2, smb3 ,且均加入users 为次要群组。此三个用户Linux 密码为1234,Samba 密码则为4321;
2,同理设置一个student账户 。用来查看不同组用户的区别。是否可以正常访问共享文件。
可以通过pdbedit -L 查看你设置的用户
3,新建一个分享目录/home/project ,里面新建文件1.sh 2.sh 。接下来分享/home/project 这个目录。
4,打开配置文件/etc/samba/smb.conf,一般只需要配置两个地方就可以。
设置IP白名单(设置和客户端的Ip处在同一个网段)
设置共享资源
5,重启samba服务。
service smb restart
service nmb restart
接下来设置客户端。
1,关闭防火墙 ,安装上 samba-client 包。
2,先试一下利用类似FTP的方式登入远程主机
3,利用mount.cifs直接挂载为网络驱动器
mount -t cifs //192.168.66.128/project /mnt -o username="smb1",password="4321"
通过df命令可以查看到Linux系统已经挂载进来了。
4,查看本机windows,依旧可以
至此,配置完成。