红帽RHCE-配置Samba多用户挂载详解

红帽RHCE-配置Samba多用户挂载详解

最近在准备红帽RHCE的考试,这段时间一直在练习。因为我在配置服务这一块完全陌生,包括Samba,nfs,iscsi这些服务都没怎么搭建过。虽然难度并不大,但是作为刚学习的我还是把我不懂的地方记录下来,方便回顾。

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。

CE考试中Samba的题有两道,先是配置samba服务,第二道就是配置多用户挂载。

这两道题都不难,就是一些细节的地方很容易忘记。

先在server0上安装samba服务。因为有的时候装的包很多懒得敲,考试的时候就直接samba*了,虽然和samba有关的全装上了,但这样肯定不会有问题。

yum -y install samba*

setsebool -P samba_export_all_rw=on

这条命令我一开始总是忘记。因为考试时selinux是一直开着的,是取消selinux对samba可写的限制。


setsebool命令是用来修改SElinux策略内各项规则的布尔值。setsebool命令和getsebool命令是SELinux修改和查询布尔值的一套工具组。SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。

setsebool [-P] 布尔值=[0|1]
-P:直接将设置值写入配置文件,该设置数据将来会生效的。

useradd harry ; pdbedit -a harry


pdbedit是samba的用户管理命令
pdbedit -a username:新建Samba账户。
pdbedit -r username:修改Samba账户。
pdbedit -x username:删除Samba账户。
pdbedit -L:列出Samba用户列表,读取passdb.tdb数据库文件。
pdbedit -Lv:列出Samba用户列表详细信息。

接下来就是修改samba的配置文件了,按照题目的要求是修改workgroup=STAFF,然后在文件的最后添加

[common]       #这个是共享名

path = /common      #共享的目录

hosts allow = 172.25.0.0/24     #访问控制允许这个网段的用户访问

然后就是开防火墙了,记住防火墙一定要加–permanent参数,不然下次开机防火墙就失效了。

firewall-cmd –permanent –add-service=samba

firewall-cmd –reload  

firewall-cmd –list-all  #列出当前所有的规则

systemctl restart smb nmb

 systemctl enable smb nmb   #服务开机自启

一定要记得服务开机自启!!!不然题都是白做!!!至关重要!

验证:

到desktop端安装samba客户端

yum -y install samba-client

 smbclient -L server0

这里不用输密码的,直接回车就行。看到共享名就表明成功了。


smbclient命令属于samba套件,它提供一种命令行使用交互式方式访问samba服务器的共享资源。

smbclient(选项)(参数)
smb服务器:指定要连接的smb服务器。

列出某个IP地址所提供的共享文件夹

smbclient -L 198.168.0.1 -U username%password

ftp客户端一样使用smbclient

smbclient //192.168.0.1/tmp  -U username%password

执行smbclient命令成功后,进入smbclient环境,出现提示符:smb:/>
这里有许多命令和ftp命令相似,如cd 、lcd、get、megt、put、mput等。通过这些命令,我们可以访问远程主机的共享资源。
直接一次性使用smbclient命令

smbclient -c "ls"  //192.168.0.1/tmp  -U username%password

smbclient //192.168.0.1/tmp  -U username%password
smb:/>ls

功能一样的。
创建一个共享文件夹

smbclient -c "mkdir share1" //192.168.0.1/tmp -U username%password

如果用户共享//192.168.0.1/tmp的方式是只读的,会提示NT_STATUS_ACCESS_DENIED making remote directory /share1


第二道配置多用户挂载就是在desktop0上多了一个写入/etc/fstab的操作。就省略了一些重复的步骤。

setfacl -m u:chihiro:rwx /devops/

但是这条必须有通过设置acl,使用户chihiro获得目录写的权限。

安装cifs-utils软件包以支持samba的挂载,之前我总是忘记,后面挂载就会出错。

yum -y install cifs-utils   

把挂载条目写入/etc/fstab以使开机自动挂载

vim /etc/fstab

//173.25.0.11/devops /mnt/dev cifs username=kenji,password=atenorth,multiuser,sec=ntlmssp,_netdev 0 0

也就是写入这一段。注解:

  • credentials=/root/smb.cred 用于指定包含挂载用户信息文件,此用户一般是samba服务器里对共享目录具有较低权限的用户(本文使用的rob用户对共享目录权限为只读),文件包含username,password
  • multiuser 关键选项,用于指定使用多用户挂载
  • sec=ntlmssp 指定认证方式(kernel3.8之后是默认选项)
  • _netdev 关键选项,否则系统会启动失败;不写入/etc/fstab文件时,此选项可省略

我之前对里面的各个参数的含义不是很懂,就在网上查了一下含义,不然没理解也记不牢。

mount -a


mount命令用于加载文件系统到指定的加载点。此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux mount命令来手动完成挂载。

mount(选项)(参数)
-V:显示程序版本;
-l:显示已加载的文件系统列表;
-h:显示帮助信息并退出;
-v:冗长模式,输出指令执行的详细信息;
-n:加载没有写入文件“/etc/mtab”中的文件系统;
-r:将文件系统加载为只读模式;
-a:加载文件“/etc/fstab”中描述的所有文件系统。
  • 设备文件名:指定要加载的文件系统对应的设备名;
  • 加载点:指定加载点目录。

df -hT

表明已经挂载上了。

接下来验证多用户访问(在 desktop0上)

useradd mike     //添加普通测试用户

su – mike          //切换到普通用户

cifscreds add -u chihiro server0

向服务器提交用户认证凭据,提供 Samba 用户 chihiro 的密码

验证两次是否能成功写入文件就可以了。


由于我对cifscreds这个命令不是很懂,查手册也没有找到。这里我引用网上的一篇文章关于cifscreds的结论。参考链接:

https://www.jianshu.com/p/c14ddd4d7fbb

  • 切换到其他用户后(除root外),第一次使用cifscreds命令把brian(rw)的用户名和密码加入内核密钥环,成功地获得了brian(rw)所对应的权限
  • 第二次使用cifscreds命令把rob(ro)的用户名和密码加入内核密钥环,并没有获得rob(ro)所对应的权限,此时实际权限还是第一次加入密钥环的brian用户所对应的权限
  • 经实验,使用cifscreds clearall 命令清除内核密钥环的数据后不会马上生效,大概5分钟后才回清除,此后可以成功把其他用户加入到内核密钥环中并生效
  • 切换到其他用户(如:su – user2),第一次把指定的samba用户名和密码加入到内核密钥环中即可成功,但是第二次加入内核密钥环的信息会不生效(解决方法如上一条结论)

把samba搭建中的各个细节注意好,CE考试中就没有问题。写的目的是,一开始我对很多参数都没搞懂过,但我不愿意死记硬背,所以就在网上查了很多资料帮助自己练习。

zgao

如果有什么技术上的问题,可以加我的qq 1761321396 一起交流。