欢迎各位兄弟 发布技术文章
这里的技术是共享的
CIFS/SMB
CIFS: Common Internet File System # 通用Internet文件系统 (通用英特网文件系统)
SMB: Service Message Block # 服务信息块
NetBIOS: 网络基本输入输出系统
windows 也可以映射网络驱动器
windows 是基于 CIFS/SMB协议的,基于主机名称访问,显示对方的资源名称,基于 NetBIOS的工作机制
samba 跨windows 与 linux 平台 共享文件
CIFS 是一个协议,也是一个文件系统,是Linux和Windows都支持的网络共享文件系统
netbios
137/udp(netbios ) 138/udp(netbios )
139/tcp(netbios ) 445/tcp(共享文件的)
iptables 要开放这几个端口
samba 要关掉 Selinux
SMB 灵机一动,改成了 samba (桑巴舞跟它名字一样)
Winbind 能够让linux主机(samba)加入 windows 的AD域当中的 进程
基于 NetBIOS,CIFS/SMB,Winbind 能够将Linux 做成 Windows 的域控制器的
coups
一般安装完系统后 samba 都会安装的
[root@mail ~]# yum list all samba*
Loaded plugins: product-id, security, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
file:///media/cdrom/Server/repodata/repomd.xml: [Errno 5] OSError: [Errno 2] 没有那个文件或目录: '/media/cdrom/Server/repodata/repomd.xml'
Trying other mirror.
Installed Packages
samba-client.i386 3.0.33-3.39.el5_8 installed
samba-common.i386 3.0.33-3.39.el5_8 installed
Available Packages
samba.i386 3.0.33-3.39.el5_8 cdrom
samba-swat.i386 3.0.33-3.39.el5_8 cdrom
samba3x.i386 3.6.6-0.136.el5 cdrom
samba3x-client.i386 3.6.6-0.136.el5 cdrom
samba3x-common.i386 3.6.6-0.136.el5 cdrom
samba3x-doc.i386 3.6.6-0.136.el5 cdrom
samba3x-domainjoin-gui.i386 3.6.6-0.136.el5 cdrom
samba3x-swat.i386 3.6.6-0.136.el5 cdrom
samba3x-winbind.i386 3.6.6-0.136.el5 cdrom
samba3x-winbind-devel.i386 3.6.6-0.136.el5 cdrom
[root@mail ~]#
先卸掉 samba 3.0 的 # samba-client 是客户端 ,samba-common 是客户端和服务端都要用到的通用组件 (可以不用卸载,直接用 3.0的,马哥使用3x (samba 3.5)的目的,是为了 演示)
[root@mail ~]# rpm -e samba-client samba-common
samba3x-swat 是 samba的 web服务器访问工具 swat (samba web access tools)
# samba3x 是服务器端 samba3x-client 是客户端 ,samba3x-common 是客户端和服务端都要用到的通用组件
[root@mail yum.repos.d]# mount /dev/cdrom /media/cdrom/
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@mail ~]# yum -y install samba3x samba3x-client samba3x-common
启动 samba 后,会启动两个进程
nmbd:提供 NetBIOS 137 138 139 端口
smbd:提供 可以理解成Share (文件共享协议) service message block 的简写? 445端口
winbindd: (加入域的话,还要启动这个进程,跟windows域结合起来工作的)(一般情况下,默认不启动它)
服务脚本
/etc/rc.d/init.d/smb 不是init.d/smbd,因为它会控制 nmbd,smbd 及更多进程的启动
配置文件
/etc/samba 下面
smb.conf 主配置文件
[root@mail ~]# ls /etc/samba
lmhosts smb.conf smbusers
# lmhosts 就是 local machine hosts
# windows 下 hosts->wins ->dns->lmhosts 查名称解析的顺序
# smbusers 就是把 linux 用户映射成 windows 用户 ( 比如 root 映射成 administrator )
# samba 用户首先是系统用户,然后密码(不是系统密码)在samba自身文件里面存放,在第一次创建用户后自动生成到这个目录里面
[root@mail ~]#
[root@mail ~]# cd /etc/samba/
[root@mail samba]# ls
lmhosts smb.conf smbusers
[root@mail samba]# cp smb.conf smb.conf.bak
[root@mail samba]#
[root@mail samba]# vim smb.conf #它的配置风格类似于windows的 ini 的配置风格; windows 注册表之前就是INI文件,但INI追溯不容易,才出现注册表的
# 井号开头注释,纯注释 分号开头也是注释,分号开头的是可以启用的参数(或指令)(或选项)
# 下面的等号前后通常都有空格
======Global Settings===========
[global]
-------- Network Related Options ------
workgroup = MYGROUP # 工作组 (windows的工作组,默认是 WORKGROUP ?)
server string = Samba Server Version %v #鼠标悬于网上连接的电脑,显示的描述内 容 %v 就是宏,,仅供这个软件使用,可以看作变量(常量) 这是v是version,是版本的意思
netbios name = MYSERVER #就是主机名,若未启用,就是本主机名的第一段,(比如 www.magedu.com 主机名就是 www )
--------- Logging Options -----------
log file = /var/log/samba/log.%m # %m (machine)也是宏表示客户端主机名称(IP)
max log size = 50 # 日志文件最大为多大
---- Standalone Server Options --
security = user # 这里指的是安全级别 可选值 user,share(遭反对),server(遭反对),
passdb backend = tdbsam # 密码存放的形式, tdb格式存储的sam文件
----- Printing Options -------
load printers = yes # 默认是加载打印机的
cups options = raw #哪种驱动程序 cups (common unix print server (system) 通用unix打印服务) raw 机制是什么意思
======Shared Definitions=========
[homes] #定义每一个用户可以访问自己的家目录的,不同的用户显示的结果不一样
comment = Home Directory # 纯注释信息,表示自己的家目录
browseable = no # 是否能够被看到,被浏览到,(在网上邻居,(即网络共享中)中是否可以被看到?),,no 除了自己,别人看不到
writable = yes # 是否具有写权限
[printers] # 这是共享打印机
comment = All Printers # 纯注释信息,这里表示所有打印机
path = /var/spool/samba # 打印在什么地方,这是一个缓冲池
browseable = no # 是否能够被看到, no 打印机不需要被浏览到的,不需要在网络共享中看到,直接在打印机中找就可以了
guest ok = no # 不能被访问,是否允许来宾账号访问的(匿名可以直接访问,当然指定了user级别就不允许匿名了???),guest ok = no 跟 public=no是一个道理
writable = no # 是否可写,打印机不可能往里面建文件的
printable = yes # 是否可打印
[print$] #这是共享打印机驱动
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = @printadmin root
force group = @printadmin
create mask = 0664
directory mask = 0775
共享目录的时候,用到的指令有下面这些 这些选项的 等于号(=) 左右 有空格
[shared_name] :共享名称
comment = :注释
path = :共享的路径
browseable = :是否可以被浏览
public (guest ok) = :是否能够被所有用户访问(读)的
read only = : 是否是只读的 ( read only 与 writable 只要用一个就行了吧 )
writable = : 是否可写
write list = :具有写权限的用户列表 user1,user2 @group(+group)组内用户都可写
valid users =:这个共享允许哪些用户访问,白名单 (valid_users invalid_users 一般不同时使用,若同时使用,则白名单生效 )
invalid users =: 黑名单
我们想把 linux 上的 /share/test 目录共享出去
[tools]
下图是 windows 工作组
[root@mail samba]# mkdir /share/test -pv
mkdir: 已创建目录 “/share”
mkdir: 已创建目录 “/share/test”
[root@mail samba]#
[root@mail samba]# pwd
/etc/samba
[root@mail samba]# vim smb.conf
#结尾添加
[tools]
comment = Share Testing
path = /share/test
public = yes
writable = yes
[root@mail samba]# testparm # 专门测试 /etc/samba/smb.conf 有没有语法问题
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[tools]"
Loaded services file OK.
Server role: ROLE_STANDALONE #这是一个独立运行的服务器
Press enter to see a dump of your service definitions
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
idmap config * : backend = tdb
cups options = raw
[homes]
comment = Home Directories
read only = No
browseable = No
[printers]
comment = All Printers
path = /var/spool/samba
printable = Yes
print ok = Yes
browseable = No
[tools]
comment = Share Testing
path = /share/test
read only = No
guest ok = Yes
[root@mail samba]#
启动 smb 服务
[root@mail samba]# service smb start
启动 SMB 服务: [确定]
[root@mail samba]#
启动 nmb 服务 ? ( 也不懂了,难道不要启动 nmb 服务 ) #似乎 smb 包含了 smbd,nmbd等服务,所以不需要启动nmb(nmbd)服务
[root@mail samba]# service nmb start
启动 NMB 服务: [确定]
[root@mail samba]#
selinux 没开启
[root@mail samba]# getenforce
Permissive
[root@mail samba]#
[root@mail samba]# netstat -tunlp # 137 138端口没看到 只看到了 139 445 端口,,难道137,138都特定到了 139 端口上
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN 3856/./hpiod
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:32803 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3869/php-fpm
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4221/mysqld
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 15271/smbd
tcp 0 0 0.0.0.0:875 0.0.0.0:* LISTEN 7276/rpc.rquotad
tcp 0 0 0.0.0.0:685 0.0.0.0:* LISTEN 3471/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3421/portmap
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 4109/vsftpd
tcp 0 0 192.168.1.85:53 0.0.0.0:* LISTEN 3796/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3796/named
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3890/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 3904/cupsd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 4394/master
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 3796/named
tcp 0 0 0.0.0.0:892 0.0.0.0:* LISTEN 7292/rpc.mountd
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 15271/smbd
tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN 3861/python
tcp 0 0 :::995 :::* LISTEN 4258/dovecot
tcp 0 0 :::139 :::* LISTEN 15271/smbd
tcp 0 0 :::110 :::* LISTEN 4258/dovecot
tcp 0 0 :::80 :::* LISTEN 4434/httpd
tcp 0 0 :::22 :::* LISTEN 3890/sshd
tcp 0 0 ::1:953 :::* LISTEN 3796/named
tcp 0 0 :::445 :::* LISTEN 15271/smbd
udp 0 0 0.0.0.0:32769 0.0.0.0:* -
udp 0 0 0.0.0.0:2049 0.0.0.0:* -
udp 0 0 0.0.0.0:51487 0.0.0.0:* 4662/avahi-daemon
udp 0 0 0.0.0.0:679 0.0.0.0:* 3471/rpc.statd
udp 0 0 0.0.0.0:682 0.0.0.0:* 3471/rpc.statd
udp 0 0 192.168.1.85:53 0.0.0.0:* 3796/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 3796/named
udp 0 0 0.0.0.0:5353 0.0.0.0:* 4662/avahi-daemon
udp 0 0 0.0.0.0:875 0.0.0.0:* 7276/rpc.rquotad
udp 0 0 0.0.0.0:111 0.0.0.0:* 3421/portmap
udp 0 0 0.0.0.0:631 0.0.0.0:* 3904/cupsd
udp 0 0 0.0.0.0:892 0.0.0.0:* 7292/rpc.mountd
udp 0 0 :::58429 :::* 4662/avahi-daemon
udp 0 0 :::5353 :::* 4662/avahi-daemon
[root@mail samba]#
windows 下
# netstat -an #可以看到 137(udp) 138(udp) 139(tcp) 445(tcp)(马哥说没共享,应该看不到445端口,但是我看到了 445 端口,是因为我的windows电脑上共享了某个目录)
增加个用户账号
[root@mail samba]# useradd eucalyptus #建用户的时候 ,会同时创建同名的组?
[root@mail samba]# id eucalyptus
uid=2533(eucalyptus) gid=2533(eucalyptus) groups=2533(eucalyptus) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[root@mail samba]#
[root@mail samba]# man smbpasswd
smbpasswd - change a user´s SMB password
-a (add) 添加为samba的用户账号
-d (disabled) 禁用 samba的用户账号
-e (enable) 启用 samba的用户账号
-x 删除 samba的用户账号
刚刚建立的 eucalyptus 用户要加为 samba帐号
[root@mail samba]# smbpasswd -a eucalyptus
New SMB password: #为了安全,密码最好不要与系统账号的密码一样
Retype new SMB password:
Added user eucalyptus.
[root@mail samba]#
[root@mail samba]# ll
总计 48
-rw-r--r-- 1 root root 20 2013-08-06 lmhosts
-rw-r--r-- 1 root root 9863 08-07 15:35 smb.conf
-rw-r--r-- 1 root root 9778 08-07 13:45 smb.conf.bak
-rw-r--r-- 1 root root 97 2013-08-06 smbusers
[root@mail samba]#
在windows下访问看看
我自家的 windows 电脑上没有问题
我公司的 windows 电脑上 会出现资源管理器崩溃的情况 (可能是因为公司的电脑里有蓝牙驱动吧 见 /node-admin/15404 )
感觉打开很慢 (至少第一次打开很慢) 不行的话,重启电脑看看
家目录和共享的tools
新建文件 abc.txt
[root@mail samba]# su - eucalyptus
看到了 abc.txt
[eucalyptus@mail ~]$ ls
abc.txt
[eucalyptus@mail ~]$
在 tools 目录下不能写文件
[eucalyptus@mail ~]$ exit
logout
由下面可见 eucalyptus 对 tools(/share/test/) 没有写权限
[root@mail samba]# ll -d /share/test/
drwxr-xr-x 2 root root 4096 06-22 10:50 /share/test/
[root@mail samba]#
给 eucalyptus 读写执行权限
[root@mail samba]# setfacl -m u:eucalyptus:rwx /share/test/
[root@mail samba]#
此时 就可以写文件了
可以看到 abc.txt 了
[root@mail samba]# ls /share/test/
abc.txt
[root@mail samba]#
windows 下建的文件属主默认就有执行权限
[root@mail samba]# ls -l /share/test/
总计 4
-rwxr--r-- 1 eucalyptus eucalyptus 0 06-22 11:27 abc.txt
[root@mail samba]#
当然可以使用 umask 让它没有执行权限
我们可以 映射网络驱动器了
可看到盘符了