14.4. 配置示例


以下示例提供了 SELinux 如何补充 Samba 服务器以及如何维护 Samba 服务器功能的实际演示。

14.4.1. 共享您创建的目录

以下示例创建新目录,并通过 Samba 共享该目录:
  1. 确认已安装 samba 、samba-commonsamba-client 软件包:
    ~]$ rpm -q samba samba-common samba-client
    package samba is not installed
    package samba-common is not installed
    package samba-client is not installed
    
    如果没有安装这些软件包,请以 root 用户身份使用 yum 工具安装它们:
    ~]# yum install package-name
  2. 以 root 用户身份使用 mkdir 工具来创建一个新的顶级目录,以通过 Samba 共享文件:
    ~]# mkdir /myshare
  3. 使用 touch 实用程序 root 创建一个空文件。此文件稍后用于验证 Samba 共享正确挂载:
    ~]# touch /myshare/file1
  4. SELinux 允许 Samba 对标有 samba_share_t 类型的文件进行读写,只要 /etc/samba/smb.conf 文件相应地设置了 Linux 权限。以 root 用户身份输入以下命令,将标签更改添加到 file-context 配置中:
    ~]# semanage fcontext -a -t samba_share_t "/myshare(/.*)?"
  5. 以 root 用户身份使用 restorecon 工具应用标签更改:
    ~]# restorecon -R -v /myshare
    restorecon reset /myshare context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0
    restorecon reset /myshare/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0
    
  6. 以 root 用户身份编辑 /etc/samba/smb.conf。将以下内容添加到该文件的底部,以通过 Samba 共享 /myshare/ 目录:
    [myshare]
    comment = My share
    path = /myshare
    public = yes
    writable = no
    
  7. 需要 Samba 帐户来挂载 Samba 文件系统。以 root 身份输入以下命令来创建 Samba 帐户,其中 username 是现有 Linux 用户。例如,smbpasswd -a testuser 为 Linux testuser 用户创建一个 Samba 帐户:
    ~]# smbpasswd -a testuser
    New SMB password: Enter a password
    Retype new SMB password: Enter the same password again
    Added user testuser.
    
    如果您输入上述命令,指定系统上不存在的帐户的用户名,则会导致 Cannot locate Unix account for 'username'! 错误。
  8. 启动 Samba 服务:
    ~]# systemctl start smb.service
  9. 输入以下命令列出可用的共享,其中 username 是第 7 步中添加的 Samba 帐户。提示输入密码时,在第 7 步中输入分配给 Samba 帐户的密码(版本号可能有所不同):
    ~]$ smbclient -U username -L localhost
    Enter username's password:
    Domain=[HOSTNAME] OS=[Unix] Server=[Samba 3.4.0-0.41.el6]
    
    Sharename       Type      Comment
    ---------       ----      -------
    myshare         Disk      My share
    IPC$            IPC       IPC Service (Samba Server Version 3.4.0-0.41.el6)
    username        Disk      Home Directories
    Domain=[HOSTNAME] OS=[Unix] Server=[Samba 3.4.0-0.41.el6]
    
    Server               Comment
    ---------            -------
    
    Workgroup            Master
    ---------            -------
    
  10. 以 root 用户身份使用 mkdir 实用程序创建新目录。此目录将用于挂载 myshare Samba 共享:
    ~]# mkdir /test/
  11. 以 root 用户身份运行以下命令,将 myshare Samba 共享挂载到 /test/,将 username 替换为第 7 步中的用户名:
    ~]# mount //localhost/myshare /test/ -o user=username
    输入 username 的密码,该密码在第 7 步中配置。
  12. 输入以下命令查看在第 3 步中创建的 file1 文件:
    ~]$ ls /test/
    file1
    

14.4.2. 共享网站

可能不能使用 samba_share_t 类型标记文件,例如要在 /var/www/html/ 目录中共享网站。对于这些情况,请使用 samba_export_all_ro 布尔值共享任何文件或目录(不包括当前标签),允许只读权限,或使用 samba_export_all_rw 布尔值共享任何文件或目录(不包括当前标签),允许读和写权限。
以下示例在 /var/www/html/ 中为网站创建一个文件,然后通过 Samba 共享该文件,允许读和写权限。本例假定安装了 httpdsambasamba-commonsamba-clientwget 软件包:
  1. 以 root 用户身份,创建一个 /var/www/html/file1.html 文件。将以下内容复制并粘贴到该文件中:
    <html>
    <h2>File being shared through the Apache HTTP Server and Samba.</h2>
    </html>
    
  2. 输入以下命令查看 file1.html 的 SELinux 上下文:
    ~]$ ls -Z /var/www/html/file1.html
    -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1.html
    
    该文件使用 httpd_sys_content_t 进行标记。默认情况下,Apache HTTP 服务器可以访问此类型,但 Samba 不能。
  3. 启动 Apache HTTP 服务器:
    ~]# systemctl start httpd.service
  4. 更改到用户具有写入权限的目录,并输入以下命令。除非对默认配置进行了更改,否则这个命令会成功:
    ~]$ wget http://localhost/file1.html
    Resolving localhost... 127.0.0.1
    Connecting to localhost|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 84 [text/html]
    Saving to: `file1.html.1'
    
    100%[=======================>] 84          --.-K/s   in 0s      
    
    `file1.html.1' saved [84/84]
    
  5. 以 root 用户身份编辑 /etc/samba/smb.conf。将以下内容添加到该文件的底部,以通过 Samba 共享 /var/www/html/ 目录:
    [website]
    comment = Sharing a website
    path = /var/www/html/
    public = no
    writable = no
    
  6. /var/www/html/ 目录使用 httpd_sys_content_t 类型进行标记。默认情况下,Samba 无法访问使用此类型标记的文件和目录,即使 Linux 权限允许这样做。要允许 Samba 访问,请启用 samba_export_all_ro 布尔值:
    ~]# setsebool -P samba_export_all_ro on
    如果您不希望更改在重新引导后保留,则不要使用 -P 选项。请注意,启用 samba_export_all_ro 布尔值允许 Samba 访问任何类型的。
  7. 启动 Samba 服务:
    ~]# systemctl start smb.service
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.