首页 > 代码库 > 我之我见:samba共享

我之我见:samba共享

目录

1. Samba概述 1

1.1 Samba简介 1

1.2 SMB/CIFS协议 1

1.3 Samba服务基础 1

1.3.1主要软件包 1

1.3.2系统服务脚本 1

1.4共享账号控制 1

1.4.1共享访问控制 1

1.4.2共享账号管理 2

2.配置Samba服务器 2

2.1服务器端操作 3

2.1.1安装samba服务器端程序 3

2.1.2建立samba认证用户nick\hunter 3

2.1.3准备共享文件夹,确认相关权限 3

2.1.4修改samba.conf配置文件,添加documents共享设置,并启用服务 4

2.2从客户机访问documents共享,并验证访问权限 4

2.2.1安装samba客户端程序 4

2.2.2查看服务器共享资源 4

2.2.3使用smbclient命令测试共享访问 5

2.3使用mount命令挂载共享 6

2.3.1手动挂载 6

2.3.2documents配置开机自动挂载 6

2.4通过别名账户访问共享 6

2.4.1建立别名记录文件 6

2.4.2启用别名文件,smbd进程在运行,调整配置后会自动生效,无需重启 6

2.4.3采用别名账号访问documents共享 7

2.4.4documents共享添加客户机地址限制 7

2.4.5测试客户机访问限制 7

2.5配置文件测试工具 7

3.出现的问题 8

3.1把该在服务器端的配置写到了客户端 8

3.2防火墙为开放139445 8

3.3不看提示瞎回车 9

3.4selinux安全上下文 9

 

1. Samba概述

1.1 Samba简介

Samba是在LinuxUNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMBServer Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。

1.2 SMB/CIFS协议

1.2.1 SMB

Server Message Block,服务消息块SMB协议在局域网上用于服务器文件访问和打印的协议

1.2.2 CIFS

Common Internet File System,通用网际文件系统CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机提供服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议在局域网上用于服务器文件访问和打印的协议。像SMB协议一样,CIFS在高层运行,而不像TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议超文本传输协议的一个实现。

1.3 Samba服务基础

1.3.1主要软件包

服务器端:samba

客户端:samba-client、cifs-utils

1.3.2系统服务脚本

/etc/init.d/smb

1.4共享账号控制

1.4.1共享访问控制

共享账号

1:新建共享账号时,必须有同名的系统账户

2:共享账号的密码是独立的

3:访问共享时以共享账号/密码登录、权限取决于对应的系统账号

账号数据库文件

默认采用TDB数据格式       /var/lib/samba/private/passdb.tdb

1.4.2共享账号管理

pdbedit 工具  

1)格式:pdbedit [选项]  [共享账户名]

2)常用管理选项

-a:将制定的系统用户添加为共享账号

-L:查看共享账号信息

-x:删除指定的共享账号

3)案例

[root@localhost ~]# useradd vina                  //建同名系统用户

[root@localhost ~]# pdbedit -a vina                //添加为共享账号

new password:                                 //设置密码

retype new password:                           //确认设置密码

[root@localhost ~]# pdbedit -vL vina               //查看vina账号信息

技术分享

 

[root@localhost ~]# smbpasswd vina             //修改vinasmb密码

New SMB password:                           //输入新密码

Retype new SMB password:                     //再次输入密码

[root@localhost ~]# pdbedit -x vina               //删除vina用户

[root@localhost ~]# pdbedit -vL vina              //查看vina用户信息

Username not found!             

2.配置Samba服务器

将/share/zhang发布为documents共享

2.1服务器端操作

2.1.1安装samba服务器端程序

[root@localhost ~]# yum -y install samba samba-client   

注意:配置各种网络服务时,往往为了测试方便,会将某个应用的服务器端,客户端一起给装上,本次实验也是如此,此外还需要安装samba-common,一般这个系统已经安装。

2.1.2建立samba认证用户nick\hunter

[root@localhost ~]# useradd nick                     //添加系统用户nick

[root@localhost ~]# useradd hunter                   //添加系统用户hunter

[root@localhost ~]# pdbedit -a nick                    //为nick设置共享密码

new password:

retype new password:

[root@localhost ~]# pdbedit -a hunter                  //为hunter设置共享密码

new password:

retype new password:

[root@localhost ~]# pdbedit –L                        //查看共享账号列表

nick:502:

hunter:503:

注意:samba服务器使用独立的共享账号数据库文件,其中的账号名称必须有与它同名的系统用户相对应,以便主机对共享访问的权限进行控制;但共享用户的密码额外设置,可以与系统用户的密码不一样(甚至可不设密码)

2.1.3准备共享文件夹,确认相关权限

[root@localhost ~]# setfacl -m user:hunter:rwx /share/zhang

[root@localhost ~]# getfacl /share/zhang/

getfacl: Removing leading ‘/‘ from absolute path names

# file: share/zhang/

# owner: root

# group: root

user::rwx

user:hunter:rwx

group::r-x

mask::rwx

other::r-x

注意:文件夹默认的权限为755,系统用户nickhunter对其有读取权限,但是没有写入权限。若希望在共享访问时hunter有权限写入,可以通过setfacl命令做相应调整。

为方便客户机下载测试,在/share/zhang下新建一个hello.txt文件

[root@localhost ~]# echo "hello,hello" > /share/zhang/hello.txt

[root@localhost ~]# cat /share/zhang/hello.txt

hello,hello

2.1.4修改samba.conf配置文件,添加documents共享设置,并启用服务

[root@localhost ~]# vim /etc/samba/smb.conf

[documents]

    path = /share/zhang                      //指定共享目录

    public = no                             //不对所有人开放

    read only = yes                          //默认的权限为只读

    valid users = nick,hunter                   //指定合法用户

write list = hunter                        //用户hunter用户可读可写

确保启动smb服务程序,必要时设为开机后自动运行

[root@localhost ~]# service smb restart

[root@localhost ~]# chkconfig smb on

[root@localhost ~]# netstat -anput | grep smbd

tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      2631/smbd           

tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      2631/smbd           

tcp        0      0 :::139                      :::*                        LISTEN      2631/smbd           

tcp        0      0 :::445                      :::*                        LISTEN      2631/smbd          

2.2从客户机访问documents共享,并验证访问权限

2.2.1安装samba客户端程序

[root@xias ~]# yum -y install samba-client cifs-utils

2.2.2查看服务器共享资源

使用smbclient命令结合-L选项可以查看目标主机有哪些共享,此操作不涉及实际的文件资源,因此不需要密码,当提示验证密码时回车即可。

[root@xias ~]# smbclient -L 192.168.1.132         //查看对方的共享资源列表

Enter root‘s password:                         //无密码,直接回车

Anonymous login successful

Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-25.el6_7]

 

        Sharename       Type      Comment

        ---------       ----      -------

        documents       Disk                    //显示对方提供了一个名为documents的磁盘共享目录

        IPC$            IPC       IPC Service (Samba Server Version 3.6.23-25.el6_7)

Anonymous login successful

Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-25.el6_7]

 

        Server               Comment

        ---------            -------

 

        Workgroup            Master

        ---------            -------

2.2.3使用smbclient命令测试共享访问

[root@xias smbdir]# smbclient -U nick //192.168.11.135/documents

Enter nick‘s password:

Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-25.el6_7]

smb: \>ls

  .                                   D        0  Mon Apr 11 01:48:43 2016

  ..                                  D        0  Mon Apr 11 01:46:34 2016

  hello.txt                                   12  Mon Apr 11 01:48:43 2016

 

                36825 blocks of size 524288. 18248 blocks available

smb: \> get hello.txt

getting file \hello.txt of size 12 as hello.txt (0.5 KiloBytes/sec) (average 0.5 KiloBytes/sec)

smb: \> !ls

a.txt  hello.txt

smb: \> put a.txt

NT_STATUS_ACCESS_DENIED opening remote file \a.txt

smb: \> put a.txt

NT_STATUS_ACCESS_DENIED opening remote file \a.txt

smb: \> quit

[root@xias smbdir]# smbclient -Uhunter //192.168.11.135/documents

Enter hunter‘s password:

Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-25.el6_7]

smb: \> ls

  .                                   D        0  Mon Apr 11 01:48:43 2016

  ..                                  D        0  Mon Apr 11 01:46:34 2016

  hello.txt                                   12  Mon Apr 11 01:48:43 2016

 

                36825 blocks of size 524288. 18248 blocks available

smb: \> get hello.txt

getting file \hello.txt of size 12 as hello.txt (0.3 KiloBytes/sec) (average 0.3 KiloBytes/sec)

smb: \> put a.txt

putting file a.txt as \a.txt (0.0 kb/s) (average 0.0 kb/s)

smb: \> quit

2.3使用mount命令挂载共享

2.3.1手动挂载

[root@xias smbdir]# mount -o username=nick,password=1234 //192.168.11.135/documents /mnt/smbdir/                    //通过mount命令挂载documents共享,由于要求用户

                                 认证,因此要结合-o选项指定用户名,密码才能挂上。

[root@xias smbdir]# mount | tail -1

//192.168.11.135/documents on /mnt/smbdir type cifs (rw)

[root@xias smbdir]# df -hT /mnt/smbdir/

Filesystem                 Type  Size  Used Avail Use% Mounted on

//192.168.11.135/documents cifs   18G  8.2G  9.0G  48% /mnt/smbdir

[root@xias smbdir]# ls /mnt/smbdir/

a. txt  hello.txt

2.3.2为documents配置开机自动挂载

[root@xias smbdir]# tail -1 /etc/fstab           //配置开机自动挂载

//192.168.11.135/documents /mnt/smbdir cifs defaults,username=nick,password=1234 0 0

[root@xias smbdir]# umount /mnt/smbdir/      //卸载已挂载目录

[root@xias smbdir]# mount | grep cifs          //确认已卸载

[root@xias smbdir]# mount /mnt/smbdir/       //测试fstab配置

[root@xias smbdir]# mount | grep cifs          //确认挂载结果

//192.168.11.135/documents on /mnt/smbdir type cifs (rw)

2.4通过别名账户访问共享

通过别名账户访问共享,这是为了提升账户安全性,知道账户名,可以暴力破解尝试一下,而不知道用户名,没法破解。

2.4.1建立别名记录文件

Vim /etc/samba/smbusers                    //修改配置文件

# Unix_name = SMB_name1 SMB_name2        //告诉你格式

root = administrator admin

nobody = guest pcguest smbguest              //添加以几行

hunter = hijack

技术分享

 

2.4.2启用别名文件,smbd进程在运行,调整配置后会自动生效,无需重启

[global]

        username map = /etc/samba/smbusers

技术分享

 

技术分享

 

2.4.3采用别名账号访问documents共享

[root@xias ~]# smbclient -U hijack //192.168.11.135/documents

Enter hijack‘s password:

Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-25.el6_7]

smb: \>

技术分享

 

2.4.4为documents共享添加客户机地址限制

Vim /etc/samba/smb.conf

Hosts allow = 192.168.11.135                //允许客户机访问的ip地址

技术分享

 

2.4.5测试客户机访问限制

将ip地址改为其他ip后,作为测试机的客户端不能访问,出现以下提示

技术分享

 

2.5配置文件测试工具

[root@localhost ~]# testparm

技术分享

 

2.6常见配置

workgroup 工作组名称

server string 服务器描述

security user|share安全级别,user为要去用户验证

comment对此共享目录的说明文字

path共享目录的实际位置,方括号的类似于别名

browseable是否可见,no为隐藏共享

public是否所有人可用,等效于guest ok

writeable 是否可写,与read only相反

共享目录的认证配置

设置共享访问权限

valid users = 共享账号

write list = 共享账号

用户名或者 @组名,多个账号之间以逗号分隔

主机地址控制

hosts allow = ip或网段地址

hosts deny = ip或网段地址

3.出现的问题

3.1把该在服务器端的配置写到了客户端

问题:在准备测试别名账号的时候出现以下错误,这是因为配置的时候把配置都写到了客户端,不是在服务器端做的配置。修改之后,正常

技术分享

3.2防火墙为开放139445

问题:在使用smbclient时老提示错误,但是能ping通如下图

解决:这说明服务器是没有down机的,然后查看进程也正常,最终定位防火墙问题,开放服务器的139445端口后,成功。

需要在服务器端开放这两个端口

-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT

常见配置

技术分享

 

3.3不看提示瞎回车

这个报错是自己疏忽大意了,没输密码就直接按回车,每次都是拒绝

技术分享

这个报错应该就是selinux的关系了,当时是执行了下边第一条命令就可以了

技术分享

3.4selinux安全上下文

如果是selinux的问题,设置安全上下文

setsebool -P samba_export_all_rw on

1. samba共享的文件必须用正确的selinux安全上下文标记。

chcon -R -t samba_share_t /tmp/abc

2.如果共享/home/abc,需要设置整个主目录的安全上下文。

chcon -R -r samba_share_t /home

查看samba共享,提示一下

技术分享

这是由于wuhaoshu仅仅只是系统用户,而没有将它加入到samba账户中来,换言之,用来登录samba服务器的账户,首先是一个系统账户,同时还应是samba账户。

smbpasswd -a wuhaoshu


本文出自 “庭中有奇树” 博客,请务必保留此出处http://zhangdl.blog.51cto.com/11050780/1881869

我之我见:samba共享