linux SAMBA文件服务器
用途
提供linux和Windows系统的互相文件分享。
SAMBA包部署方法
yum -y install samba samba-client samba-common
# SMABA服务器的状态观察,主要的目的是查阅目前 SAMBA 有多少人来联机, 且哪些资源共享已经被使用等等的信息。
[root@www ~]# smbstatus [-pS] [-u username]
选项与参数:
-p :列出已经使用 SAMBA 联机的程序 PID ;
-S :列出已经被使用的资源共享状态;
-u :只列出某个用户相关的分享数据
- samba: 这个软件主要提供了 SMB 服务器所需的各项服务程序 (smbd 及 nmbd)、 的文件档、以及其他与 SAMBA 相关的 logrotate 配置文件及开机默认选项档案等;
- samba-client: 这个软件则提供了当 Linux 做为 SAMBA Client 端时,所需要的工具指令,例如挂载 SAMBA 文件格式的 mount.cifs、 取得类似网上邻居相关树形图的 smbtree 等等;
- samba-common: 这个软件提供的则是服务器与客户端都会使用到的数据,包括 SAMBA 的主要配置文件 (smb.conf)、语法检验指令 (testparm) 等等;
不需要密码的SAMBA共享的部署
[root@www ~]# cat /etc/sysconfig/i18n
LANG="zh_TW.UTF-8" <==检查linux系统的语系!
[root@www ~]# cd /etc/samba
[root@www samba]# cp smb.conf smb.conf.raw <==先备份!
[root@www samba]# vim smb.conf
# 1. 先设定好服务器整体环境方面的参数
[global]
# 与主机名有关的设定信息
workgroup = study_linux #工作组的名称
netbios name = jet_server #主机的 NetBIOS 名称
server string = This is jet's samba server #主机的简易说明
# 与语系方面有关的设定项目,在新版的samba中语系部分可以忽略。
unix charset = utf8 #在 Linux 服务器上面所使用的编码,就是刚查看的 i18n 的编码
display charset = utf8 #自己服务器上面的显示编码, 与unix charset相同
dos charset = cp950 #就是 Windows 客户端的编码,使用的是big5编码
# 与登录文件有关的设定项目,注意变量 (%m)
log file = /var/log/samba/log.%m #登录日志放置的目录,这里使用了变量
max log size = 50 #登录日志最大能使用多少空间,单位是KB,超出则被rotate掉。
#变量解释:
# %m:代表 Client 端的 NetBIOS 主机名喔!
# %M:代表 Client 端的 Internet 主机名喔!就是 HOSTNAME。
# %L:代表 SAMBA 主机的 NetBIOS 主机名。
# %H:代表用户的家目录。
# %U:代表目前登入的使用者的使用者名称
# %g:代表登入的使用者的组名。
# %h:代表目前这部 SAMBA 主机的 HOSTNAME 喔!注意是 hostname 不是 NetBIOS name 喔!
# %I:代表 Client 的 IP 咯。
# %T:代表目前的日期与时间
# 与密码有关的设定项目
security = share #share, user, domain,三选一,share不需要密码,user使用SMABA服务器本身账户密码,domain使用外部密码
# 修改一下打印机的加载方式
load printers = no #不需要打印服务
# 2. 分享的资源设定方面:
[temp] #<==分享资源名称
comment = Temporary file space #<==简单的解释此资源
path = /tmp #<==实际 Linux 分享的目录
writable = yes #<==是否可写入?在此例为是的
browseable = yes #<==能不能被浏览到资源名称
guest ok = yes #<==单纯分享时,让用户随意登入的设定值
[root@www ~]# testparm #启动服务之前通过这个命令检查smb.conf的语法配置是否正确
选项与参数:
-v :查阅完整的参数设定,连同默认值也会显示出来!
[root@www ~]# /etc/init.d/smb start
[root@www ~]# /etc/init.d/nmb start
#记得服务开机启动也要打开,这个方法省略。
# linux下查看samba共享的资源并挂载使用的方法
[root@www ~]# smbclient -L [//主机或IP] [-U 使用者账号]
选项与参数:
-L :仅查阅后面接的主机所提供分享的目录资源;
-U :以后面接的这个账号来尝试取得该主机的可使用资源
[root@www ~]# mount -t cifs //127.0.0.1/temp /mnt
# windows下使用的方法简单,所以省略。
需要密码的SAMBA共享的部署
# 1. 开始配置重要的 smb.conf !
[root@www ~]# vim /etc/samba/smb.conf
[global]
workgroup = study_linux
netbios name = jet_server
server string = This is jet's samba server
unix charset = utf8
display charset = utf8
dos charset = cp950
log file = /var/log/samba/log.%m
max log size = 50
load printers = no
security = user #<==这行就是重点,改成 user .
passdb backend = tdbsam #<==使用的是 TDB 数据库格式!
# 2. 分享的资源设定方面:注释 temp 加入 homes 与 project
[homes] #<==分享的资源名称
comment = Home Directories
browseable = no #<==除了使用者自己外,不可被其他人浏览
writable = yes #<==挂载后可擦写此分享
create mode = 0664 #<==建立档案的权限为 664
directory mode = 0775 #<==建立目录的权限为 775
[project] #<==就是那三位使用者的共享资源
comment = smbuser's project
path = /home/project #<==实际的 Linux 上面的目录位置
browseable = yes #<==可被其他人所浏览到资源名称(非内容)
writable = yes #<==可以被写入
write list = @users #<==写入者有哪些人的意思,开放给users群组。
# 2. 每次改完 smb.conf 你都需要重新检查一下语法正确否!
[root@www ~]# testparm
# 3. 设定目录实际权限
[root@www ~]# mkdir /home/project
[root@www ~]# chgrp users /home/project
[root@www ~]# chmod 2770 /home/project
[root@www ~]# ll -d /home/project
drwxrws---. 2 root users 4096 Jul 13 13:15 /home/project
# 4. 设定samba的使用者账号,这个账号必须存在于/etc/passwd
# 4.1 先来建立所需要的各个账号,但假设 student 已经存在了!
[root@www ~]# useradd -G users smb1
[root@www ~]# useradd -G users smb2
[root@www ~]# useradd -G users smb3
[root@www ~]# echo 1234 | passwd --stdin smb1
[root@www ~]# echo 1234 | passwd --stdin smb2
[root@www ~]# echo 1234 | passwd --stdin smb3
# 4.2 使用 pdbedit 指令功能增加samba账号
[root@www ~]# pdbedit -L [-vw] #<==单纯的察看帐户信息
[root@www ~]# pdbedit -a|-r|-x -u 账号 #<==新增/修改/删除账号
[root@www ~]# pdbedit -a -m -u 机器账号 #<==与 PDC 有关的机器码
#选项与参数:
# -L :列出目前在数据库当中的账号与 UID 等相关信息;
# -v :需要搭配 -L 来执行,可列出更多的讯息,包括家目录等数据;
# -w :需要搭配 -L 来执行,使用旧版的 smbpasswd 格式来显示数据;
# -a :新增一个可使用 Samba 的账号,后面的账号需要在 /etc/passwd 内存在者;
# -r :修改一个账号的相关信息,需搭配很多特殊参数,请 man pdbedit;
# -x :删除一个可使用 Samba 的账号,可先用 -L 找到账号后再删除;
# -m :后面接的是机器的代码 (machine account),与 domain model 有关!
# 实际操作如下:
# 4.3 创建samba账户:
[root@www ~]# pdbedit -a -u smb1
new password: <==输入 1234 这个密码
retype new password: <==再输入一次!
Unix username: smb1 <==底下为输入正确后的显示结果!
……(更多省略)……
[root@www ~]# pdbedit -a -u smb2
[root@www ~]# pdbedit -a -u smb3
[root@www ~]# pdbedit -a -u student
# 4.4 查询目前已经存在的 Samba 账号
[root@www ~]# pdbedit -L
smb1:2004:
smb3:2006:
smb2:2005:
student:505:
# 仅会列出账号与 UID 而已
# 4.5 尝试修改与删除 smb3 这个账号看看
[root@www ~]# smbpasswd smb3
New SMB password:
Retype new SMB password:
# 修改密码比较特殊,管理密码参数是使用 pdbedit,修改密码得要用 smbpasswd
# 4.6 删除smb3账户,此时你就看不到 smb3 这个用户!
[root@www ~]# pdbedit -x -u smb3
[root@www ~]# pdbedit -Lw
# 5. 启动samba服务,开机启动的方法省略。
[root@www ~]# /etc/init.d/smb restart
[root@www ~]# /etc/init.d/nmb restart
# 6. 测试samba服务
#Windows的客户端很简单,所以省略;
#linux客户端测试方法如下:
# 1. 先用匿名登录试看看!
[root@www ~]# smbclient -L //127.0.0.1
Enter root's password: <==直接按下 [Enter] 即可。
Anonymous login successful <==有看到匿名的字样了!
Domain=[study_linux] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
Sharename Type Comment
--------- ---- -------
project Disk smbuser's project
IPC$ IPC IPC Service (This is vbird's samba server)
....(底下省略)....
# 2. 再使用 smb1 这个账号登入试看看
[root@www ~]# smbclient -L //127.0.0.1 -U smb1
Enter smb1's password: <==输入 smb1 在 pdbedit 所建立的密码!
Domain=[study_linux] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
Sharename Type Comment
--------- ---- -------
project Disk smbuser's project
IPC$ IPC IPC Service (This is vbird's samba server)
smb1 Disk Home Directories <==多了这玩意儿!
....(底下省略)....
[root@www ~]# mount -t cifs //127.0.0.1/smb1 /mnt -o username=smb1
Password: <==确定是输入正确的密码喔!
# 此时 /home/smb1/ 与 /mnt 应该拥有相同的档名,如果不同,记得关闭selinux。
客户端使用SAMBA的方法
# windows客户端使用网上邻居和增加网络磁盘的方法非常直观,这里就不再演示。
# linux使用SAMBA的方法如下
# smbclient:查询网上邻居分享的资源,以及使用类似 FTP 的方式上传/下载网上邻居
咱们的 Samba 有提供 Linux 网上邻居的客户端功能!也就是说 Linux 可以挂载 Samba 服务器也能挂载 Windows 提供的网上邻居!主要是透过 smbclient 来观察,再以 mount 来挂载文件系统。先来介绍一下 smbclient 这个指令吧:
# 1. 关于查询的功能,例如查出 192.168.100.254 的网上邻居数据
[root@clientlinux ~]# smbclient -L //[IP|hostname] [-U username]
[root@clientlinux ~]# smbclient -L //192.168.100.254 -U smb1
# 2. 利用类似 FTP 的方式登入远程主机 , 了解下即可,实际不会这么用。
[root@clientlinux ~]# smbclient '//[IP|hostname]/资源名称' [-U username]
# 意思是使用某个账号来直接登入某部主机的某个分享资源,举例如下:
[root@clientlinux ~]# smbclient '//192.168.100.254/smb1' -U smb1
Enter smb1's password:
Domain=[study_linux] OS=[Unix] Server=[Samba 3.5.4-68.el6_0.2]
smb: \> dir
# 在 smb: \> 底下其实就是在 //192.168.100.254/dmtsai 这个目录底下!所以,
# 我们可以使用 dir, get, put 等常用的 ftp 指令来进行数据传输了!
? :列出所有可以用的指令,常用!
cd :变换到远程主机的目录
del :杀掉某个档案
lcd :变换本机端的目录
ls :察看目前所在目录的档案
dir :与 ls 相同
get :下载单一档案
mget:下载大量档案
mput:上传大量档案
put :上传单一档案
rm :删除档案
exit:离开 smbclient 的软件功能
# 其他的指令用法请参考 man smbclient 。
# 3. 类似于Windows建立网络磁盘的方式使用,常用这种方法。
[root@clientlinux ~]# mount -t cifs //IP/分享资源 /挂载点 [-o options]
选项与参数:
-o 后面接的参数 (options) 常用的有底下这些:
username=你的登入账号:例如 username=smb1
password=你的登入密码:需要与上面 username 相对应啊!
iocharset=本机的语系编码方式,如 big5 或 utf8 等等;=
codepage=远程主机的语系编码方式,例如繁体中文为cp950
# 范例一:以 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,codepage=cp950
# 显示网上邻居的方法
[root@clientlinux ~]# smbtree [-bDS]
选项与参数:
-b :以广播的方式取代主要浏览器的查询
-D :仅列出工作组,不包括分享的资源
-S :列出工作组与该工作组下的计算机名称 (NetBIOS) 不包括各项资源目录