欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux samba服务器配置

程序员文章站 2022-11-18 18:10:34
samba服务器配置 配置文件 1. /etc/samba/smb.conf samba的主要配置文件,可设置全局参数和共享目录的参数 2. /etc/samba/lmhosts 通过hostname来访问samba: 3. /etc/samba/smbusers 由于windows和linux里的 ......

samba服务器配置

配置文件

  1. /etc/samba/smb.conf
    samba的主要配置文件,可设置全局参数和共享目录的参数
  2. /etc/samba/lmhosts
    通过hostname来访问samba:
  3. /etc/samba/smbusers
    由于windows和linux里的管理员和访客账号名称不一致,可使用此配置文件来设置一个映射,比如administrator映射成root:
  4. /etc/sysconfig/samba
    配置smbd,nmbd启动时带的参数
  5. /var/lib/samba/private/{passdb.tdb, secrets.tdb}
    管理samba的用户账号/密码时,会用到的数据库档案

可用命令

smbd, nmbd:smbd提供文件和打印共享服务器,nmbd提供netbios名称服务和浏览支持,帮助客户端定位服务器,处理所有基于udp的协议
tdbdump, tdbtool:samba使用了tdb数据库,可以使用tdb工具来查看数据库内容
smbstatus:查看samba的状态
smbpasswd, pdbedit:服务器功能,用于管理samba的用户账号和密码,早期是使用smbpasswd命令,后来因为使用了tdb数据库,所以推荐使用pdbedit命令来管理用户数据
mount.cifs:用来挂载分享目录
smbclient:samba客户端
nmblookup:查找netbios name
smbtree:未知,可能是用来查找网络邻居的吧
testparm:验证smb.conf文件的内容是否合法

工作模式

samba服务器有5种工作模式,分别为:

  1. share,用户对samba服务器的访问不需要身份验证,允许匿名访问,用户的访问权限仅由相应用户对共享文件的访问权限决定
  2. user,使用用户名和密码访问samba服务器,
  3. server,使用另外一台服务器专门用来做身份验证,samba服务只提供文件和打印机共享服务
  4. domain,域模式,不常用
  5. ads,最新的一种工作模式,也不太常用

通过设置security选项即可设置samba的工作模式:security = share

配置项

全局

全局必须的配置项有:workgroup,netbios name,serverstirng,log file,max log size,security,passdb backend,load printer

    workgroup = rhel_6.3
    server string = samba server version %v
    netbios name = rhel
    # logs split per machine
    log file = /var/log/samba/log.%m
    # max 500kb per log file, then rotate
    max log size = 500
    security = user
    passdb backend = tdbsam
    load printers = no

共享目录

不需要密码的共享

需要将全局参数中的security设置成share(暂不清楚,在user工作模式下通过设置guest ok好像也可以,需要验证)
最小化配置:

[test]
    comment = test
    path = /tmp
    read only = no
    guest ok = yes
    create mask = 644

其中:
read only默认为yes,表示只允许读,不允许写,所以需要修改
guest ok默认是no,表示不允许匿名访问
create mask默认是744,导致客户端创建的文件都是可执行文件,所以需要修改

注意:
writable和writeable是同义词
writeable和read only是反义同义词
writeable默认为no
read only默认为yes
完整配置需要配置available和browseable,不过这两个默认都是yes

用户名/密码方式的共享

需要将全局参数中的security设置成user

[win]
    comment = win
    path = /home/win
    read only = yes
    create mask = 644
    valid users = win

这种方式首先需要使用root权限添加一个账户,然后使用smbpasswd -a xxx在samba数据库添加此用户的samba密码
输入smbpasswd -a xxx 时会直接让用户设置这个账户的samba密码
这个用户信息保存在tdb数据库里
修改密码:root权限下输入smbpasswd user_name即可修改user_name的samba密码

配置文件验证

使用testparm可以验证smb.conf文件的内容是否合法

[rhel@localhost ~]$ testparm
load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum windows limit (16384)
processing section "[test]"
loaded services file ok.
server role: role_standalone
press enter to see a dump of your service definitions

[global]
    workgroup = test
    netbios name = testnet
    server string = samba server version %v
    security = share
    log file = /var/log/samba/log.%m
    max log size = 50
    load printers = no

[test]
    comment = test
    path = /tmp
    read only = no
    guest ok = yes

客户端本地验证samba服务器共享的内容

smbclient -l //127.0.0.1
当samba服务器的工作模式被设置成share模式时,需要在上面的命令后面加-n选项表示不请求密码

[rhel@localhost ~]$ smbclient -l //127.0.0.1 -n
domain=[test] os=[unix] server=[samba 3.5.10-125.el6]

    sharename       type      comment
    ---------       ----      -------
    test            disk      test
    ipc$            ipc       ipc service (samba server version 3.5.10-125.el6)
domain=[test] os=[unix] server=[samba 3.5.10-125.el6]

    server               comment
    ---------            -------
    testnet              samba server version 3.5.10-125.el6

    workgroup            master
    ---------            -------
    test                 testnet

查看samba数据库里的用户信息

pdbedit -l

防火墙和selinux

关闭防火墙:/etc/init.d/iptables stop
设置selinux为宽容模式:setenforce 0
获取selinux的状态: getenforce

排障

排障总共4种方式,

  1. nmap扫描是否有139和445端口被监听
  2. 映射网络驱动器
  3. net use命令查看当前有哪些连接
  4. 重启(对于修改了密码后登录不上非常有效)

常见问题场景:
1、windows访问时提示找不到网络路径,并带有错误码0x80070035,表示samba服务器未监听139和445端口(通过nmap可以看到)
Linux samba服务器配置
Linux samba服务器配置

2、直接在windows的文件管理器里输入网络路径后提示"找不到xxxx,请检查拼写并重试",且无错误码,
Linux samba服务器配置
通过映射网络驱动器发现windows给出了详细的信息:smb1协议不安全,需要使用smb2以上的安全的协议,
Linux samba服务器配置
这种情况一般出现在win 10上,解决办法有两个,一是升级samba服务器,二是给win 10添加smb1支持(在程序与功能里面可以启用)

3、windows访问时提示无权限
Linux samba服务器配置
一般来说应该是和selinux有关
解决办法也有两个:

  1. 如果共享的是家目录,使用setsebool -p samba_enable_home_dirs on命令即可,
    如果是添加的目录,使用命令chcon -t samba_share_t /path给这个目录添加samba_share_t标签即可
  2. 关闭selinux

原文:
#---------------
# selinux notes:
#
# if you want to use the useradd/groupadd family of binaries please run:
# setsebool -p samba_domain_controller on
#
# if you want to share home directories via samba please run:
# setsebool -p samba_enable_home_dirs on
#
# if you create a new directory you want to share you should mark it as
# "samba_share_t" so that selinux will let you write into it.
# make sure not to do that on system directories as they may already have
# been marked with othe selinux labels.
#
# use ls -ldz /path to see which context a directory has
#
# set labels only on directories you created!
# to set a label use the following: chcon -t samba_share_t /path
#
# if you need to share a system created directory you can use one of the
# following (read-only/read-write):
# setsebool -p samba_export_all_ro on
# or
# setsebool -p samba_export_all_rw on
#
# if you want to run scripts (preexec/root prexec/print command/...) please
# put them into the /var/lib/samba/scripts directory so that smbd will be
# allowed to run them.
# make sure you copy them and not move them so that the right selinux context
# is applied, to check all is ok use restorecon -r -v /var/lib/samba/scripts
#
#--------------

版本

3.5.10里使用的是smb1协议,被证明有漏洞,不推荐使用。

windows客户端访问符号链接失败

在/etc/samba/smb.conf里添加如下的内容即可正常

[global] 
unix extensions  = no

[share]
follow symlinks = yes
wide links = yes

其中:

  • unix extensions是为了在samba里支持符号链接,硬链接等特性,主要给unix下的samba客户端使用,对windows客户端没有任何用处,所以在windows客户端访问时需要关掉这个选项,这个是选项是默认启用的。
  • follow symlinks,这个参数控制samba服务器是否会跟随特定samba共享目录(非global选项)里的符号链接,默认是启用的。
  • wide links,这个参数控制是否能够创建一个链接指向samba服务器未共享的目录(samba服务器默认允许创建指向已共享的目录的链接),可能会导致一个安全问题,所以这个参数默认不启用

man 5 smb.conf中的解释如下

unix extensions (g)
    this boolean parameter controls whether samba implements the cifs unix
    extensions, as defined by hp. these extensions enable samba to better
    serve unix cifs clients by supporting features such as symbolic links,
    hard links, etc... these extensions require a similarly enabled client,
    and are of no current use to windows clients.
    
    note if this parameter is turned on, the wide links parameter will
    automatically be disabled.
    
    default: unix extensions = yes

follow symlinks (s)
    this parameter allows the samba administrator to stop smbd(8) from
    following symbolic links in a particular share. setting this parameter to
    no prevents any file or directory that is a symbolic link from being
    followed (the user will get an error). this option is very useful to stop
    users from adding a symbolic link to /etc/passwd in their home directory
    for instance. however it will slow filename lookups down slightly.
    
    this option is enabled (i.e.  smbd will follow symbolic links) by default.
    
    default: follow symlinks = yes

wide links (s)
    this parameter controls whether or not links in the unix file system may
    be followed by the server. links that point to areas within the directory
    tree exported by the server are always allowed; this parameter controls
    access only to areas that are outside the directory tree being exported.
    
    note: turning this parameter on when unix extensions are enabled will
    allow unix clients to create symbolic links on the share that can point to
    files or directories outside restricted path exported by the share
    definition. this can cause access to areas outside of the share. due to
    this problem, this parameter will be automatically disabled (with a
    message in the log file) if the unix extensions option is on.
    
    default: wide links = no

如何判断smb.conf里的某些字段的默认选项

比如follow symlinks字段默认是yes, 则当在smb.conf里配置了这个字段等于yes时在testparm里不会显示这个字段,如果配置成no则会显示