前言:Linux/Unix主机之间实现文件共享我们可以使用NFS,那么,Linux/Unix和Windows主机之间共享文件怎么实现呢,samba就是解决这个问题的。
Windows网上邻居依赖的协议:
NetBIOS(137/udp,138/udp,139/tcp)
CIFS/SMB 445/tcp 共享文件
Winbindd 让Linux主机加入Windows AD域,AD域使用的LDAP服务器
LDAP(Linux上使用Opneldap)
Windows上访问共享文件使用UNC路径:\\IP\共享名
如果在Linux上实现了上述协议,那么Linux就可以和Windows文件共享了,Linux上使用samba服务来实现。
实现windows访问Linux共享文件:
(1)samba用户控制:
它使用系统用户,密码由samba单独控制。
(2)软件安装:
yum -y install samba.x86_64 samba-client.x86_64 samba-common.x86_64
默认会安装winbind服务,这里我们不做配置。
执行事务
正在安装 : libtalloc-2.1.5-1.el6_7.x86_64 1/7
正在安装 : libtevent-0.9.26-2.el6_7.x86_64 2/7
正在安装 : samba-common-3.6.23-36.el6_8.x86_64 3/7
正在安装 : samba-winbind-3.6.23-36.el6_8.x86_64 4/7
正在安装 : samba-winbind-clients-3.6.23-36.el6_8.x86_64 5/7
正在安装 : samba-3.6.23-36.el6_8.x86_64 6/7
正在安装 : samba-client-3.6.23-36.el6_8.x86_64 7/7
(3)samba进程:
nmbd:提供netbios
smbd:提供文件共享SMB
如果加入winbind,会启动winbind
服务控制脚本:/etc/rc.d/init.d/smb
(4)samba配置文件:
/etc/samba/
smb.conf 主
lmhosts windows上的特有的文件,用于名称解析。host——wins——DNS——lmhosts
smbusers 把linux用户映射成windows用户
smb.conf #开头是纯注释信息,;开头的也是注释,但他是可启用的参数。 大致分为两类: 全局配置:Global Settings 共享定义:Share Definitions Global Settings [global] ----Network Related Options workgroup = WORKGROUP server string = Samba Server Version %v 主机描述信息,一般不输出 netbios name = MYSERVER 主机名 ----Logging Options log file = /var/log/samba/log.%m max log size = 50 ----Standalone Server Options 独立服务进程 security = user 安全级别 passdb backend = tdbsam 用户账号和密码存放格式,模拟的tdb格式存储的sam文件 ----Browser Control Options 浏览控制信息,和domain相关 Share Definitions [homes] 用户家目录访问控制 comment = Home Directories 注释,说明信息 browseable = no 浏览权限 writable = yes [public] 共享名 comment = Network Logon Service path = /home/samba public = yes writable = yes read only = write list = user1,user2, @group,+group valid users = %S 白名单,限制那些用户能访问 invalid users = 例如:/share/test [tools] comment = Share Testing path = /share/test public = yes writable = yes 配置文件测试: testparm [[email protected] ~]# testparm Load smb config files from /etc/samba/smb.conf 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] server string = Samba Server Version %v log file = /var/log/samba/log.%m max log size = 50 client signing = required 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
(5)启动进程:
[[email protected] ~]# service smb start 启动 SMB 服务: [确定] [[email protected] ~]# netstat -anp | grep smb tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 1383/smbd tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1383/smbd tcp 0 0 :::139 :::* LISTEN 1383/smbd tcp 0 0 :::445 :::* LISTEN 1383/smbd unix 2 [ ] DGRAM 11487 1385/smbd unix 2 [ ] DGRAM 11470 1383/smbd
(6)添加用户:
[[email protected] ~]# useradd samba_user [[email protected] ~]# id samba_user uid=501(samba_user) gid=501(samba_user) 组=501(samba_user) 把系统账户加入samba [[email protected] ~]# smbpasswd -a samba_user New SMB password: Retype new SMB password: Added user samba_user.
(7)共享文件权限:
访问权限是由文件系统和samba服务共同控制。
修改文件系统权限:
[[email protected] ~]# ll -d /share/test/ drwxr-xr-x 2 root root 4096 3月 11 16:43 /share/test/ [[email protected] ~]# setfacl -m u:samba_user:rwx /share/test/
(8)Windows UNC访问:
直接访问主机:
\\192.168.31.168\ 输入用户名:samba_user 密码:123456
显示用户家目录及tools共享目录,就像访问本地目录一样,在家目录和tools目录创建文件:home_file.txt,tools.txt
在Linux验证:可以看到在Windows创建的文件有执行权限,这个可以使用samba控制,具体用到时再来研究。
[[email protected] ~]# ll /home/samba_user/ 总用量 0 -rwxr--r-- 1 samba_user samba_user 0 3月 11 16:54 home_file.txt [[email protected] ~]# ll /share/test/ 总用量 0 -rwxr--r-- 1 samba_user samba_user 0 3月 11 16:57 tools.txt [[email protected] ~]#
单独访问tools: \\192.168.31.168\tools 可以在Windows中添加访问位置。
到此,完成Windows访问Linux/Unix文件功能。
实现Linux/Unix访问Windows共享:
(1)Windows创建共享文件,添加win_user用户
(2)Linux主机访问共享:
smbclient //192.168.31.85/win_samba_share -U win_user
[[email protected] ~]$ smbclient //192.168.31.85/win_samba_share -U win_user Enter win_user‘s password: Domain=[DESKTOP-VUBVLHE] OS=[Windows 10 Pro 14393] Server=[Windows 10 Pro 6.3] smb: \> ls . D 0 Sat Mar 11 18:29:23 2017 .. D 0 Sat Mar 11 18:29:23 2017 win_file.txt A 0 Sat Mar 11 18:25:51 2017 60603 blocks of size 524288. 33153 blocks available smb: \> mkdir myfile smb: \> ls . D 0 Sat Mar 11 18:43:55 2017 .. D 0 Sat Mar 11 18:43:55 2017 myfile D 0 Sat Mar 11 18:43:55 2017 win_file.txt A 0 Sat Mar 11 18:25:51 2017 60603 blocks of size 524288. 33153 blocks available smb: \> rmdir win_file.txt NT_STATUS_NOT_A_DIRECTORY removing remote directory file \win_file.txt smb: \> rm win_file.txt smb: \> ls . D 0 Sat Mar 11 18:44:30 2017 .. D 0 Sat Mar 11 18:44:30 2017 myfile D 0 Sat Mar 11 18:43:55 2017 60603 blocks of size 524288. 33153 blocks available smb: \>
(3)挂载至/mnt/win_dir:
确保安装cifs-utils:yum install cifs-utils.x86_64 -y
[[email protected] ~]# mount -t cifs //192.168.31.85/win_samba_share /mnt/win_dir/ -o username=win_user Password: [[email protected] ~]# df -h 文件系统 容量 已用 可用 已用%% 挂载点 /dev/sda3 20G 2.0G 17G 11% / tmpfs 699M 0 699M 0% /dev/shm /dev/sda1 97M 28M 64M 31% /boot //192.168.31.85/win_samba_share 30G 14G 17G 46% /mnt/win_dir [[email protected] ~]# cd /mnt/win_dir/ [[email protected] win_dir]# ls myfile 新建文本文档.txt [[email protected] win_dir]# touch abc [[email protected] win_dir]# ll 总用量 0 -rwxr-xr-x 1 root root 0 3月 11 18:51 abc drwxr-xr-x 1 root root 0 3月 11 18:43 myfile -rwxr-xr-x 1 root root 0 3月 11 18:48 新建文本文档.txt 加入开机自动挂载: [[email protected] mnt]# vim /etc/samba/cred.passwd [[email protected] mnt]# chmod og=--- /etc/samba/cred.passwd [[email protected] mnt]# ll /etc/samba/cred.passwd -rw------- 1 root root 34 3月 11 18:56 /etc/samba/cred.passwd [[email protected] mnt]# cat /etc/samba/cred.passwd username=win_user password=123456 [[email protected] mnt]# umount /mnt/win_dir/ [[email protected] mnt]# df -h 文件系统 容量 已用 可用 已用%% 挂载点 /dev/sda3 20G 2.0G 17G 11% / tmpfs 699M 0 699M 0% /dev/shm /dev/sda1 97M 28M 64M 31% /boot [[email protected] mnt]# mount -a [[email protected] mnt]# df -h 文件系统 容量 已用 可用 已用%% 挂载点 /dev/sda3 20G 2.0G 17G 11% / tmpfs 699M 0 699M 0% /dev/shm /dev/sda1 97M 28M 64M 31% /boot //192.168.31.85/win_samba_share 30G 14G 17G 46% /mnt/win_dir
到此,完成Linux对Windows文件共享的访问。
Linux/Unix之间相互访问:
和访问Windows相似,挂载到文件系统也一样,这里不再赘述。
[[email protected] ~]$ smbclient //192.168.31.168/tools -U samba_user Enter samba_user‘s password: Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.23-36.el6_8] smb: \> ls . D 0 Sat Mar 11 16:57:11 2017 .. D 0 Sat Mar 11 16:43:10 2017 tools.txt A 0 Sat Mar 11 16:57:04 2017 39109 blocks of size 524288. 33197 blocks available smb: \> mkdir jiang smb: \> ls . D 0 Sat Mar 11 16:57:11 2017 .. D 0 Sat Mar 11 16:43:10 2017 jiang D 0 Sat Mar 11 19:44:51 2017 tools.txt A 0 Sat Mar 11 16:57:04 2017 39109 blocks of size 524288. 33197 blocks available smb: \> rmdir jiang smb: \>