14.4. 配置示例
以下示例提供了 SELinux 如何补充 Samba 服务器以及如何维护 Samba 服务器功能的实际演示。
14.4.1. 共享您创建的目录
以下示例创建新目录,并通过 Samba 共享该目录:
- 确认已安装 samba 、samba-common 和 samba-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
- 以 root 用户身份使用
mkdir
工具来创建一个新的顶级目录,以通过 Samba 共享文件:~]# mkdir /myshare
- 使用
touch
实用程序 root 创建一个空文件。此文件稍后用于验证 Samba 共享正确挂载:~]# touch /myshare/file1
- SELinux 允许 Samba 对标有
samba_share_t
类型的文件进行读写,只要/etc/samba/smb.conf
文件相应地设置了 Linux 权限。以 root 用户身份输入以下命令,将标签更改添加到 file-context 配置中:~]# semanage fcontext -a -t samba_share_t "/myshare(/.*)?"
- 以 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
- 以 root 用户身份编辑
/etc/samba/smb.conf
。将以下内容添加到该文件的底部,以通过 Samba 共享/myshare/
目录:[myshare] comment = My share path = /myshare public = yes writable = no
- 需要 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'!
错误。 - 启动 Samba 服务:
~]# systemctl start smb.service
- 输入以下命令列出可用的共享,其中 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 --------- -------
- 以 root 用户身份使用
mkdir
实用程序创建新目录。此目录将用于挂载myshare
Samba 共享:~]# mkdir /test/
- 以 root 用户身份运行以下命令,将
myshare
Samba 共享挂载到/test/
,将 username 替换为第 7 步中的用户名:~]# mount //localhost/myshare /test/ -o user=username
输入 username 的密码,该密码在第 7 步中配置。 - 输入以下命令查看在第 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 共享该文件,允许读和写权限。本例假定安装了 httpd、samba、samba-common、samba-client 和 wget 软件包:
- 以 root 用户身份,创建一个
/var/www/html/file1.html
文件。将以下内容复制并粘贴到该文件中:<html> <h2>File being shared through the Apache HTTP Server and Samba.</h2> </html>
- 输入以下命令查看
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 不能。 - 启动 Apache HTTP 服务器:
~]# systemctl start httpd.service
- 更改到用户具有写入权限的目录,并输入以下命令。除非对默认配置进行了更改,否则这个命令会成功:
~]$ 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]
- 以 root 用户身份编辑
/etc/samba/smb.conf
。将以下内容添加到该文件的底部,以通过 Samba 共享/var/www/html/
目录:[website] comment = Sharing a website path = /var/www/html/ public = no writable = no
/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 访问任何类型的。- 启动 Samba 服务:
~]# systemctl start smb.service