امن سازی سیستم عامل oracle linux 8.9 برای نصب پایگاه داده اوراکل

برای غیر فعال کردن فایل سیستم‌های بدون کاربرد در Oracle Linux و جلوگیری از فعال شدن آن‌ها در هنگام بوت، می‌توانید از دستورات زیر استفاده کنید:

دستور Bash:

این دستورات با استفاده از modprobe ویژگی‌های ماژول‌های لینوکس را برای این فایل سیستم‌ها غیرفعال می‌کنند. برای اطمینان از اینکه این تنظیمات پس از راه‌اندازی مجدد سیستم نیز حفظ شوند، آن‌ها را در فایل /etc/modprobe.d/blacklist.conf اضافه کنید:

echo "install cramfs /bin/true" >> /etc/modprobe.d/blacklist.conf

echo "install freevxfs /bin/true" >> /etc/modprobe.d/blacklist.conf

echo "install jffs2 /bin/true" >> /etc/modprobe.d/blacklist.conf

echo "install hfs /bin/true" >> /etc/modprobe.d/blacklist.conf

echo "install hfsplus /bin/true" >> /etc/modprobe.d/blacklist.conf

echo "install squashfs /bin/true" >> /etc/modprobe.d/blacklist.conf

echo "install udf /bin/true" >> /etc/modprobe.d/blacklist.conf

echo "install autofs /bin/true" >> /etc/modprobe.d/blacklist.conf

دستور Ansible:

یک playbook Ansible برای انجام همین تغییرات می‌تواند به شکل زیر نوشته شود:

---

- name: Disable Unused Filesystems

  hosts: all

  become: yes

  tasks:

    - name: Disable filesystems

      lineinfile:

        path: /etc/modprobe.d/blacklist.conf

        line: "install {{ item }} /bin/true"

        create: yes

      loop:

        - cramfs

        - freevxfs

        - jffs2

        - hfs

        - hfsplus

        - squashfs

        - udf

        - autofs

توضیح عملکرد:

این دستورات با جلوگیری از بارگذاری ماژول‌های نامبرده شده در هنگام بوت، امکان استفاده از این فایل سیستم‌ها را مسدود می‌کنند. این کار به افزایش امنیت سیستم کمک می‌کند چرا که دسترسی به فایل سیستم‌هایی که ممکن است مورد استفاده قرار نگیرند و یا از نظر امنیتی آسیب‌پذیر باشند را محدود می‌کند.

تناقض با Oracle 19.23:

معمولاً Oracle Database نیازی به این فایل سیستم‌ها ندارد، مگر اینکه بخواهید از قابلیت‌های خاصی استفاده کنید که به این فایل سیستم‌ها وابسته باشد. بنابراین، این تغییر معمولاً با نصب Oracle 19.23 تناقضی ایجاد نمی‌کند. توصیه می‌شود در صورت نیاز به این فایل سیستم‌ها در محیط‌های خاص، از غیرفعال کردن آن‌ها اجتناب شود.

 

مطلب شماره دو: ایجاد ساختاری مستقل و افزایش امنیت دایرکتوری‌ها

این مطلب شامل روش‌هایی است برای افزایش امنیت دایرکتوری‌های مهم در سیستم‌های لینوکس که برای نگهداری اطلاعات موقت، داده‌های کاربری و داده‌های سیستم‌های مجازی استفاده می‌شوند.

 

# فایل /etc/fstab را قبل از تغییر بکاپ بگیرید

cp /etc/fstab /etc/fstab.bak

# بررسی و جایگزینی تنظیمات fstab با استفاده از sed

sed -i.bak '/\/home/ s/defaults/defaults,nodev,nosuid,noexec/' /etc/fstab

sed -i.bak '/\/tmp/ s/defaults/defaults,nodev,nosuid,noexec/' /etc/fstab

sed -i.bak '/\/var/ s/defaults/defaults,nodev,nosuid,noexec/' /etc/fstab

sed -i.bak '/\/dev\/shm/ s/defaults/defaults,nodev,nosuid,noexec/' /etc/fstab

# اعمال تغییرات

mount -o remount /tmp

mount -o remount /home

mount -o remount /var

mount -o remount /dev/shm

Ansible:

- hosts: all

  become: yes

  tasks:

    - name: Backup fstab file

      copy:

        src: /etc/fstab

        dest: /etc/fstab.bak

        owner: root

        group: root

        mode: '0644'

    

    - name: Ensure fstab entries are secure

      lineinfile:

        path: /etc/fstab

        regexp: '^UUID={{ item.uuid }}'

        line: 'UUID={{ item.uuid }} {{ item.mount_point }} xfs defaults,nodev,nosuid,noexec 0 0'

        backrefs: yes

      loop:

        - { uuid: "a93e9e3f-2fb0-4cca-bf35-49aa227488c1", mount_point: "/home" }

        - { uuid: "3bef1024-d3f3-4172-be49-bc8f33547653", mount_point: "/tmp" }

        - { uuid: "e6a4c74b-4d40-4499-9cee-33543079dc6b", mount_point: "/var" }

        - { uuid: "b1572be2-66df-44fe-ac8b-4da878a4dfed", mount_point: "/u01" } # if /u01 needs specific options, add them here

    - name: Remount filesystems for changes to take effect

      shell: mount -o remount {{ item.mount_point }}

      loop:

        - { mount_point: "/home" }

        - { mount_point: "/tmp" }

        - { mount_point: "/var" }

        - { mount_point: "/dev/shm" }

برای فعال کردن بیت کنترلی Stickybit بر روی دایرکتوری‌های نوشتنی مثل /tmp، می‌توانید از دستور زیر در Bash استفاده کنید:

# فعال کردن Stickybit برای دایرکتوری /tmp

chmod +t /tmp

Ansible:

- hosts: all

  become: yes

  tasks:

    - name: Ensure sticky bit is set on /tmp

      file:

        path: /tmp

        mode: '1777'

        state: directory

توضیحات:

  1. ایجاد Partition مستقل: ایجاد پارتیشن‌های مجزا برای /tmp, /var, و /home به منظور جلوگیری از تداخل داده‌ها و افزایش امنیت سیستم عامل.
  2. فعال‌سازی Nodev: جلوگیری از ساخت دستگاه‌های مخصوص در این دایرکتوری‌ها.
  3. فعال‌سازی Nosuid: جلوگیری از اجرای برنامه‌هایی با بیت SUID/SGID که می‌توانند امنیت سیستم را به خطر اندازند.
  4. فعال‌سازی Noexec: جلوگیری از اجرای اسکریپت‌ها در دایرکتوری‌های که برای نگهداری فایل‌های موقتی استفاده می‌شوند.
  5. فعال‌سازی Sticky Bit: جلوگیری از حذف یا تغییر فایل‌ها توسط کاربران دیگر در دایرکتوری‌های مشترک مانند /tmp.

ملاحظات Oracle:

  • Noexec: به دلیل استفاده برخی از اسکریپت‌های Oracle از /tmp برای اجرا، فعال‌سازی noexec ممکن است برخی از فعالیت‌های نصب و راه‌اندازی Oracle را مختل کند. برای اجتناب از این مشکل، امکان دارد بخواهید این گزینه را برای /tmp فعال نکنید.
  • Nosuid وNodev: این گزینه‌ها معمولاً تأثیر مستقیمی بر روی عملکرد Oracle ندارند مگر اینکه Oracle به طور خاص نیاز به دسترسی به دستگاه‌ها یا اجرای برنامه‌های SUID/SGID داشته باشد. این موارد در محیط‌های پیش‌فرض نادر هستند.

اطمینان حاصل کنید که پس از اعمال این تغییرات، تست‌های مناسبی را برای تأیید عملکرد صحیح Oracle انجام دهید. این شامل اجرای اسکریپت‌هایی است که ممکن است به طور موقت فایل‌ها را در دایرکتوری‌های تحت تأثیر قرار دهند و تست عملکردی برای بررسی تأثیرات این تنظیمات بر عملکرد سیستم.

در مورد sticky note ، این دستورات chmod +t /tmp بیت Sticky را فعال می‌کند، که اطمینان حاصل می‌کند فایل‌ها و دایرکتوری‌ها در /tmp تنها توسط مالکان فایل و روت قابل حذف هستند. این یک تدبیر امنیتی است برای جلوگیری از حذف یا تغییر فایل‌های موقت توسط کاربران دیگر.

 

برای مورد سوم که مربوط به مدیریت و به‌روزرسانی سیستم عامل است، دستورات و پیکربندی‌های زیر را می‌توانید اجرا کنید:

دستورات Bash:

بروزرسانی Kernel:

dnf update kernel

 

این دستور Kernel سیستم را به آخرین نسخه موجود در repository های معتبر که در توزیع استفاده می‌شود، به‌روزرسانی می‌کند.

dnf update --security

این دستور تمام پچ‌های امنیتی موجود برای بسته‌های نصب شده در سیستم را به‌روزرسانی می‌کند.

تأیید اصالت با GPG Key: GPG key به‌طور خودکار در حین نصب بسته‌ها استفاده می‌شود، ولی شما می‌توانید صحت کلیدها را با دستور زیر بررسی کنید:

gpg --verify <filename>

دستورات Ansible:

بروزرسانی Kernel و پچ‌های امنیتی:

- name: Update Kernel and apply security patches

  ansible.builtin.yum:

    name: "*"

    state: latest

    security: yes

تأیید اصالت GPG: اطمینان از این که gpgcheck در فایلهای تنظیمی Yum فعال است:

- name: Ensure GPG check is enabled for all repositories

  ansible.builtin.lineinfile:

    path: "/etc/yum.repos.d/{{ item }}"

    regexp: '^gpgcheck=0'

    line: 'gpgcheck=1'

    state: present

  with_fileglob:

    - /etc/yum.repos.d/*.repo

توضیحات:

  • بروزرسانی Kernel و پچ‌های امنیتی: اطمینان حاصل می‌کنید که تمامی آسیب‌پذیری‌های شناخته شده به‌سرعت برطرف شوند و سیستم به روز باقی بماند.

  • استفاده از Repository های معتبر: این کار از نصب نرم‌افزارهای نامطمئن جلوگیری می‌کند و به اطمینان از امنیت سیستم کمک می‌کند.

  • GPG Key: تأیید اصالت بسته‌ها با استفاده از GPG کلیدها اطمینان از منبع معتبر بسته‌های نصبی را فراهم می‌کند.

تضادهای احتمالی با Oracle 19.23:

بروزرسانی Kernel می‌تواند در صورتی که نیاز به تست‌های سازگاری ویژه برای نسخه‌های خاص از نرم‌افزار Oracle داشته باشید، نیاز به دقت بیشتری دارد. بنابراین، پیش از اجرای بروزرسانی‌های بزرگ، تست‌های لازم را بر روی محیط‌های تست انجام دهید.

 

مراقبت از فایل‌های حساس به منظور جلوگیری از سوءاستفاده

توضیحات جامع

حفاظت از فایل‌های حساس یکی از جنبه‌های کلیدی امنیت سیستم است. این شامل چندین اقدام امنیتی است:

  • محدودسازی دسترسی به CoreDump و Soft Variables: CoreDump فایل‌هایی هستند که حاوی اطلاعاتی در مورد وضعیت یک برنامه هستند که هنگام خطا متوقف شده‌اند. Soft Variables شامل تنظیمات محیطی هستند که می‌توانند حاوی اطلاعات حساس باشند.

  • استفاده از ابزارهای File Integrity Check مانند AIDE: این ابزارها برای تشخیص تغییرات در فایل‌ها استفاده می‌شوند، که می‌تواند نشان‌دهنده تلاش‌های نفوذ و تغییر غیرمجاز باشد.

  • فعالسازی ویژگی‌های Anti-Exploitation مانند ASLR (Address Space Layout Randomization): ASLR یک تکنیک امنیتی است که به صورت تصادفی آدرس‌های حافظه تخصیص یافته به داده‌ها و کد برنامه را مرتب می‌کند تا جلوی حملات مبتنی بر حافظه را بگیرد.

اسکریپت Bash

محدود کردن دسترسی به CoreDump:

echo '* hard core 0' >> /etc/security/limits.conf

echo 'fs.suid_dumpable = 0' > /etc/sysctl.d/99-sysctl.conf

sysctl -p /etc/sysctl.d/99-sysctl.conf

نصب و راه‌اندازی AIDE:

dnf install aide -y

aide --init

mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

فعال‌سازی ASLR:

echo 'kernel.randomize_va_space = 2' > /etc/sysctl.d/99-sysctl.conf

sysctl -p /etc/sysctl.d/99-sysctl.conf

Ansible Playbook

 

- hosts: all

  become: yes

  tasks:

    - name: Limit core dump size

      lineinfile:

        path: /etc/security/limits.conf

        line: '* hard core 0'

    - name: Disable SUID dumping and enable ASLR

      sysctl:

        name: "{{ item.name }}"

        value: "{{ item.value }}"

        state: present

      loop:

        - { name: 'fs.suid_dumpable', value: '0' }

        - { name: 'kernel.randomize_va_space', value: '2' }

    - name: Install AIDE and initialize database

      block:

        - name: Install AIDE

          yum:

            name: aide

            state: present

        - name: Initialize AIDE database

          command: aide --init

        - name: Move AIDE database into place

          command: mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

مغایرت‌های احتمالی با نصب Oracle 19.23

CoreDump: محدود کردن CoreDump‌ها می‌تواند در تشخیص خطاهای داخلی Oracle تأثیر بگذارد، زیرا برخی از ابزارهای تشخیصی Oracle ممکن است به این فایل‌ها برای تجزیه و تحلیل نیاز داشته باشند.

ASLR: فعال‌سازی ASLR می‌تواند برخی از ماژول‌های کاربردی Oracle را که به آدرس‌دهی حافظه مشخص نیاز دارند، تحت تأثیر قرار دهد.

File Integrity Checks: استفاده مستمر از AIDE ممکن است بر عملکرد سیستم تأثیر بگذارد، به ویژه در سیستم‌های با ترافیک داده بالا مانند دیتابیس‌های Oracle.

 

تنظیمات امن Boot

توضیحات جامع

تنظیمات امن بوت اطمینان حاصل می‌کنند که فرایند بوت سیستم مطابق با استانداردهای امنیتی صورت گیرد و جلوی دسترسی‌های غیرمجاز به سیستم در زمان بوت گرفته شود.

  1. قراردادن رمز عبور بر روی Boot Loader: این کار مانع از دسترسی غیرمجاز به تنظیمات بوت و تغییر آن‌ها می‌شود.
  2. فعال‌سازی Authentication در Single User Mode: اطمینان حاصل می‌کند که تنها کاربران مجاز می‌توانند در حالت تک کاربری به سیستم دسترسی پیدا کنند.
  3. غیرفعال کردن Interactive Boot: جلوگیری از اینکه کاربران در زمان بوت بتوانند به سرویس‌های خاصی دسترسی داشته باشند.
  4. تأمین امنیت فایل /etc/grub.conf: اطمینان حاصل می‌شود که تنها کاربر root قادر به دسترسی یا تغییر این فایل است.

اسکریپت Bash

# قرار دادن رمز عبور بر روی GRUB

grub2-setpassword

# غیرفعال کردن Interactive Boot

sed -i 's/PROMPT=yes/PROMPT=no/g' /etc/sysconfig/init

# تنظیم مالکیت و دسترسی‌های /etc/grub.conf

chown root:root /etc/grub.d/10_linux

chmod 600 /etc/grub.d/10_linux

 

Ansible Playbook

 

- hosts: all

  become: yes

  tasks:

    - name: Set GRUB password

      command: grub2-setpassword

    - name: Disable Interactive Boot

      lineinfile:

        path: /etc/sysconfig/init

        regexp: '^PROMPT=yes'

        line: 'PROMPT=no'

    - name: Secure /etc/grub.d/10_linux

      file:

        path: /etc/grub.d/10_linux

        owner: root

        group: root

        mode: '0600'

 

مغایرت‌های احتمالی با نصب Oracle 19.23

 

  1. قرار دادن رمز عبور بر روی Boot Loader:

    • مغایرت: برخی از فرایندهای خودکار Oracle، مانند اسکریپت‌های راه‌اندازی خودکار در زمان بوت، ممکن است نیاز به دسترسی بدون مداخله کاربر به GRUB داشته باشند. قرار دادن رمز عبور می‌تواند این فرایندها را مختل کند زیرا نیازمند ورود دستی رمز عبور در هر بوت خواهد بود.
    • مثال: فرض کنید Oracle برای بالا بردن خدمات خود در هنگام بوت سرور، به تغییرات در منوی GRUB نیاز دارد. با قفل کردن GRUB، این تنظیمات باید به صورت دستی و با ورود رمز عبور انجام شود، که ممکن است باعث تاخیر در راه‌اندازی خودکار سرویس‌ها شود.
  2. فعال نمودن Authentication در زمان Single User Mode:

    • مغایرت: در مواقعی که به تعمیر و نگهداری اضطراری Oracle در محیط‌های تولیدی نیاز است، فعال بودن Authentication می‌تواند دسترسی سریع به سیستم را محدود کند. این ممکن است در شرایط بحرانی، که زمان بسیار مهم است، به تاخیر افتادن رفع خطا را به دنبال داشته باشد.
    • مثال: اگر سیستم دچار اختلال شده و نیاز به راه‌اندازی مجدد در حالت تک کاربری باشد تا خطاها برطرف شوند، نیاز به Authentication می‌تواند ورود به سیستم را دشوار سازد، به خصوص اگر اطلاعات ورود از دست رفته باشند یا در دسترس نباشند.
  3. غیرفعال کردن Interactive Boot:

    • مغایرت: برخی از نصب‌های Oracle ممکن است نیازمند تعاملات کاربری در زمان بوت برای پیکربندی دقیق خدمات باشند. غیرفعال کردن Interactive Boot می‌تواند این گزینه‌ها را حذف کند و به این ترتیب نصب یا راه‌اندازی مجدد خدمات را دشوار سازد.
    • مثال: در حین بوت، ممکن است نیاز باشد تا تنظیمات شبکه یا پارامترهای حیاتی Oracle از طریق منوی بوت تنظیم شوند. با غیرفعال کردن بوت تعاملی، این تنظیمات باید قبلی به طور کامل و دقیق تنظیم شده باشند، که در صورت نیاز به تغییرات سریع، ممکن است باعث تاخیر در پروسه راه‌اندازی یا خطای بوت شود.
  4. محدودسازی دسترسی به فایل /etc/grub.d/10_linux:

    • مغایرت: محدود کردن دسترسی به این فایل می‌تواند تغییرات مورد نیاز در پیکربندی بوت که ممکن است برای بهینه‌سازی عملکرد Oracle لازم باشد، را دشوار کند. این کار ممکن است بر روی برخی اسکریپت‌های نصب و پیکربندی که به صورت خودکار توسط Oracle اجرا می‌شوند تأثیر بگذارد.
    • مثال: Oracle ممکن است نیاز به افزودن پارامترهای خاص به GRUB داشته باشد تا تنظیمات مربوط به عملکرد یا امنیت بهینه‌سازی شوند. محدودیت‌ها در دسترسی به فایل 10_linux می‌تواند این تغییرات را محدود کند، مگر اینکه به صورت دستی توسط کاربر root اعمال شوند، که این امر می‌تواند خطاهای بشری را افزایش دهد و روند بهینه‌سازی را کُند کند.

این مثال‌ها به شما کمک می‌کنند تا تصمیم‌گیری در مورد اعمال تنظیمات امنیتی در حین نصب و پیکربندی Oracle را با دقت بیشتری انجام دهید، و اطمینان حاصل کنید که این تنظیمات به بهترین شکل ممکن و با حفظ تعادل بین امنیت و قابلیت‌های عملیاتی انجام شوند.

 

فعالسازی و پیکربندی امن SELinux یا AppArmor

توضیحات:

SELinux (Security-Enhanced Linux) و AppArmor هر دو ابزارهایی هستند که به منظور ارتقای امنیت سیستم‌های لینوکسی با استفاده از سیاست‌های دسترسی مجبوری (Mandatory Access Control - MAC) به کار می‌روند. SELinux با سه حالت: Enforcing, Permissive و Disabled اجرا می‌شود، در حالی که AppArmor به صورت فعال یا غیرفعال تنظیم می‌شود. این سیاست‌ها به ادمین‌ها این امکان را می‌دهند که کنترل دقیق‌تری بر دسترسی‌ها و مجوزهای برنامه‌ها و خدمات داشته باشند.

Bash Script:

# فعال کردن SELinux

sed -i 's/^SELINUX=.*$/SELINUX=enforcing/' /etc/selinux/config

# تنظیم حالت SELinux به Targeted

sed -i 's/^SELINUXTYPE=.*$/SELINUXTYPE=targeted/' /etc/selinux/config

# غیرفعال کردن SETroubleshoot و mcstrans

systemctl disable setroubleshoot.service

systemctl disable mcstrans.service

Ansible Script:

 

- hosts: all

  tasks:

    - name: Set SELinux to enforcing

      selinux:

        policy: targeted

        state: enforcing

    - name: Disable services not needed for Oracle compatibility

      systemd:

        name: "{{ item }}"

        enabled: no

        state: stopped

      loop:

        - setroubleshoot

        - mcstrans

 

مغایرت احتمالی با نصب Oracle 19.23:

SELinux ممکن است باعث ایجاد محدودیت‌هایی برای برخی از فعالیت‌های Oracle شود که نیاز به دسترسی‌های خاصی به فایل‌ها، شبکه یا سایر منابع دارند. به ویژه در مواردی که Oracle نیاز به برقراری ارتباطات شبکه‌ای یا دسترسی به فایل‌های خاص دارد، SELinux می‌تواند این دسترسی‌ها را محدود کند و نیاز به تنظیم دقیق دارد.

مثال از مغایرت:

تعارض با Oracle RAC: Oracle RAC و برخی سرویس‌های دیگر Oracle ممکن است نیاز به دسترسی‌های گسترده‌تر به سیستم فایل و شبکه داشته باشند که SELinux می‌تواند آنها را مسدود کند. برای مثال، تلاش برای برقراری IPC بین نودهای مختلف در محیط RAC ممکن است توسط SELinux به عنوان یک رفتار مشکوک شناسایی و مسدود شود.

 

مورد: نکات Command Line Warning Banners

توضیحات:

بنرهای هشدار دهنده خط فرمان (Command Line Warning Banners) برای نمایش پیام‌های امنیتی مهم در هنگام ورود کاربران به سیستم استفاده می‌شوند. این پیام‌ها می‌توانند شامل اخطارهای قانونی برای ممانعت از دسترسی‌های غیرمجاز باشند. پاک‌سازی و حذف متغیرهای نظیر \r, \v, \m, و \s از این فایل‌ها مانع از اجرای دستورات نامطلوب در زمان نمایش بنر می‌شود، که می‌تواند به عنوان یک آسیب‌پذیری امنیتی عمل کند.

Bash Script:

# پاکسازی متغیرهای خاص از فایل‌های بنر

sed -i 's/\\[rvmns]//g' /etc/issue

sed -i 's/\\[rvmns]//g' /etc/issue.net

sed -i 's/\\[rvmns]//g' /etc/motd

# تنظیم مالکیت و دسترسی‌ها

chown root:root /etc/issue /etc/issue.net /etc/motd

chmod 644 /etc/issue /etc/issue.net /etc/motd

 

Ansible Script:

 

- hosts: all

  tasks:

    - name: Clean up special characters in warning banners

      replace:

        path: "{{ item }}"

        regexp: '\\\\[rvmns]'

        replace: ''

      with_items:

        - /etc/issue

        - /etc/issue.net

        - /etc/motd

    - name: Set ownership and permissions for banner files

      file:

        path: "{{ item }}"

        owner: root

        group: root

        mode: '0644'

      with_items:

        - /etc/issue

        - /etc/issue.net

        - /etc/motd

 

مغایرت احتمالی با نصب Oracle 19.23:

این تنظیمات معمولاً بر نصب و عملیات اوراکل تأثیری ندارند، زیرا تغییرات فقط بر نمایش پیام‌های ورود به سیستم تأثیر می‌گذارد و به فایل‌های اجرایی یا پیکربندی دیتابیس که توسط Oracle استفاده می‌شوند ارتباطی ندارد. با این حال، اطمینان حاصل کنید که پیام‌های بنر شامل هیچ دستورالعمل یا اطلاعاتی نیست که ممکن است توسط کاربران در ارتباط با دیتابیس استفاده شود و سبب سردرگمی یا اشتباهاتی گردد.

 

مورد: فعال بودن سرویس‌های مورد نیاز مربوط به inetd

توضیحات:

سرویس‌های inetd معمولاً برای مدیریت سرویس‌های شبکه‌ای استفاده می‌شوند که به صورت دوره‌ای نیاز به فعالیت دارند و نیازی به اجرای دائمی ندارند. این سرویس‌ها شامل سرویس‌هایی می‌شوند که می‌توانند برای برقراری اتصالات شبکه‌ای مورد استفاده قرار گیرند یا برای فعالیت‌های خاصی مانند ترانسفر فایل یا چاپ به صورت شبکه‌ای استفاده شوند. بسیاری از این سرویس‌ها دیگر مدرن نیستند و ممکن است امنیت پایین‌تری داشته باشند، لذا توصیه می‌شود تنها در صورت نیاز فعال شوند.

Bash Script

این اسکریپت Bash قبل از تلاش برای غیرفعال کردن هر سرویس، چک می‌کند که آیا سرویس نصب شده است و در دسترس قرار دارد:

#!/bin/bash

# چک کردن و غیرفعال کردن سرویس‌های inetd غیرضروری

services=("chargen-dgram" "chargen-stream" "daytime-dgram" "daytime-stream" "discard-dgram" "discard-stream" "echo-dgram" "echo-stream" "time-dgram" "time-stream" "talk" "tftp" "xinetd" "openbsd-inetd")

for service in "${services[@]}"; do

  if systemctl is-enabled --quiet $service; then

    echo "Disabling $service..."

    systemctl stop $service

    systemctl disable $service

  else

    echo "$service is not installed or already disabled."

  fi

done

 

Ansible Playbook

این playbook Ansible همان کارکرد Bash Script را دارد ولی در فرمت Ansible انجام می‌شود، با اضافه کردن بررسی وجود سرویس قبل از اقدام به غیرفعال کردن:

 

---

- hosts: all

  become: yes

  tasks:

    - name: Check if inetd related services are enabled and disable them

      block:

        - name: Check if {{ item }} service is enabled

          systemd:

            name: "{{ item }}"

            enabled: no

          register: service_status

        - name: Disable {{ item }} service

          systemd:

            name: "{{ item }}"

            state: stopped

            enabled: no

          when: service_status.changed

      loop:

        - chargen-dgram

        - chargen-stream

        - daytime-dgram

        - daytime-stream

        - discard-dgram

        - discard-stream

        - echo-dgram

        - echo-stream

        - time-dgram

        - time-stream

        - talk

        - tftp

        - xinetd

        - openbsd-inetd

      ignore_errors: yes

 

مغایرت احتمالی با نصب اوراکل

غیرفعال کردن این سرویس‌ها به طور کلی تأثیر منفی بر روی نصب یا عملکرد اوراکل نخواهد داشت، مگر اینکه به خصوص برای مقاصد خاصی از این سرویس‌ها استفاده شود. بهتر است قبل از غیرفعال سازی، تأیید شود که هیچ یک از این سرویس‌ها به طور خاص برای امکانات و ویژگی‌های اوراکل مورد نیاز نیستند.

 

عدم استفاده از سرویسهای Remote که از لحاظ امنیتی دارای مشکلاتی هستند.

این تنظیمات به غیرفعال کردن سرویس‌هایی می‌پردازد که به دلیل مشکلات امنیتی شناخته شده، بهتر است در محیط‌های تولیدی استفاده نشوند. این سرویس‌ها شامل Rsh، Telnet و Rlogin هستند که تمامی آن‌ها از رمزنگاری نامناسب یا فاقد رمزنگاری هستند و احتمال سوء استفاده از آن‌ها بالا می‌رود.

Bash Script

این اسکریپت Bash وجود و وضعیت فعال بودن سرویس‌های ریموت ناامن را بررسی می‌کند و در صورت فعال بودن، آن‌ها را غیرفعال می‌کند.

#!/bin/bash
# غیرفعال کردن سرویس‌های ریموت ناامن
services=("rsh.socket" "telnet.socket" "rlogin.socket")

for service in "${services[@]}"; do
  if systemctl is-enabled --quiet $service; then
    echo "Disabling $service..."
    systemctl stop $service
    systemctl disable $service
  else
    echo "$service is not installed or already disabled."
  fi
done

Ansible Playbook

این playbook در Ansible، سرویس‌های ناامن را بررسی و غیرفعال می‌کند:

---

- hosts: all

  become: yes

  tasks:

    - name: Check if insecure remote services are enabled and disable them

      block:

        - name: Check if {{ item }} service is enabled

          systemd:

            name: "{{ item }}"

            enabled: no

          register: service_status

        - name: Disable {{ item }} service

          systemd:

            name: "{{ item }}"

            state: stopped

            enabled: no

          when: service_status.changed

      loop:

        - rsh

        - rsh-server

        - telnet

        - telnet-server

        - rlogin

      ignore_errors: yes

 

مغایرت احتمالی با نصب Oracle 19.23:

این سرویس‌ها به طور کلی برای نصب و عملکرد Oracle مورد نیاز نیستند و غیرفعال کردن آن‌ها نباید مشکلی ایجاد کند. اما در موارد خاصی ممکن است برای عملیات تعمیر و نگهداری یا برای برنامه‌های قدیمی که نیاز به دسترسی به این سرویس‌ها دارند استفاده شوند. به همین دلیل، پیش از غیرفعال کردن این سرویس‌ها، اطمینان حاصل کنید که هیچ وابستگی حیاتی به این سرویس‌ها وجود ندارد.

پیشنهاد:

به جای استفاده از این سرویس‌های ناامن، از SSH استفاده کنید که از رمزنگاری برای محافظت از اطلاعات استفاده می‌کند.

 

مورد: غیرفعال‌سازی سرویس‌های غیرضروری Server/Client

توضیحات:

در محیط‌های امن، تنها سرویس‌هایی باید فعال باشند که به صورت عملیاتی و مورد نیاز هستند. سرویس‌های اضافی می‌توانند مسیرهای حمله و آسیب‌پذیری‌های بیشتری را ایجاد کنند. سرویس‌هایی مانند X-Window، Avahi، CUPS، DHCP، DNS، FTP، DoveCot، و Squid (HTTP Proxy Server) ممکن است در سرورهایی که برای دیتابیس یا برنامه‌های خاصی استفاده می‌شوند، ضروری نباشند و می‌توانند به عنوان نقاط ضعف امنیتی عمل کنند. بنابراین، در صورت عدم نیاز، این سرویس‌ها باید حذف یا غیرفعال شوند.

Bash Script

این اسکریپت Bash، سرویس‌های غیرضروری را بررسی و در صورت وجود غیرفعال می‌کند:

#!/bin/bash

# غیرفعال کردن سرویس‌های غیرضروری Server/Client

services=("xorg-x11-server-Xorg" "avahi-daemon" "cups" "dhcpd" "named" "vsftpd" "dovecot" "squid")

for service in "${services[@]}"; do

  if systemctl is-enabled --quiet $service; then

    echo "Disabling $service..."

    systemctl stop $service

    systemctl disable $service

  else

    echo "$service is not installed or already disabled."

  fi

done

 

Ansible Playbook

این playbook Ansible، سرویس‌های غیرضروری را بررسی و در صورت وجود غیرفعال می‌کند:

---
- hosts: all
  become: yes
  tasks:
    - name: Check if unnecessary server/client services are enabled and disable them
      block:
        - name: Check if {{ item }} service is enabled
          systemd:
            name: "{{ item }}"
            enabled: no
          register: service_status

        - name: Disable {{ item }} service
          systemd:
            name: "{{ item }}"
            state: stopped
            enabled: no
          when: service_status.changed
      loop:
        - xorg-x11-server-Xorg
        - avahi-daemon
        - cups
        - dhcpd
        - named
        - vsftpd
        - dovecot
        - squid
      ignore_errors: yes

 

مغایرت احتمالی با نصب Oracle 19.23:

غیرفعال کردن این سرویس‌ها معمولاً بر نصب و عملکرد Oracle تأثیری ندارد، زیرا Oracle به طور پیش‌فرض نیازی به این سرویس‌ها ندارد. با این حال، در برخی موارد خاص مانند استفاده از CUPS برای چاپ گزارشات یا DHCP و DNS برای تنظیمات شبکه‌ای، ممکن است این سرویس‌ها ضروری باشند. در این موارد، پیش از غیرفعال‌سازی، باید بررسی‌های لازم انجام شود تا از عملکرد صحیح سرویس‌های حیاتی اطمینان حاصل شود.

پیشنهاد:

به جای فعال نگه داشتن سرویس‌های غیرضروری، سرویس‌های ضروری را به حداقل برسانید و از روش‌های امن مانند SSH برای دسترسی و مدیریت سیستم استفاده کنید. این کار به کاهش سطح حمله و افزایش امنیت کلی سیستم کمک می‌کند.

 

مورد: استفاده از سرویس NTP (Network Time Protocol)

توضیحات:

همگام‌سازی دقیق ساعت سیستم‌های کامپیوتری برای جلوگیری از اختلافات زمانی و مشکلات احتمالی در برنامه‌های کاربردی و پروتکل‌های امنیتی ضروری است. سرویس NTP (Network Time Protocol) به سیستم‌ها کمک می‌کند تا زمان خود را با سرورهای زمانی معتبر همگام‌سازی کنند. در سیستم‌های مدرن، chrony به عنوان یک جایگزین بهینه برای ntpd استفاده می‌شود که دقت بالاتر و سرعت همگام‌سازی بیشتری دارد. برای اطمینان از همگام‌سازی صحیح زمانی، توصیه می‌شود که سرویس chrony را پیکربندی و فعال کنید.

تنظیمات chrony

فایل پیکربندی

فایل اصلی پیکربندی chrony در مسیر /etc/chrony.conf قرار دارد. باید اطمینان حاصل شود که سرورهای NTP معتبر در این فایل مشخص شده‌اند.

Bash Script

این اسکریپت Bash، نصب و پیکربندی chrony را بررسی کرده و در صورت عدم وجود، آن را نصب و تنظیم می‌کند:

#!/bin/bash
# نصب و پیکربندی chrony
if ! rpm -q chrony &> /dev/null; then
    echo "Installing chrony..."
    dnf install -y chrony
fi

echo "Configuring chrony..."
cat <<EOL > /etc/chrony.conf
server time1.google.com iburst
server time2.google.com iburst
server time3.google.com iburst
server time4.google.com iburst
driftfile /var/lib/chrony/drift
rtcsync
logdir /var/log/chrony
EOL

echo "Starting and enabling chrony..."
systemctl start chronyd
systemctl enable chronyd

echo "Chrony configuration completed."

 

Ansible Playbook

این playbook Ansible، سرویس chrony را نصب و پیکربندی می‌کند:

 

---
- hosts: all
  become: yes
  tasks:
    - name: Install chrony
      package:
        name: chrony
        state: present

    - name: Configure chrony
      copy:
        dest: /etc/chrony.conf
        content: |
          server time1.google.com iburst
          server time2.google.com iburst
          server time3.google.com iburst
          server time4.google.com iburst
          driftfile /var/lib/chrony/drift
          rtcsync
          logdir /var/log/chrony

    - name: Start and enable chronyd service
      systemd:
        name: chronyd
        state: started
        enabled: yes

 

مغایرت احتمالی با نصب Oracle 19.23:

به طور کلی، استفاده از chrony و تنظیم دقیق زمان بر روی سرورها تأثیر منفی بر نصب یا عملکرد Oracle ندارد. در حقیقت، همگام‌سازی دقیق زمانی می‌تواند به جلوگیری از مشکلات احتمالی مانند عدم همخوانی زمانی در لاگ‌ها یا اشکالات زمانی در فرآیندهای توزیع شده کمک کند. بنابراین، تنظیم صحیح chrony و اطمینان از همگام‌سازی زمانی منظم و دقیق توصیه می‌شود.

 

 

مورد: امن سازی پیکربندی سرویس Crond

توضیحات:

سرویس cron در سیستم‌های لینوکسی برای اجرای خودکار وظایف برنامه‌ریزی شده استفاده می‌شود. این سرویس می‌تواند خطرات امنیتی ایجاد کند اگر به درستی پیکربندی نشده باشد، زیرا دسترسی به تنظیمات cron می‌تواند به کاربران غیرمجاز اجازه دهد تا وظایف دلخواه خود را اجرا کنند. بنابراین، لازم است که دسترسی به فایل‌های پیکربندی cron محدود شود و تنها کاربران مجاز اجازه استفاده از آن را داشته باشند.

اقدامات:

  1. مالکیت فایل‌ها: مالکیت تمامی فایل‌های مربوط به cron باید به root:root باشد.
  2. دسترسی به فایل‌ها: دسترسی به این فایل‌ها باید فقط برای کاربر root مجاز باشد.
  3. فایل‌های allow و deny: تنظیم فایل‌های cron.allow و at.allow برای محدود کردن کاربران مجاز به استفاده از cron.

Bash Script

این اسکریپت Bash تنظیمات مورد نظر را برای پیکربندی امن cron انجام می‌دهد:

#!/bin/bash
# تنظیم مالکیت و دسترسی فایل‌های مربوط به cron

# لیست فایل‌های مربوط به cron
files=("/etc/crontab" "/etc/cron.allow" "/etc/at.allow" "/etc/cron.weekly" "/etc/cron.monthly" "/etc/cron.d" "/etc/cron.hourly" "/etc/cron.daily")

# تنظیم مالکیت و دسترسی
for file in "${files[@]}"; do
  if [ -e "$file" ]; then
    echo "Setting ownership and permissions for $file"
    chown root:root "$file"
    chmod 600 "$file"
  else
    echo "$file does not exist."
  fi
done

# مشخص کردن کاربران مجاز برای استفاده از cron
echo "oracle" > /etc/cron.allow

 

Ansible Playbook

این playbook Ansible تنظیمات امن مربوط به cron را انجام می‌دهد:

 

---
- hosts: all
  become: yes
  tasks:
    - name: Set ownership and permissions for cron files
      file:
        path: "{{ item }}"
        owner: root
        group: root
        mode: '0600'
        state: touch
      loop:
        - /etc/crontab
        - /etc/cron.allow
        - /etc/at.allow
        - /etc/cron.weekly
        - /etc/cron.monthly
        - /etc/cron.d
        - /etc/cron.hourly
        - /etc/cron.daily

    - name: Specify allowed users for cron
      copy:
        dest: /etc/cron.allow
        content: |
          oracle

مغایرت احتمالی با نصب Oracle 19.23:

این تنظیمات معمولاً مغایرتی با نصب و عملکرد Oracle ندارند. با این حال، در صورت استفاده از وظایف زمانبندی شده (Scheduled Tasks) برای مدیریت دیتابیس یا وظایف مربوط به نگهداری سیستم که به دسترسی به فایل‌های cron نیاز دارند، باید مطمئن شوید که دسترسی مناسب به این فایل‌ها و تنظیمات فراهم است. اگر کاربر Oracle یا کاربر دیگری نیاز به استفاده از cron دارد، باید نام کاربر به /etc/cron.allow اضافه شود تا از مشکلات دسترسی جلوگیری شود.

 

مورد: امن‌سازی پیکربندی سرویس SSH

توضیحات:

SSH (Secure Shell) یک پروتکل شبکه‌ای امن است که برای ورود به سیستم‌های راه دور و اجرای دستورات از راه دور استفاده می‌شود. به دلیل ماهیت حساس این سرویس، پیکربندی امنیتی مناسب آن ضروری است. در اینجا توضیحاتی درباره هر یک از تنظیمات امنیتی مورد نیاز ارائه می‌شود:

  1. SSH Protocol v.2: نسخه 2 پروتکل SSH امنیت بیشتری نسبت به نسخه 1 ارائه می‌دهد. نسخه 1 مستعد مشکلات امنیتی و آسیب‌پذیری‌های شناخته شده است.

  2. مالکیت و دسترسی به فایل‌های پیکربندی SSH: فایل‌های پیکربندی SSH، مانند sshd_config، باید توسط کاربر root مالکیت شوند و دسترسی به آن‌ها محدود به کاربر root باشد. این امر از تغییرات غیرمجاز در پیکربندی جلوگیری می‌کند.

  3. SSH MaxAuthTries: این پارامتر تعداد دفعات مجاز برای تلاش ناموفق ورود به سیستم را تعیین می‌کند. مقدار کمتر از 4 توصیه می‌شود تا از حملات brute-force جلوگیری شود. مقدار پیش‌فرض این پارامتر 6 است.

  4. SSH IgnoreRhosts: این گزینه باید فعال باشد تا فایل‌های ~/.rhosts و /etc/hosts.equiv نادیده گرفته شوند و از احراز هویت بر اساس این فایل‌ها جلوگیری شود.

  5. غیرفعال کردن ویژگی‌های SSH:

    • SSH X11: غیرفعال کردن فورواردینگ X11 برای جلوگیری از حملات مبتنی بر X11.
    • SSH HostbasedAuthentication: غیرفعال کردن این گزینه برای جلوگیری از احراز هویت مبتنی بر میزبان.
    • SSH root login: غیرفعال کردن ورود مستقیم به root برای افزایش امنیت.
    • SSH PermitEmptyPasswords: غیرفعال کردن این گزینه برای جلوگیری از ورود با کلمات عبور خالی.
    • SSH PermitUserEnvirnment: غیرفعال کردن این گزینه برای جلوگیری از تنظیمات محیطی توسط کاربر که می‌تواند برای اجرای حملات مورد استفاده قرار گیرد.
  6. SSH LoginGraceTime: تعیین مدت زمانی که کاربر مجاز است برای ورود به سیستم تلاش کند. پیشنهاد می‌شود این زمان به 60 ثانیه یا کمتر کاهش یابد.

  7. SSH Idle Time Out: تعیین مدت زمانی که اتصال SSH بدون فعالیت باقی می‌ماند قبل از اینکه به طور خودکار قطع شود. این تنظیم از اتصالات طولانی مدت بدون استفاده جلوگیری می‌کند.

Bash Script

این اسکریپت Bash تنظیمات امنیتی را برای سرویس SSH پیکربندی می‌کند:

#!/bin/bash
# تنظیمات امنیتی SSH

# تنظیم پروتکل SSH به نسخه 2
echo "Protocol 2" >> /etc/ssh/sshd_config

# مالکیت و دسترسی به فایل‌های پیکربندی SSH
chown root:root /etc/ssh/sshd_config
chmod 600 /etc/ssh/sshd_config

# تنظیمات امنیتی SSH
sed -i 's/^MaxAuthTries.*/MaxAuthTries 4/' /etc/ssh/sshd_config
sed -i 's/^IgnoreRhosts.*/IgnoreRhosts yes/' /etc/ssh/sshd_config
sed -i 's/^X11Forwarding yes/X11Forwarding no/' /etc/ssh/sshd_config
sed -i 's/^HostbasedAuthentication.*/HostbasedAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^PermitEmptyPasswords.*/PermitEmptyPasswords no/' /etc/ssh/sshd_config
sed -i 's/^PermitUserEnvironment.*/PermitUserEnvironment no/' /etc/ssh/sshd_config
sed -i 's/^LoginGraceTime.*/LoginGraceTime 60/' /etc/ssh/sshd_config
echo "ClientAliveInterval 300" >> /etc/ssh/sshd_config
echo "ClientAliveCountMax 0" >> /etc/ssh/sshd_config

# ری‌استارت کردن سرویس SSH برای اعمال تغییرات
systemctl restart sshd

Ansible Playbook

این playbook Ansible تنظیمات امنیتی SSH را پیکربندی می‌کند:

 

مغایرت احتمالی با نصب Oracle 19.23:

این تنظیمات امنیتی SSH به طور کلی نباید با نصب یا عملکرد Oracle مغایرتی داشته باشد. با این حال، اگر نیاز به دسترسی SSH با استفاده از root دارید یا از X11Forwarding برای دسترسی گرافیکی استفاده می‌کنید، باید تنظیمات مربوطه را تغییر دهید. علاوه بر این، اطمینان حاصل کنید که تمامی کاربران و تنظیمات مورد نیاز برای عملیات‌های نگهداری و مدیریت پایگاه داده به درستی تنظیم شده‌اند تا از مشکلات دسترسی جلوگیری شود.

 

 

 

امن‌سازی تنظیمات شبکه برای سرور

توضیحات:

برای محافظت از سیستم در برابر تهدیدات شبکه، باید برخی از ویژگی‌های ناامن شبکه غیرفعال شده و ویژگی‌های امن فعال شوند. این تنظیمات به جلوگیری از سوءاستفاده‌های رایج مانند حملات ICMP Redirect و Spoofing کمک می‌کند. همچنین، فعال‌سازی ویژگی‌هایی مانند TCP SYN Cookies به جلوگیری از حملات DoS کمک می‌کند. در صورتی که از IPv6 استفاده نمی‌شود، بهتر است آن را غیرفعال کنید تا از بروز مسائل امنیتی مرتبط جلوگیری شود.

اقدامات:

  1. غیرفعال کردن برخی ویژگی‌های شبکه:

    • Source Routed Packet: این ویژگی به مهاجمین اجازه می‌دهد که مسیریابی بسته‌ها را کنترل کنند.
    • ICMP Redirect: این ویژگی می‌تواند توسط مهاجمین برای تغییر مسیر ترافیک استفاده شود.
    • Secure ICMP Redirect: نسخه امن‌تری از ICMP Redirect است اما همچنان ممکن است ناامن باشد.
  2. فعال کردن برخی ویژگی‌های شبکه:

    • Ignore کردن Broadcast ICMP: جلوگیری از پاسخ به پیام‌های ICMP Broadcast.
    • Ignore کردن Bogus ICMP Response: جلوگیری از پاسخ به پاسخ‌های جعلی ICMP.
    • لاگ‌گیری از Suspicious Packet: ثبت بسته‌های مشکوک برای تحلیل بیشتر.
    • Reverse Path Filtering: این ویژگی بررسی می‌کند که آیا مسیر بازگشتی برای یک بسته وجود دارد یا نه، که به جلوگیری از Spoofing کمک می‌کند.
    • TCP SYN Cookies: استفاده از کوکی‌ها برای حفاظت در برابر حملات SYN flood.
  3. غیرفعال کردن IPv6: اگر از IPv6 استفاده نمی‌کنید، بهتر است آن را غیرفعال کنید.

Bash Script

این اسکریپت Bash تنظیمات امنیتی شبکه را پیکربندی می‌کند:

#!/bin/bash
# غیرفعال کردن برخی ویژگی‌های شبکه
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects

# فعال کردن برخی ویژگی‌های شبکه
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

# غیرفعال کردن IPv6
echo "1" > /proc/sys/net/ipv6/conf/all/disable_ipv6

# اضافه کردن تنظیمات به sysctl.conf برای پایدار ماندن بعد از ریبوت
cat <<EOL >> /etc/sysctl.conf
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
net.ipv6.conf.all.disable_ipv6 = 1
EOL

# اعمال تغییرات
sysctl -p

Ansible Playbook

این playbook Ansible تنظیمات امنیتی شبکه را پیکربندی می‌کند:

---
- hosts: all
  become: yes
  tasks:
    - name: Set sysctl parameters
      sysctl:
        name: "{{ item.name }}"
        value: "{{ item.value }}"
        state: present
        reload: yes
      loop:
        - { name: 'net.ipv4.conf.all.accept_source_route', value: '0' }
        - { name: 'net.ipv4.conf.all.accept_redirects', value: '0' }
        - { name: 'net.ipv4.conf.all.secure_redirects', value: '0' }
        - { name: 'net.ipv4.icmp_echo_ignore_broadcasts', value: '1' }
        - { name: 'net.ipv4.icmp_ignore_bogus_error_responses', value: '1' }
        - { name: 'net.ipv4.conf.all.log_martians', value: '1' }
        - { name: 'net.ipv4.conf.all.rp_filter', value: '1' }
        - { name: 'net.ipv4.tcp_syncookies', value: '1' }
        - { name: 'net.ipv6.conf.all.disable_ipv6', value: '1' }
    - name: Reload sysctl
      command: sysctl -p

 

مغایرت احتمالی با نصب Oracle 19.23:

این تنظیمات ممکن است تأثیری بر عملکرد Oracle نداشته باشد، اما باید دقت کرد که در صورت استفاده از شبکه‌های IPv6، غیرفعال کردن آن می‌تواند منجر به مشکلاتی شود. همچنین، تنظیمات مربوط به لاگ‌گیری از بسته‌های مشکوک ممکن است مقدار زیادی لاگ تولید کند که باید مدیریت شود تا از پر شدن دیسک جلوگیری شود. اطمینان حاصل کنید که تنظیمات شبکه با پیکربندی‌های شبکه‌ای که برای محیط Oracle در نظر گرفته‌اید، سازگار است و تأثیری بر اتصال به دیتابیس‌ها ندارد.

 

تنظیم و پیکربندی Firewall

توضیحات:

فایروال یکی از مهم‌ترین ابزارهای امنیتی است که برای محافظت از سیستم در برابر حملات و دسترسی‌های غیرمجاز به کار می‌رود. با تنظیم قوانین فایروال، می‌توان به صورت دقیق مشخص کرد که چه ترافیکی مجاز به ورود یا خروج از سیستم است. در این تنظیمات، قوانین فایروال به گونه‌ای تنظیم می‌شود که به طور پیش‌فرض تمامی ترافیک ورودی، خروجی و فوروارد شده مسدود شود و فقط پورت‌های مشخصی (مانند پورت 1521 برای Oracle و پورت 22 برای SSH) باز بمانند.

اقدامات:

  1. نصب و فعال‌سازی فایروال: اطمینان حاصل کنید که فایروال نصب و فعال است.
  2. تنظیمات پیش‌فرض فایروال:
    • INPUT Policy: به صورت پیش‌فرض ترافیک ورودی را مسدود کند.
    • OUTPUT Policy: به صورت پیش‌فرض ترافیک خروجی را مسدود کند.
    • FORWARD Policy: به صورت پیش‌فرض ترافیک فوروارد شده را مسدود کند.
  3. تنظیمات Loopback Interface: تنها اجازه به ترافیک LoopBack داده شود.
  4. تنظیم پورت‌های مجاز: باز کردن پورت‌های مورد نیاز (1521 برای Oracle و 22 برای SSH).
  5. پیکربندی برای اتصالات New OutBound و Established Connection: اطمینان از اینکه اتصالات خروجی و اتصالات موجود می‌توانند به درستی برقرار شوند.

Bash Script

این اسکریپت Bash قوانین فایروال را پیکربندی می‌کند:

#!/bin/bash

# نصب و فعال‌سازی firewalld
dnf install -y firewalld
systemctl enable firewalld
systemctl start firewalld

# تنظیمات پیش‌فرض برای پالیسی‌های ورودی، خروجی و فوروارد
firewall-cmd --set-default-zone=block

# فعال‌سازی پالیسی‌های پیش‌فرض
firewall-cmd --zone=block --add-interface=lo --permanent
firewall-cmd --zone=block --add-rich-rule='rule family="ipv4" source address="127.0.0.1/8" accept' --permanent
firewall-cmd --zone=block --add-rich-rule='rule family="ipv6" source address="::1" accept' --permanent

# باز کردن پورت‌های مورد نیاز
firewall-cmd --zone=block --add-port=1521/tcp --permanent
firewall-cmd --zone=block --add-port=22/tcp --permanent

# اعمال تغییرات
firewall-cmd --reload

 

Ansible Playbook

این playbook Ansible تنظیمات فایروال را پیکربندی می‌کند:

 

---
- hosts: all
  become: yes
  tasks:
    - name: Install firewalld
      dnf:
        name: firewalld
        state: present

    - name: Enable and start firewalld
      systemd:
        name: firewalld
        enabled: yes
        state: started

    - name: Set default zone to block
      command: firewall-cmd --set-default-zone=block

    - name: Allow loopback interface
      firewalld:
        zone: block
        interface: lo
        permanent: yes
        state: enabled

    - name: Allow loopback traffic IPv4
      firewalld:
        zone: block
        rich_rule: 'rule family="ipv4" source address="127.0.0.1/8" accept'
        permanent: yes

    - name: Allow loopback traffic IPv6
      firewalld:
        zone: block
        rich_rule: 'rule family="ipv6" source address="::1" accept'
        permanent: yes

    - name: Open port 1521 for Oracle
      firewalld:
        zone: block
        port: 1521/tcp
        permanent: yes
        state: enabled

    - name: Open port 22 for SSH
      firewalld:
        zone: block
        port: 22/tcp
        permanent: yes
        state: enabled

    - name: Reload firewalld
      command: firewall-cmd --reload

 

مغایرت احتمالی با نصب Oracle 19.23:

پورت‌های مورد نیاز: مطمئن شوید که تمامی پورت‌های مورد نیاز برای Oracle Database (مانند پورت‌های مربوط به Listener، Data Guard، OEM و غیره) باز هستند. در غیر این صورت، ممکن است اتصال به دیتابیس یا سرویس‌های وابسته دچار مشکل شود.

ترافیک خروجی و ارتباط با سرویس‌های خارجی: اگر دیتابیس یا سرور نیاز به ارتباط با سرویس‌های خارجی دارد، باید مطمئن شوید که ترافیک خروجی مرتبط مجاز باشد. به عنوان مثال، برای استفاده از Oracle Cloud، ممکن است نیاز به باز کردن پورت‌های خاصی باشد.

قوانین Loopback: در صورتی که نیاز به استفاده از آدرس‌های خاصی در ارتباطات داخلی دارید، مطمئن شوید که این آدرس‌ها به درستی مجاز شده‌اند.

 

پیکربندی ابزارهای ثبت رویداد (Logging Configuration)

توضیحات:

پیکربندی صحیح ابزارهای ثبت رویداد (logging) برای مانیتورینگ فعالیت‌ها و شناسایی فعالیت‌های مشکوک یا غیرمجاز ضروری است. این ابزارها لاگ‌های سیستم عامل و نرم‌افزارهای مختلف را جمع‌آوری می‌کنند و برای تحلیل به یک سیستم مدیریت اطلاعات و رخدادهای امنیتی (SIEM) ارسال می‌کنند. جمع‌آوری لاگ‌ها باید به صورت مداوم (24/7) انجام شود و در صورت بروز مشکل در جمع‌آوری لاگ‌ها، بلافاصله به مدیر شبکه اطلاع داده شود.

اقدامات:

  1. نصب و پیکربندی ابزارهای لاگ‌گیری: از ابزارهای استانداردی مانند rsyslog یا syslog-ng برای جمع‌آوری لاگ‌ها استفاده کنید. این ابزارها باید به گونه‌ای پیکربندی شوند که لاگ‌های سیستم را به صورت مرکزی جمع‌آوری و به SIEM ارسال کنند.
  2. اطلاع‌رسانی در صورت از کار افتادن جمع‌آوری لاگ‌ها: در صورت بروز هرگونه مشکل در جمع‌آوری لاگ‌ها، به مدیر شبکه یا تیم امنیتی اطلاع داده شود.
  3. فعال‌سازی جمع‌آوری لاگ‌ها به صورت 24/7: اطمینان حاصل کنید که سیستم لاگ‌گیری همیشه فعال است و هیچ لاگی از دست نمی‌رود.

Bash Script

این اسکریپت Bash ابزار rsyslog را پیکربندی می‌کند تا لاگ‌ها را به یک سرور مرکزی ارسال کند:

 

#!/bin/bash

# نصب rsyslog
dnf install -y rsyslog

# فعال‌سازی و شروع rsyslog
systemctl enable rsyslog
systemctl start rsyslog

# پیکربندی ارسال لاگ‌ها به سرور مرکزی
cat <<EOL >> /etc/rsyslog.conf
# ارسال تمامی لاگ‌ها به سرور مرکزی SIEM
*.* @central-siem-server:514
EOL

# تنظیم ارسال ایمیل در صورت بروز مشکل
cat <<EOL >> /etc/rsyslog.d/alert.conf
# ارسال ایمیل در صورت بروز مشکل در rsyslog
:msg, contains, "rsyslogd" /var/log/rsyslog/error.log
& mail -s "Rsyslog Error" این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
EOL

# اعمال تغییرات
systemctl restart rsyslog

 

Ansible Playbook

این playbook Ansible ابزار rsyslog را برای جمع‌آوری لاگ‌ها پیکربندی می‌کند:

 

---
- hosts: all
  become: yes
  tasks:
    - name: Install rsyslog
      dnf:
        name: rsyslog
        state: present

    - name: Enable and start rsyslog
      systemd:
        name: rsyslog
        enabled: yes
        state: started

    - name: Configure rsyslog to send logs to central SIEM server
      lineinfile:
        path: /etc/rsyslog.conf
        line: "*.* @central-siem-server:514"
        state: present

    - name: Configure rsyslog to send email on errors
      copy:
        dest: /etc/rsyslog.d/alert.conf
        content: |
          :msg, contains, "rsyslogd" /var/log/rsyslog/error.log
          & mail -s "Rsyslog Error" این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید

    - name: Restart rsyslog
      systemd:
        name: rsyslog
        state: restarted

 

مغایرت احتمالی با نصب Oracle 19.23:

بار کاری اضافی: جمع‌آوری و ارسال لاگ‌ها می‌تواند بار اضافی روی سیستم ایجاد کند که ممکن است بر عملکرد اوراکل تأثیر بگذارد. این موضوع به خصوص در سیستم‌هایی با ترافیک لاگ بالا اهمیت دارد.

امنیت اطلاعات: اطمینان حاصل کنید که لاگ‌های حساس (مثل اطلاعات لاگین و لاگ‌های امنیتی) به درستی محافظت می‌شوند و به طور امن ارسال می‌شوند.

زمان‌بندی ارسال لاگ‌ها: مطمئن شوید که تنظیمات زمان‌بندی برای ارسال لاگ‌ها با سیاست‌های امنیتی و عملکردی سازگار است و در صورت بروز مشکل، بلافاصله اقدام به رفع آن کنید.

 

پیکربندی Auditd در لینوکس

توضیحات:

Auditd یک ابزار امنیتی است که فعالیت‌های سیستم را در سطح کرنل رصد و ثبت می‌کند. این ابزار می‌تواند فعالیت‌های مربوط به تغییرات فایل‌ها، کاربران، گروه‌ها و تنظیمات سیستم را ثبت کند. اطلاعات ثبت شده می‌تواند برای تحلیل‌های امنیتی و شناسایی حملات استفاده شود. برای جلوگیری از از دست رفتن اطلاعات مهم، Auditd باید به درستی پیکربندی شود و ظرفیت مخزن لاگ‌ها تنظیم گردد. همچنین، لاگ‌های ثبت شده باید به گونه‌ای پیکربندی شوند که به راحتی قابل خواندن و تحلیل باشند.

اجرای اسکریپت Bash:

این اسکریپت Bash برای فعال‌سازی Auditd و پیکربندی آن جهت ثبت تغییرات مهم در سیستم استفاده می‌شود:

#!/bin/bash

# نصب auditd
dnf install -y audit

# فعال‌سازی و شروع auditd
systemctl enable auditd
systemctl start auditd

# تنظیم ظرفیت مخزن audit
sed -i 's/^max_log_file = .*/max_log_file = 50/' /etc/audit/auditd.conf
sed -i 's/^num_logs = .*/num_logs = 5/' /etc/audit/auditd.conf

# پیکربندی قوانین audit برای رویدادهای مهم
cat <<EOL > /etc/audit/rules.d/audit.rules
-w /etc/localtime -p wa -k time-change
-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity
-w /etc/issue -p wa -k system-locale
-w /etc/issue.net -p wa -k system-locale
-w /etc/hosts -p wa -k system-locale
-w /etc/sysconfig/network -p wa -k system-locale
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -S clock_settime -k time-change
-a always,exit -F arch=b64 -S fchmod -S fchmodat -S fchown -S fchownat -S chmod -S chown -S lchown -k perm_mod
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -k delete
EOL

# اعمال تغییرات
service auditd restart

 

اجرای Playbook Ansible:

این playbook Ansible برای نصب و پیکربندی Auditd به منظور مانیتورینگ و ثبت رویدادهای مهم استفاده می‌شود:

 

---
- hosts: all
  become: yes
  tasks:
    - name: Install auditd
      dnf:
        name: audit
        state: present

    - name: Enable and start auditd
      systemd:
        name: auditd
        enabled: yes
        state: started

    - name: Set audit log file size and number of logs
      lineinfile:
        path: /etc/audit/auditd.conf
        regexp: '^max_log_file = .*'
        line: 'max_log_file = 50'
      notify: restart auditd

    - name: Set number of audit log files
      lineinfile:
        path: /etc/audit/auditd.conf
        regexp: '^num_logs = .*'
        line: 'num_logs = 5'
      notify: restart auditd

    - name: Configure audit rules
      copy:
        dest: /etc/audit/rules.d/audit.rules
        content: |
          -w /etc/localtime -p wa -k time-change
          -w /etc/group -p wa -k identity
          -w /etc/passwd -p wa -k identity
          -w /etc/gshadow -p wa -k identity
          -w /etc/shadow -p wa -k identity
          -w /etc/security/opasswd -p wa -k identity
          -w /etc/issue -p wa -k system-locale
          -w /etc/issue.net -p wa -k system-locale
          -w /etc/hosts -p wa -k system-locale
          -w /etc/sysconfig/network -p wa -k system-locale
          -a always,exit -F arch=b64 -S adjtimex -S settimeofday -S clock_settime -k time-change
          -a always,exit -F arch=b64 -S fchmod -S fchmodat -S fchown -S fchownat -S chmod -S chown -S lchown -k perm_mod
          -a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -k delete
      notify: restart auditd

  handlers:
    - name: restart auditd
      systemd:
        name: auditd
        state: restarted

 

مغایرت احتمالی با نصب Oracle 19.23:

بار اضافی بر روی سیستم: فعال بودن Auditd و ثبت مداوم رویدادها می‌تواند منجر به افزایش بار بر روی سیستم شود، به ویژه در سرورهایی که بار سنگین دارند. این موضوع ممکن است بر عملکرد Oracle Database تأثیر بگذارد.

حساسیت به تغییرات فایل‌ها: Auditd می‌تواند به تغییرات در فایل‌های سیستم حساس باشد. اگر فایل‌های مهم سیستم یا تنظیمات امنیتی توسط اوراکل تغییر کنند، ممکن است این تغییرات به عنوان رویدادهای مشکوک ثبت شوند.

نیاز به تنظیم دقیق: پیکربندی دقیق قوانین Auditd برای جلوگیری از ثبت بیش از حد اطلاعات و تولید گزارش‌های غیرضروری ضروری است. این موضوع به ویژه در سیستم‌هایی که داده‌های زیادی تولید می‌کنند مهم است.

 

الزامات حساب دسترسی و تنظیمات امنیتی

توضیحات:

تنظیمات امنیتی مربوط به حساب‌های کاربری و مدیریت آنها از اهمیت بالایی برخوردار است. این تنظیمات شامل استفاده از سامانه‌های مدیریت یکپارچه حساب‌های کاربران مانند Active Directory، تنظیمات دقیق رمز عبور، و جلوگیری از دسترسی‌های غیرمجاز به سیستم می‌باشد. استفاده از SHA-512 به عنوان الگوریتم هش برای رمز عبور‌ها توصیه می‌شود، و همچنین جلوگیری از دسترسی مستقیم به حساب‌های سیستمی با استفاده از /sbin/nologin ضروری است.

اجرای اسکریپت Bash:

#!/bin/bash

# جلوگیری از دسترسی interactive به system account ها
for user in `awk -F: '$3 < 1000 {print $1}' /etc/passwd`; do
  if [[ "$user" != "root" ]]; then
    usermod -s /sbin/nologin $user
  fi
done

# تنظیم هش رمز عبور به SHA-512
authconfig --passalgo=sha512 --update

# تنظیم umask به 027 برای کاربران
echo "umask 027" >> /etc/profile
echo "umask 027" >> /etc/bashrc

# اطمینان از اینکه Password Field خالی نیست
awk -F: '($2 == "") {print $1 " does not have a password set"}' /etc/shadow

 

اجرای Playbook Ansible:

 

---
- hosts: all
  become: yes
  tasks:
    - name: Set shell to /sbin/nologin for system accounts
      user:
        name: "{{ item }}"
        shell: /sbin/nologin
      loop: "{{ lookup('ansible.builtin.pwgroup', 'x:*:1000', wantlist=True, separator=':').split(':')[0].split('\n') }}"
      when: item != "root"

    - name: Ensure password hashing algorithm is SHA-512
      command: authconfig --passalgo=sha512 --update

    - name: Set default umask to 027
      lineinfile:
        path: "{{ item }}"
        line: "umask 027"
      loop:
        - /etc/profile
        - /etc/bashrc

    - name: Check for empty password fields
      shell: awk -F: '($2 == "") {print $1 " does not have a password set"}' /etc/shadow
      register: empty_passwords
      failed_when: empty_passwords.stdout != ""
      ignore_errors: yes
      changed_when: false

 

مغایرت احتمالی با نصب Oracle 19.23 و مثال‌های مرتبط

  1. Active Directory Integration:

    • مثال: اگر سیستم به Active Directory متصل شده و احراز هویت کاربران اوراکل نیز از طریق این سیستم انجام شود، هرگونه تغییر یا مشکل در Active Directory می‌تواند بر دسترسی کاربران به دیتابیس تاثیر بگذارد. برای مثال، اگر یک کاربر به اشتباه از Active Directory حذف شود، دسترسی او به اوراکل نیز قطع خواهد شد.
  2. User Shell Restrictions:

    • مثال: اگر یک حساب کاربری سیستمی مانند oracle یا grid با استفاده از /sbin/nologin محدود شود، این حساب‌ها قادر به اجرای دستورات اجرایی نخواهند بود. این موضوع می‌تواند مشکلاتی را در زمان نگهداری یا اجرای دستورات مدیریتی ایجاد کند. برای مثال، اگر نیاز به اجرای دستورات sqlplus یا rman توسط این حساب‌ها باشد، محدود کردن دسترسی interactive می‌تواند این فرآیندها را مختل کند.
  3. Password Policy:

    • مثال: اگر سیاست‌های رمز عبور با سیاست‌های امنیتی اوراکل تداخل داشته باشد، ممکن است کاربران اوراکل نتوانند به درستی وارد سیستم شوند. به عنوان مثال، اگر اوراکل نیاز به یک سیاست رمز عبور خاص داشته باشد که با تنظیمات SHA-512 مطابقت نداشته باشد، کاربران ممکن است نتوانند به دیتابیس وارد شوند یا ممکن است مجبور به تغییر رمز عبورهای خود شوند که می‌تواند در عملکرد روزانه آنها اختلال ایجاد کند.

این مثال‌ها نشان می‌دهند که چگونه تنظیمات امنیتی سیستم عامل می‌توانند بر عملکرد و دسترسی‌های اوراکل تاثیر بگذارند و به همین دلیل مهم است که تنظیمات امنیتی با دقت مورد بررسی و ارزیابی قرار گیرند.

 

مجوزهای فایل های تایید هویت

توضیحات:

فایل‌های تایید هویت شامل passwd، group، shadow و gshadow اطلاعات مهمی مانند نام کاربران، گروه‌ها و رمزهای عبور هش‌شده را نگهداری می‌کنند. تنظیم مجوزهای دسترسی این فایل‌ها به درستی از دسترسی غیرمجاز به این اطلاعات حیاتی جلوگیری می‌کند. همچنین، فایل‌ها و دایرکتوری‌هایی که به صورت ungrouped یا unowned هستند، باید شناسایی و اصلاح شوند، زیرا ممکن است نقطه ضعفی برای حملات احتمالی باشند.

اجرای اسکریپت Bash:

#!/bin/bash

# تنظیم مالکیت و مجوزهای فایل‌های تایید هویت
chown root:root /etc/passwd /etc/group /etc/shadow /etc/gshadow
chown root:root /etc/passwd- /etc/group- /etc/shadow- /etc/gshadow-

chmod 644 /etc/passwd /etc/group
chmod 600 /etc/shadow /etc/gshadow

# شناسایی فایل‌ها و دایرکتوری‌های ungrouped و unowned
find / -nogroup -o -nouser

 

اجرای Playbook Ansible:

 

---
- hosts: all
  become: yes
  tasks:
    - name: Set ownership of authentication files to root:root
      file:
        path: "{{ item }}"
        owner: root
        group: root
      loop:
        - /etc/passwd
        - /etc/group
        - /etc/shadow
        - /etc/gshadow
        - /etc/passwd-
        - /etc/group-
        - /etc/shadow-
        - /etc/gshadow-

    - name: Set correct permissions for authentication files
      file:
        path: "{{ item.path }}"
        mode: "{{ item.mode }}"
      loop:
        - { path: "/etc/passwd", mode: "0644" }
        - { path: "/etc/group", mode: "0644" }
        - { path: "/etc/shadow", mode: "0600" }
        - { path: "/etc/gshadow", mode: "0600" }

    - name: Find files and directories without group or owner
      command: find / -nogroup -o -nouser
      register: unowned_files

    - name: Display unowned files
      debug:
        var: unowned_files.stdout_lines

 

مغایرت احتمالی با نصب Oracle 19.23:

  1. مشکل در احراز هویت کاربران:

    • مثال: اگر مجوزهای فایل‌های passwd و shadow به درستی تنظیم نشده باشد، ممکن است دسترسی به سیستم برای کاربران محدود شود. این موضوع می‌تواند در فرآیندهای خودکار اوراکل مانند اجرای اسکریپت‌ها یا فرآیندهای پس‌زمینه مشکلاتی ایجاد کند.
  2. مشکلات مرتبط با فایل‌های unowned:

    • مثال: فایل‌های unowned و ungrouped می‌توانند نشانه‌ای از مشکلات امنیتی باشند. اگر این فایل‌ها مربوط به اوراکل باشند و دسترسی به آنها از دست رفته باشد، ممکن است مشکلاتی در دسترسی به داده‌ها یا فایل‌های تنظیمات ایجاد شود.

این تنظیمات باید به دقت انجام شوند تا از هرگونه اختلال در عملیات روزانه و دسترسی به سیستم جلوگیری شود.

 

تنظیمات امنیتی مربوط به USER و GROUP

توضیحات:

تنظیمات امنیتی کاربران و گروه‌ها به منظور جلوگیری از دسترسی‌های غیرمجاز و سوءاستفاده‌ها بسیار مهم است. این تنظیمات شامل بررسی فایل‌های سیستم برای اطمینان از عدم وجود خطاها و انحرافات امنیتی مانند UID و GID تکراری، وجود کاربرانی با سطح دسترسی بالا (مانند root) و پیکربندی نامناسب متغیر PATH می‌باشد.

اجرای اسکریپت Bash:

#!/bin/bash

# بررسی عدم وجود + در فایل‌های passwd، shadow و group
grep '^\+:' /etc/passwd /etc/shadow /etc/group && echo "خطا: '+' در فایل‌های passwd، shadow یا group وجود دارد."

# بررسی اینکه فقط root دارای uid با مقدار 0 باشد
awk -F: '($3 == "0" && $1 != "root") {print "کاربر غیرمجاز با UID 0:", $1}' /etc/passwd

# بررسی اینکه Default Group برای Root Account دارای مقدار 0 باشد
awk -F: '($1 == "root" && $4 != "0") {print "گروه پیش‌فرض root مقدار نادرست دارد."}' /etc/passwd

# بررسی عدم وجود dot یا Writable Directory در PATH مورد استفاده توسط Root
echo $PATH | tr ":" "\n" | grep -E '(^$|^\.$|^.*\/\.$|^.*\/\.\.$)' && echo "خطا: PATH شامل دایرکتوری‌های نوشتنی یا نامعتبر است."

# بررسی اینکه هر کاربر مالک Home Directory خودش باشد
awk -F: '{print $1 ":" $6}' /etc/passwd | while IFS=: read -r user dir; do
  if [ -d "$dir" ] && [ ! -O "$dir" ]; then
    echo "کاربر $user مالک Home Directory خود نیست."
  fi
done

# بررسی گروه‌های موجود در passwd در group هم موجود باشد
awk -F: '{print $4}' /etc/passwd | sort -u | while read -r gid; do
  if ! grep -q ":$gid:" /etc/group; then
    echo "گروه با GID $gid در /etc/group وجود ندارد."
  fi
done

# بررسی عدم وجود فایل‌های .forward، .rhosts، .netrc در Home Directory کاربران
for user in $(awk -F: '{print $1}' /etc/passwd); do
  home=$(eval echo ~$user)
  for file in .forward .rhosts .netrc; do
    if [ -e "$home/$file" ]; then
      echo "کاربر $user فایل $file دارد."
    fi
  done
done

# بررسی عدم وجود UID و User Name تکراری، GID و Group Name تکراری
awk -F: '{print $3}' /etc/passwd | sort | uniq -d && echo "خطا: UID تکراری وجود دارد."
awk -F: '{print $1}' /etc/passwd | sort | uniq -d && echo "خطا: نام کاربر تکراری وجود دارد."
awk -F: '{print $3}' /etc/group | sort | uniq -d && echo "خطا: GID تکراری وجود دارد."
awk -F: '{print $1}' /etc/group | sort | uniq -d && echo "خطا: نام گروه تکراری وجود دارد."

 

اجرای Playbook Ansible:

---
- hosts: all
  become: yes
  tasks:
    - name: Check for '+' in passwd, shadow, and group files
      shell: grep '^\+:' /etc/passwd /etc/shadow /etc/group
      register: plus_entries

    - name: Check for non-root users with UID 0
      shell: awk -F: '($3 == "0" && $1 != "root") {print "کاربر غیرمجاز با UID 0:", $1}' /etc/passwd
      register: uid_zero_users

    - name: Check for dot or writable directories in root's PATH
      shell: echo $PATH | tr ":" "\n" | grep -E '(^$|^\.$|^.*\/\.$|^.*\/\.\.$)'
      register: path_issues

    - name: Check if each user owns their Home Directory
      shell: |
        awk -F: '{print $1 ":" $6}' /etc/passwd | while IFS=: read -r user dir; do
          if [ -d "$dir" ] && [ ! -O "$dir" ]; then
            echo "کاربر $user مالک Home Directory خود نیست."
          fi
        done
      register: home_ownership_issues

    - name: Check for missing groups in /etc/group
      shell: awk -F: '{print $4}' /etc/passwd | sort -u | while read -r gid; do
               if ! grep -q ":$gid:" /etc/group; then
                 echo "گروه با GID $gid در /etc/group وجود ندارد."
               fi
             done
      register: missing_groups

    - name: Check for prohibited files in Home Directories
      shell: |
        for user in $(awk -F: '{print $1}' /etc/passwd); do
          home=$(eval echo ~$user)
          for file in .forward .rhosts .netrc; do
            if [ -e "$home/$file" ]; then
              echo "کاربر $user فایل $file دارد."
            fi
          done
        done
      register: prohibited_files

    - name: Check for duplicate UIDs, User Names, GIDs, and Group Names
      shell: |
        awk -F: '{print $3}' /etc/passwd | sort | uniq -d && echo "خطا: UID تکراری وجود دارد."
        awk -F: '{print $1}' /etc/passwd | sort | uniq -d && echo "خطا: نام کاربر تکراری وجود دارد."
        awk -F: '{print $3}' /etc/group | sort | uniq -d && echo "خطا: GID تکراری وجود دارد."
        awk -F: '{print $1}' /etc/group | sort | uniq -d && echo "خطا: نام گروه تکراری وجود دارد."
      register: duplicates

 

مغایرت احتمالی با نصب Oracle 19.23:

فایل‌های .forward, .rhosts, .netrc:

مثال: وجود این فایل‌ها در Home Directory کاربر oracle ممکن است برای عملکردهای خاص اوراکل مورد نیاز باشد، مانند ارسال ایمیل‌های خودکار یا دسترسی به سیستم‌های دیگر. حذف این فایل‌ها می‌تواند باعث از دست رفتن این قابلیت‌ها شود.

بررسی UID و GID تکراری:

مثال: اگر کاربران سیستم عامل اوراکل با UID یا GID تکراری تعریف شده باشند، ممکن است دسترسی به فایل‌ها و دایرکتوری‌ها نادرست اعمال شود و منجر به مشکلات امنیتی یا دسترسی غیرمجاز گردد.

بررسی مالکیت Home Directory:

مثال: اگر مالکیت Home Directory به اشتباه تنظیم شده باشد، کاربران ممکن است نتوانند به فایل‌های خود دسترسی داشته باشند یا عملیات‌های حیاتی مانند نصب پچ‌ها یا به‌روزرسانی‌ها را انجام دهند.