xml地图|网站地图|网站标签 [设为首页] [加入收藏]
文件管理,通过Samba实现Linux与Windows间的文件共享
分类:操作系统

Samba

Samba,是用来让Linux系列的操作系统与Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做连结的自由软件,最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享(Linux与Linux之间的资源共享更多用NFS实现)。
组成Samba运行的有两个服务,一个是SMB,另一个是NetBIOS。SMB是Samba的核心启动服务,主要负责建立Samba服务器与Samba客户机之间的对话,验证用户身份并提供对文件和打印系统的访问,监听139 TCP端口(增强版SMB协议CIFS直接监听445端口,CIFS不需要NetBIOS协议);而NetBIOS服务是负责解析,提供浏览网络上的共享资源列表,监听UDP端口137和138。

(0) 写在前面

文件管理

实现Samba

  • 安装Samba:

    [root@smaba ~]# lsb_release -r Release: 7.2.1511 [root@smaba ~]# yum -y install samba [root@smaba ~]# rpm -qi samba Name : samba Epoch : 0 Version : 4.7.1 Release : 6.el7 Architecture: x86_64 [root@smaba ~]# systemctl stop firewalld.service [root@smaba ~]# setenforce 0

  • Samba相关配置:

      主配置文件:/etc/samba/smb.conf   主程序:nmbd(NetBIOS Name Server Daemon)、smbd(SMB/CIFS Daemon)   Unit文件:smb.service和nmb.service

    其中/etc/samba/smb.conf文件常见参数:   全局配置: [global]

    workgroup=MYGROUP  #工作组名
    server string=Samba Server Version %v  #服务器信息介绍
    netbios name=MYSERVER  #用netbios名来指定服务
    interfaces=[interface1 interface2...|address1 address2...]  #用于让samba服务监听多个网络接口或IP
    hosts allow=[address1 address2...]  #指定允许访问的主机IP
    log file=/var/log/samba/log.%m  #指定日志存放路径,%m为来访的主机名
    max log size=50  #定义日志文件最大容量为50K
    security=user  #设置samba服务的安全认证方式为user
    passdb backend=tdbsam  #定义用户后台的类型为tdbsam,其他类型还有smbpasswd、ldapsam
    load prints=yes  #设置是否共享打印机
    cups options=raw  #打印机选项
    

      其它配置: [homes]:为每个samba用户定义其是否能够通过samba服务访问自己的家目录 [printers]:定义打印服务 [自定义共享目录]:定义共享的文件系统   常用指令: comment=STRING:注释 path=/PATH/TO/FILENAME:当前共享所映射的文件系统路径 browseable=YES:是否可浏览,指是否可被所有用户查看 pulibc=YES:是否允许匿名访问 browseable=No:是否公开目录 writable=YES:是否可写 read only=no|yes:是否为只读 write list=/PATH/TO/user_list|USERNAME:拥有写权限的用户列表 directory mask=MASK:新建目录的权限值 force directory mode=MASK:配合directory mask使用,使得目录权限值生效 create mask=MASK:新建文件的权限值 force create mode=MASK:配合create mask使用,使得文件权限值生效   更多参数可通过命令 man smb.conf 查看。

  • 自定义共享目录:

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

        comment=shared dir through samba
        path=/samba_dir
        writable=yes
    

    [root@samba ~]# mkdir /samba_dir #创建共享文件 [root@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 "[print$]" Processing section "[shared_dir]" Loaded services file OK. Server role: ROLE_STANDALONE

  • samba服务默认的验证模式为user,因此需要创建samba用户数据库:

    samba帐号必须存在于Linux系统中(/etc/passwd),而其密码却需要单独维护。创建samba用户数据库有专门的命令:pdbedit 和 smbpasswd。   pdbedit [options] account   options:    -a USERNAME:创建samba用户    -x:删除samba用户

      -L:列出samba用户列表
      -Lv:列出用户详细信息列表
    

      smbpasswd [options] USERNAME   options:    -a:添加账号    -x:删除账号    -d:禁用账号    -e:启用账号 [root@samba ~]# useradd samba_user1 [root@samba ~]# pdbedit -a samba_user1 new password: retype new password: Unix username: samba_user1 [root@samba ~]# useradd samba_user2 [root@samba ~]# smbpasswd -a samba_user2 New SMB password: Retype new SMB password: Added user samba_user2.

  •  windows主机测试:

    # 启动服务 [root@samba ~]# systemctl start smb.service [root@samba ~]# systemctl start nmb.service

    # 客户端测试

  •  可以看到,用户登录后无法在/samba_dir下创建目录,明明已经设置了 writable=yes。这是因/samba_dir目录的属主和属组均为root,其他用户没有写权限。进行如下修改:

    [root@samba ~]# groupadd samba [root@samba ~]# usermod -G samba samba_user1 [root@samba ~]# usermod -G samba samba_user2 [root@samba ~]# id samba_user1 uid=1005(samba_user1) gid=1005(samba_user1) groups=1005(samba_user1),1007(samba) [root@samba ~]# id samba_user2 uid=1006(samba_user2) gid=1006(samba_user2) groups=1006(samba_user2),1007(samba) [root@samba ~]# ll -d /samba_dir drwxr-xr-x. 2 root root 6 Jun 29 17:19 /samba_dir [root@samba ~]# chown :samba /samba_dir [root@samba ~]# chmod g+w /samba_dir [root@samba ~]# ll -d /samba_dir drwxrwxr-x. 2 root samba 6 Jun 29 17:19 /samba_dir

  • windows主机重新测试:

图片 1

linux主机进行测试:

# 挂载访问。注意,此处访问的是/shared_dir,配置文件/etc/samba/smb.conf中 [] 定义的名称。
[root@client ~]# mount -t cifs //192.168.4.119/shared_dir /mnt -o username=samba_user1
Password for samba_user1@//192.168.4.119/shared_dir:  ******
[root@client ~]# ls /mnt
hello.txt  test
[root@client ~]# touch /mnt/hello
[root@client ~]# ls /mnt
hello  hello.txt  test
# 使用smbclient客户端访问
[root@client ~]# yum install -y samba-client
[root@client ~]# smbclient //192.168.4.119/shared_dir -U samba_user2  #交互式访问
Enter SAMBAsamba_user2's password: 
Try "help" to get a list of possible commands.
smb: > ls
  .                                   D        0  Tue Jul  3 17:07:35 2018
  ..                                 DR        0  Fri Jun 29 17:19:56 2018
  test                                D        0  Tue Jul  3 15:42:01 2018
  hello.txt                           A        0  Tue Jul  3 17:07:31 2018
  hello                               N        0  Tue Jul  3 17:07:35 2018

        121055488 blocks of size 1024. 116173648 blocks available
smb: > 
[root@client ~]# smbclient -L //192.168.4.119/shared_dir -U samba_user1  #查看共享情况
Enter SAMBAsamba_user1's password: 

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    shared_dir      Disk      shared dir through samba
    IPC$            IPC       IPC Service (Samba 4.7.1)
    samba_user1     Disk      Home Directories
Reconnecting with SMB1 for workgroup listing.

    Server               Comment
    ---------            -------

    Workgroup            Master
    ---------            -------
    SAMBA                HAPPINESS
    WORKGROUP            DESKTOP-L064DV0

 

有些名词可能需要解释一下。(也可以先不看这一节,在后面看到有疑惑再上来看相关解释)

#1.Linux文件系统层次结构

$PS1和交互式运行(running interactively): 简单地来说,交互式运行就是在终端上输入指令运行,非交互式运行就是执行sh文件。交互式运行的时候echo $PS1会输出一长串字符。非交互式运行echo $PS1,会输出#或$$代表普通用户,#代表root。非交互式运行是不会执行bashrc文件的配置内容的,这点需要注意一下,因为平常都在终端上执行指令,很容易忽略这一点:在bashrc中配置的东西,在执行sh文件的时候就失效了。

 图片 2图片 3

启动bash shell:就是启动一个bash shell进程,通常可以理解为打开一个终端。需要注意的是如果你在终端输入sh后会发现自己又进入另一个shell命令行(注意这不是交互式运行,可以echo $PS1验证),这个时候其实fork了一个shell 子进程(会复制一份原终端shell进程的全局变量),如果你在这个shell命令行又输入了一次sh,那么相当于fork的shell子进程又fork了一个shell子进程,这个时候就启动了三个bash shell进程。

#2.绝对路径与相对路径

输入exit或者ctrl-d可以退出当前shell,这里需要连续exit两次才可以回到原来的终端shell进程(这个时候就变回一个shell进程了)。

绝对路径:完全限定的名称,从根目录(/)开始查找,路径的写法“一定由根目录/写起”。

source profile或source bashrc:source一个sh文件,就是把sh文件的内容加载到本shell环境中执行。可以理解为:执行sh是非交互式运行;在终端source sh文件,相当于在终端执行sh文件的指令,就是交互式运行了。

相对路径:从当前所在目录开始查找,不会以/开头。

 

例如:

(1) profile和bashrc

/root/ 和/home/kiosk为绝对路径

配置环境变量一般在这两种文件中。先讲讲什么时候执行,后面再介绍这两种文件做了什么。

usr/share和 Desktop为相对路径

profile在系统登录后执行,只在登录系统时执行一次,包括针对系统的/etc/profile针对用户的~/.profile。

#3.路径导航

bashrc在每次启动bash shell(打开终端或者在终端输入sh)后执行,包括针对系统的/etc/bash.bashrc针对用户的~/.bashrc(这里注意一下我的ubuntu里是/etc/bash.bashrc,其它系统可能是/etc/bashrc)

pwd //显示当前所在目录

cat /etc/profile
cat /etc/bash.bashrc
cat ~/.profile
cat ~/.bashrc

cd //更改或切换目录的命令

 

几个特殊的目录:

(2) 环境变量

. 代表此层目录

因为要配置环境变量,所以要对环境变量有所了解。shell中的环境变量分为全局变量和局部变量。

.. 代表上一层目录

blogger="piligrimHui"  这样定义的为局部变量
export blogger="pilgrimHui" 这样定义的为全局变量(export这个变量,则升级为全局变量)

- 代表前一个工作目录

 

~ 代表“目前使用者身份”所在的主文件夹

本文由澳门新葡亰手机版发布于操作系统,转载请注明出处:文件管理,通过Samba实现Linux与Windows间的文件共享

上一篇:phpldapadmin具体设置,目录属性 下一篇:没有了
猜你喜欢
热门排行
精彩图文