写在前面
- 考试顺便整理
- 博文内容整理 使用 Ansible 部署 samba 客户端和服务端
- 理解不足小伙伴帮忙指正
对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》
涉及到的文件
[student@workstation filestorage-automation]$ tree .
.
├── ansible.cfg
├── inventory
├── smb_client.yml
├── smb_server.yml
├── smb_vars.yml
└── templates└── smb.conf.j2[student@workstation filestorage-automation]$
涉及到的 主机清单
[student@workstation filestorage-automation]$ cat inventory
[servers]
serverd.lab.example.com[clients]
servera.lab.example.com
serverb.lab.example.com
serverc.lab.example.com
[student@workstation filestorage-automation]$
这里我们使用 serverd 做服务端,使用 servera,b,c 做客户端
[student@workstation filestorage-review]$ cat ansible.cfg
[defaults]
inventory=inventory
remote_user=devops
ansible 配置文件 ,使用 devops 作ssh 用户
samba 对应的配置文件的 jija 模版
[student@workstation filestorage-automation]$ cat templates/smb.conf.j2
[global]workgroup = SAMBAsecurity = userpassdb backend = tdbsamsmb encrypt = requiredserver min protocol = SMB3[{{ share_name }}]path = {{ shared_dir }}write list = @{{ allowed_group }}
[student@workstation filestorage-automation]$
通过模版配置文件,我们可以看到使用的是最基本的配置文件,下面为涉及到的变量
[student@workstation filestorage-review]$ cat smb_vars.yml
---
shared_dir: /srv/developers
share_name: devdata
mount_point: /devs_data# User account for mounting the share
samba_usermount: sambamount
samba_passmount: redhatallowed_group: developers
[student@workstation filestorage-review]$
服务端部署
服务端需要执行的剧本
- 安装
Samba
软件包:使用yum模块安装Samba软件包。 - 创建Linux和Samba用户:创建一个用于挂载共享的Linux和Samba用户。
- 创建Linux组:创建一个用于具有写访问权限的用户组。
- 创建Samba用户:为Samba用户创建密码,并将其添加到Samba用户数据库中。
- 创建目录:使用file模块创建要共享的目录,并设置所有者、组和权限。
- 配置Samba:使用template模块将SMB配置文件模板复制到目标位置。
- 启动SMB服务:使用service模块启动和启用SMB服务。
- 开放Samba防火墙服务:使用firewalld模块开启Samba防火墙服务。
- 定义处理程序:定义名为 reload smb 的处理程序,用于在配置更改后重新加载SMB服务。
[student@workstation filestorage-automation]$ cat smb_server.yml
---
- name: Share a directory with SMBhosts: serverd.lab.example.combecome: truevars_files:- smb_vars.ymltasks:- name: the samba package is installedyum:name: sambastate: present# Creating the Linux and Samba user for the multiuser mount.# That user is only used to mount the share.- name: the Linux user for Samba mount existsuser:name: "{{ samba_usermount }}"shell: /sbin/nologincreate_home: nosystem: yes- name: the Samba user for Samba mount existscommand: smbpasswd -s -a {{ samba_usermount }}args:stdin: "{{ samba_passmount }}\n{{ samba_passmount }}"# Group and users with write access to the share- name: the Linux group existsgroup:name: "{{ allowed_group }}"system: yes- name: the Linux users exist for Samba usersuser:name: "{{ item['name'] }}"shell: /sbin/nologingroups:- "{{ allowed_group }}"loop: "{{ samba_users }}"no_log: true- name: the Samba users existcommand: smbpasswd -s -a {{ item['name'] }}args:stdin: "{{ item['password'] }}\n{{ item['password'] }}"loop: "{{ samba_users }}"no_log: true- name: the directory existsfile:path: "{{ shared_dir }}"owner: rootgroup: "{{ allowed_group }}"mode: '2775'state: directorysetype: samba_share_t- name: the directory is sharedtemplate:src: templates/smb.conf.j2dest: /etc/samba/smb.confowner: rootgroup: rootmode: '0644'setype: samba_etc_tnotify: reload smb- name: the smb service is started and enabledservice:name: smbstate: startedenabled: yes- name: the samba firewall service is openedfirewalld:service: sambastate: enabledimmediate: yespermanent: yeshandlers:- name: reload smbservice:name: smbstate: reloaded
[student@workstation filestorage-automation]$
客户端配置
- 安装
cifs-utils
软件包:使用yum模块确保目标主机上安装了cifs-utils软件包。 - 创建凭据文件:使用copy模块创建一个凭据文件(/etc/samba/creds.txt),其中包含SMB用户名和密码。用户名和密码从samba_usermount和samba_passmount变量中获取。
- 挂载SMB共享:使用mount模块挂载SMB共享。path参数指定本地系统上的挂载点,src参数指定SMB共享的位置(//serverd.lab.example.com/{{ share_name }})。opts参数指定挂载选项,包括凭据文件路径(/etc/samba/creds.txt)、multiuser模式和seal安全选项。fstype参数将文件系统类型指定为cifs。
- 创建Linux用户:使用user模块在目标主机上创建Linux用户。用户名和密码从samba_users变量中获取。密码使用SHA-512算法以’redhatsalt’作为盐值进行哈希处理。
[student@workstation filestorage-automation]$ cat smb_client.yml
---
- name: Access an SMB sharehosts: servera.lab.example.combecome: truevars_files:- smb_vars.ymltasks:- name: the cifs-utils package is installedyum:name: cifs-utilsstate: present- name: the credential file existscopy:content: "username={{ samba_usermount }}\n\password={{ samba_passmount }}\n"dest: /etc/samba/creds.txtowner: rootgroup: rootmode: '0600'no_log: true- name: the SMB share is mountedmount:path: "{{ mount_point }}"src: "//serverd.lab.example.com/{{ share_name }}"opts: "credentials=/etc/samba/creds.txt,multiuser,seal"state: mountedfstype: cifs- name: the Linux users existuser:name: "{{ item.name }}"shell: /bin/bashpassword: "{{ item.password | \password_hash('sha512', 'redhatsalt') }}"loop: "{{ samba_users }}"no_log: true
[student@workstation filestorage-automation]$
博文部分内容参考
© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 😃
红帽服务管理与自动化(RH358)
授课笔记
© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)