Samba

这里是配置 Samba 的相关命令 , 包括配置文件以及注意事项的总结 , 至于什么是 Samba , 怎么架设 Samba 等问题可以 Google 之.
这个是繁体-简体说法对照表 , 不习惯的同学可以猛击试试 :-)

注意 :
1) Samba 是架构在 NetBIOS 上的 , 且以 NetBIOS over TCP/IP 这项技术克服 NetBIOS 无法跨路由的问题 .
2) 在 Unix Like 上面可以分享档案资料的 file system 是 NFS , 在 Windows 上面使用的 " 网路上的芳邻 " 所使用的档案系统则称为 Common Internet File System , CIFS .
3) 修改配置文件前要备份配置文件!
# cp source-file source-file.bk

Samba 使用的 daemons

nmbd : 这个 daemon 是用来管理工作群组 , NetBIOS name 等等的解析 . 主要利用 UDP 协定开启 port 137, 138 来负责名称解析的任务 .
smbd : 这个 daemon 的主要功能就是用来管理 Samba 主机分享的目录 , 档案与印表机等等 .  主要利用可靠的 TCP 协定来传输资料 , 开放的埠口为139及445(不一定存在)  .

Samba 的工作模式

peer/peer (Workgroup model)
domain model
还有一种是 PDC (Primary Domain Controller) , 这里不涉及 .

Samba 涉及的主要配置文件

1) /etc/samba/smb.conf :  smb.conf 是 Samba 的主要设定档名 . 这个档案主要是设定工作群组 ,   NetBIOS 名称以及分享的目录等相关设定 .

2) /etc/samba/lmhosts : 这个档案的主要目的在对应 NetBIOS name 与该主机名称的 IP  , 事实上他有点像是 /etc/hosts 的功能 . 不过这个 lmhosts 对应的主机名称是 NetBIOS name . 由于目前Samba 的功能越来越强大 , 所以通常只要您一启动 Samba 时 , 他就能自己捉到 LAN 里面的相关电脑的 NetBIOS name 对应 IP 的资讯 , 因此这个档案通常可以不用设定了 .

3) /etc/samba/smbpasswd : 当我们设定的 Samba 伺服器是较为严密的 , 需要使用者输入帐号与密码后才能登入的状态时 , 使用者的密码预设就是放置在这里 (当然 , 您可以自行在 smb.conf 里面设定密码放置的地方及密码档名 , 不过我们这里都以预设的状态来说明 )  .

注意 :  这个档案因为包含了使用者的密码 , 当然权限方面要较为注意 ! 这个档案的拥有者需要是 root  , 且权限设定为 600 才行 .

4) /etc/samba/smbusers : 由于 Windows 与 Unix-like 在管理员与访客的帐号名称不一致 , 分别为administrator 及 root , 为了对应这两者之间的帐号关系 , 可以使用这个档案来设定 . 不过这个档案的使用必须要经由 smb.conf 内的 “username map " 设定项目来启动才行 .

5) /usr/share/doc/samba-<版本> : 这个目录包含了 Samba 的所有相关的技术手册 .

6) man smb.conf : 学习 Linux 的都懂的 .

Samba 涉及的主要命令

1) testparm
这个指令主要在检验 Samba 设定档 smb.conf 的语法正确与否 , 当你编辑过 smb.conf 时 , 请务必使用这个指令来检查一次 , 避免因为打字错误引起的困扰 .
类似 : 使用 exportfs 命令检查 /etc/exports 文件以及使用 mount -a 来检查 /etc/fstab .

2) smbd, nmbd
曾经提过的两个主要 daemon 就在这里 .
启动 , 关闭 , 重启服务
# service smb start/stop/restart
或者 /etc/init.d/smb start/stop/restart

3) smbstatus
列出目前的 SMB server 的状态 .

# smbstatus [-pS] [-u username]
-p : 列出已经使用 Samba 连线的程序 PID
-S : 列出已经被使用的资源分享状态
-u : 只列出某个使用者相关的分享资料

范例一 : 列出目前主机完整的Samba状态
# smbstatus

4) smbpasswd
如果您的 Samba 设定的较为严格 , 需要规定使用者的帐号与密码 , 那么那个密码档案的建立就需要使用 smbpasswd 来建置才可以 .

# smbpasswd [-adem] username
如 果没有加上任何一个参数 , 例如 “smbpasswd dmtsai " 时 , 这表示: 修改 Samba 密码档(/etc/Samba/smbpasswd) 里面的 dmtsai 这个帐号的密码 .  也就是说 , 密码档里面已经存在一个dmtsai 的帐号
-a :在 smbpasswd 密码档里面新增一个使用者
-d :让在 smbpasswd 密码档里面的某个帐号的使用者暂时无法使用 Samba . 当多了该的参数时 , 在 smbpasswd 里面某个栏位会多出一个 D 的参数
-e :与 -d 参数相反 , 让某个帐号恢复使用

注意 :  Samba 使用者帐号必须要存在于 Linux 系统当中 (/etc/passwd) , 但是 Samba 的密码与 Unix 的密码档案并不相同 . Samba 仅只是 Linux 底下的一套软体 , 使用 Samba 来进行 Linux 档案系统时 , 还是需要以  Linux 系统下的 UID 与 GID 为准则 .

5) smbclient
当你的 Linux 主机想要藉由 " 网路上的芳邻 " 的功能来查看别台电脑所分享出来的目录与装置时 , 就可以使用 smbclient 来查看啦 ! 这个指令也可以使用在自己的 Samba 主机上面 , 用来查看是否设定成功 .

# smbclient -L [//主机或IP] [-U使用者帐号]
-L : 仅查阅后面接的主机所提供分享的目录资源
-U : 以后面接的这个帐号来尝试取得该主机的可使用资源

6) smbmount
在 Windows 上面我们可以设定 " 网路磁碟机 " 来连接到自己的主机上面 , 同样的 , 在 Linux 上面 , 我们可以透过 smbmount 来将远端主机分享的档案与目录挂载到自己的 Linux 主机上面 . 不过 , 其实我们也可以直接使用 mount 这个指令来进行同样的功能 .

# smbmount //IP/分享资源/挂载点[-o options]
-o后面接的参数(options)常用的有底下这些 :
username=你的登入帐号 : 例如 username=dmtsai
password=你的登入密码 : 需要与上面 username 相对应啊
iocharset=本机的语系编码方式 , 如 big5 或 utf8 等等
codepage=远端主机的语系编码方式 , 例如繁体中文为 cp950

范例一 : 以 dmtsai 的身份将其家目录挂载至 /mnt/Samba 中
# smbmount //127.0.0.1/dmtsai /mnt/Samba -o username=dmtsai,password=pw_test,codepage=cp950

注意 : mount 这个指令如果有支援 smbfs 或者 cifs 的话 , 那也就可以直接挂载网路上的芳邻分享出来的目录了.
# mount -t smbfs //127.0.0.1/dmtsai /mnt/Samba -o username=dmtsai,password=pw_test,codepage=cp950,iocharset=big5
或者
# mount -t cifs //127.0.0.1/dmtsai /mnt/Samba -o username=dmtsai,password=pw_test,codepage=cp950,iocharset=big5

7) nmblookup
有点类似nslookup . 重点在查出 NetBIOS name .

# nmblookup [-S] [-U wins IP] [-A IP] name
-S : 除了查询 name 的 IP 之外 , 亦会找出该主机的分享资源与 MAC 等
-U : 后面一般可接 Windows 的主要名称管理伺服器的 IP  , 可与 -R 互用
-R : 与 -U 互用 , 以 Wins 伺服器来查询某个 Netbios name
-A : 相对于其他的参数 ,  -A 后面可接 IP , 借 IP 来找出相对的 NetBIOS 资料

范例一 : 藉由本机找出 vbirdserver 这部主机的 IP 位址
# nmblookup -U localhost vbirdserver
范例二 : 找出 vbirdserver 的 MAC 与 IP 等资讯
# nmblookup -S vbirdserver

Samba 的安全性管理

1) 利用 iptables 来管理

2) 除了 iptables 必须要开放之外 , 您还需要将管制 daemon 是否能够进出的 TCP Wrappers 开放才行 /etc/hosts.allow  & /etc/hosts.deny

3) smb.conf的设定值 . 通常我们只要使用 hosts allow 即可 , 那么没有写入这个设定项目的其他来源就会被拒绝连线的 . 举例来说 , 如果你只想要让本机 , 192.168.1.11 , 192.168.1.21 使用Samba 而已 , 那么可以这样写:
hosts allow = 127. 192.168.1.11 192.168.1.21

4) 利用Quota限制使用者空间使用

5) SeLinux

注意 : 如果你的 Samba 伺服器需要挂载含有中文的 partition 时 , 譬如说你将原本 Windows XP 的 FAT32 档案系统挪到 Linux 系统下 , 此时如果用一般模式来挂载该分割槽时 , 一些中文档名可能会无法被顺利的列印出来 .
#mount -t vfat -o iocharset=big5,codepage=950 /dev/hd[ad][1-16] /mount/point
其中iocharset 指的是本机的语系编码方式 ,  codepage 则与远端软体有关 .

详细文档 , 请猛击鸟哥–>这里 .

  • http://www.freetstar.com freetstar

    很详细,比较全面…再详细点就可以上IBM中国区的linux版了,医院归来?

    • http://jaseywang.info jaseywang

      一点都不详细,我只是总结了,没涉及细节…还没去hos….明天回家休养….

  • http://pityonline.info pityonline

    当其它电脑向 samba 共享目录添加文件时,默认的属主与属组为 nobody,不知道兄弟有没有办法让其它电脑添加的文件默认属主与属组为 ubuntu 的默认帐户?

    • http://jaseywang.info jaseywang

      添加一个 ubuntu 的用户 , # smbpasswd -a ubuntu …这样应该可以了.