سرور مجازی

۳ مطلب با کلمه‌ی کلیدی «سرور مجازی آلمان» ثبت شده است

  • ۰
  • ۰

نحوه استفاده از Ansible برای خودکارسازی تنظیمات اولیه سرور در اوبونتو 20.04

ورود به سایت

معرفی

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

Ansible یک معماری ساده ارائه می دهد که نیازی به نرم افزار خاصی برای نصب روی گره ها ندارد. همچنین مجموعه ای قوی از ویژگی ها و ماژول های داخلی را ارائه می دهد که نوشتن اسکریپت های اتوماسیون را تسهیل می کند.

این راهنما نحوه استفاده از Ansible را برای خودکارسازی مراحل موجود در راهنمای نصب اولیه سرور برای سرورهای اوبونتو 20.04 توضیح می‌دهد.

پیش نیازها

برای اجرای تنظیمات خودکار ارائه شده توسط playbook در این راهنما، به موارد زیر نیاز دارید:

  • یک گره کنترلی Ansible: یک دستگاه اوبونتو 20.04 با Ansible نصب و پیکربندی شده است تا با استفاده از کلیدهای SSH به میزبان Ansible شما متصل شود. اطمینان حاصل کنید که گره کنترل دارای یک کاربر معمولی با مجوزهای sudo و فایروال فعال است، همانطور که در راهنمای راه اندازی سرور اولیه ما توضیح داده شده است. برای راه اندازی Ansible، لطفاً راهنمای ما در مورد نحوه نصب و پیکربندی Ansible در اوبونتو 20.04 را دنبال کنید.
  • یک سرور راه دور با نصب تمیز اوبونتو 20.04: هیچ تنظیمات قبلی در این سرور مورد نیاز نیست، اما باید از گره کنترل Ansible که در بالا ذکر شد به این سرور دسترسی SSH داشته باشید. این سرور به یک سرور از راه دور میزبان Ansible تبدیل می شود که برای تامین خودکار توسط گره کنترل Ansible هدف قرار می گیرد.

این کتاب بازی چه کاری انجام می دهد؟

این کتاب بازی Ansible جایگزینی برای اجرای دستی از طریق روش مشخص شده در راهنمای راه اندازی اولیه سرور اوبونتو 20.04 و راهنمای تنظیم کلیدهای SSH در اوبونتو 20.04 هر بار که سرور را راه اندازی می کنید ارائه می دهد. یک بار کتاب پخش خود را تنظیم کنید و بعد از آن برای هر سرور از آن استفاده کنید.

اجرای این playbook اقدامات زیر را روی میزبان Ansible شما انجام می دهد:

  • aptitude را نصب کنید که توسط Ansible به عنوان جایگزینی برای مدیر بسته apt ترجیح داده می شود.
  • یک کاربر sudo جدید ایجاد کنید و sudo بدون رمز عبور را راه اندازی کنید.
  • یک کلید عمومی SSH محلی را کپی کنید و آن را در فایل authorized_keys برای کاربر مدیریت جدید در میزبان راه دور قرار دهید.
  • غیرفعال کردن احراز هویت مبتنی بر رمز عبور برای کاربر اصلی.
  • بسته های سیستمی را نصب کنید.
  • فایروال UFW را طوری پیکربندی کنید که فقط به اتصالات SSH اجازه دهد و هر درخواست دیگری را رد کند.

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

برای شروع، وارد یک کاربر دارای sudo در سرور گره کنترل Ansible خود شوید.

مرحله 1 – گره کنترل Ansible خود را آماده کنید

در سرور گره کنترل Ansible، IP سرور راه دور میزبان Ansible خود را به فایل موجودی Ansible خود اضافه کنید. استفاده از ویرایشگر متن دلخواه شما:

sudo nano /etc/ansible/hosts

با این کار فایل موجودی Ansible شما باز می شود. IP سرور راه دور میزبان Ansible خود را به بلوک [سرورها] اضافه کنید:

/etc/ansible/hosts

[servers]
server1 ansible_host=your_remote_server_ip

. . .

اکنون اتصال SSH خود را بین این گره کنترلی Ansible و سرور از راه دور میزبان Ansible خود آزمایش و احراز هویت خواهید کرد:

ssh root@your_remote_server_ip

درخواست احراز هویت را بپذیرید و در صورت درخواست رمز عبور خود را وارد کنید. هنگامی که اتصال SSH را تأیید کردید، CTRL+D را فشار دهید تا اتصال بسته شود و به گره کنترل خود بازگردید.

مرحله 2 – آماده کردن Playbook خود

فایل playbook.yml جایی است که تمام وظایف شما در آن تعریف می شود. یک کار کوچکترین واحد عملی است که می توانید با استفاده از کتاب بازی Ansible به طور خودکار انجام دهید. اما ابتدا، فایل playbook خود را با استفاده از ویرایشگر متن دلخواه خود ایجاد کنید:

nano playbook.yml

با این کار یک فایل YAML خالی باز می شود. قبل از اضافه کردن وظایف به کتاب بازی خود، با افزودن موارد زیر شروع کنید:

playbook.yml

---
- hosts: all
  become: true
  vars:
    created_username: sammy

با خیال راحت نام کاربری را با یکی از دلخواه خود جایگزین کنید.

تقریباً هر کتاب بازی که با آن روبرو می شوید با اعلان هایی مشابه این شروع می شود. hosts اعلام می کند که گره کنترل Ansible کدام سرورها را با این کتاب بازی هدف قرار می دهد. تبدیل وضعیت می کند که آیا همه دستورات با امتیازات ریشه افزایش یافته انجام می شوند یا خیر.

vars به شما امکان می دهد داده ها را در متغیرها ذخیره کنید. اگر تصمیم به تغییر این نام کاربری در آینده دارید، فقط باید همین خط را در فایل خود ویرایش کنید.

مرحله 3 – یک کار نصب Aptitude به Playbook خود اضافه کنید

به طور پیش فرض، وظایف به صورت همزمان توسط Ansible به ترتیب از بالا به پایین در کتاب بازی شما اجرا می شوند. این بدان معناست که ترتیب کارها مهم است، و شما می توانید با خیال راحت فرض کنید که اجرای یک کار قبل از شروع کار بعدی به پایان می رسد.

همه وظایف موجود در این کتاب بازی می توانند به تنهایی بایستند و مجدداً در سایر کتاب های بازی شما مورد استفاده قرار گیرند.

اولین کار خود یعنی نصب aptitude را اضافه کنید، ابزاری برای ارتباط با مدیر بسته لینوکس:

playbook.yml

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

در اینجا، شما از ماژول داخلی apt Ansible برای هدایت Ansible برای نصب aptitude استفاده می کنید. ماژول ها در Ansible میانبرهایی برای اجرای عملیاتی هستند که در غیر این صورت باید به عنوان دستورات bash خام اجرا می شدند. در صورتی که استعداد در دسترس نباشد، Ansible با خیال راحت دوباره به گزینه نصب بسته‌ها می‌رود. بنابراین در حالی که این مرحله از نظر فنی اختیاری است، Ansible از نظر تاریخی استعداد را ترجیح داده است.

مرحله 4 – اضافه کردن Sudo User Setup Tasks به Playbook خود

عمل خوبی است که از استفاده گسترده از کاربر ریشه خودداری کنید. می‌توانید ایجاد کاربری را که دارای امتیازات sudo است با اضافه کردن:

playbook.yml

    - name: Setup passwordless sudo
      lineinfile:
        path: /etc/sudoers
        state: present
        regexp: '^%sudo'
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
        validate: '/usr/sbin/visudo -cf %s' 

    - name: Create a new regular user with sudo privileges
      user:
        name: "{{ created_username }}"
        state: present
        groups: sudo
        append: true
        create_home: true

شما از ماژول lineinfile Ansible برای هدف گیری و جایگزینی یک خط خاص در یک فایل استفاده می کنید. در این مورد، شما از regex برای هدف قرار دادن یک خط خاص در فایل sudoers استفاده می‌کنید و سپس آن را تغییر می‌دهید تا امکان استفاده بدون رمز عبور از sudo را فراهم کنید. شما همچنین از visudo برای تأیید تغییرات خود استفاده می کنید تا از شکستن هر چیزی جلوگیری کنید.

برای استفاده از این مزیت، یک کاربر جدید با ماژول کاربر اضافه می‌کنید. Ansible اطمینان حاصل می کند که اگر این کاربر قبلاً وجود نداشته باشد، ایجاد شده است، که کاربر به گروه sudo تعلق دارد در حالی که از گروه های دیگر حذف نمی شود، و یک فهرست خانه ایجاد می شود.

مرحله 5 – اضافه کردن SSH Key Setup و غیرفعال کردن وظایف رمز عبور ریشه به Playbook شما

Ansible با این فرض عمل می کند که از کلیدهای SSH استفاده می کنید. جفت کردن استفاده از کلید SSH با غیرفعال کردن احراز هویت رمز عبور ریشه اکیداً توصیه می شود و به طور کلی تمرین خوبی است. برای خودکار کردن این، اضافه کنید:

playbook.yml

    - name: Set authorized key for remote user
      ansible.posix.authorized_key:
        user: "{{ created_username }}"
        state: present
        key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"

    - name: Disable password authentication for root
      lineinfile:
        path: /etc/ssh/sshd_config
        state: present
        regexp: '^#?PermitRootLogin'
        line: 'PermitRootLogin prohibit-password'

اگر نام کاربری و مکان کلید را وارد کنید، ماژول authorized_key قابل استفاده است. در اینجا، مسیر به سمت کلید شما با استفاده از تابع جستجوی Ansible ساخته می شود.

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

مرحله 6 – یک کار نصب بسته را به Playbook خود اضافه کنید

Ansible می تواند اطمینان حاصل کند که بسته های خاصی همیشه روی سرور شما نصب می شوند. به جای فراخوانی apt install بر روی هر بسته جداگانه، یا تقسیم آن به چندین کار، می‌توانید تمام بسته‌های مورد نظر خود را فهرست کنید:

playbook.yml

    - name: Update apt and install required system packages
      apt:
        pkg:
          - curl
          - vim
          - git
          - ufw
        state: latest
        update_cache: true

می توانید بسته ها را به دلخواه خود اضافه یا حذف کنید. این اطمینان حاصل می کند که همه بسته ها نه تنها موجود هستند، بلکه در آخرین نسخه نیز وجود دارند و پس از فراخوانی به روز رسانی با apt انجام می شود.

مرحله 7 – افزودن یک کار راه اندازی فایروال به Playbook خود

فایروال برای هر سروری که با اینترنت روبرو است ضروری است. می‌توانید از Ansible اطمینان حاصل کنید که UFW (دیوار آتش بدون عارضه) به درستی پیکربندی شده است با اضافه کردن:

playbook.yml

    - name: UFW - Allow SSH connections
      community.general.ufw:
        rule: allow
        name: OpenSSH

    - name: UFW - Enable and deny by default
      community.general.ufw:
        state: enabled
        default: deny

ماژول ufw ابتدا اطمینان حاصل می کند که دسترسی SSH از طریق آن مجاز است. سپس، این ماژول فایروال شما را فعال می کند در حالی که به طور پیش فرض تمام ترافیک دیگر به سرور شما را رد می کند.

مرحله 8 – کتاب راهنمای کامل خود را مرور کنید

کتاب بازی شما باید تقریباً شبیه شکل زیر باشد، با تفاوت های جزئی بسته به سفارشی سازی های شما:

playbook.yml

---
- hosts: all
  become: true
  vars:
    created_username: sammy

  tasks:
    - name: Install aptitude
      apt:
        name: aptitude
        state: latest
        update_cache: true

    - name: Setup passwordless sudo
      lineinfile:
        path: /etc/sudoers
        state: present
        regexp: '^%sudo'
        line: '%sudo ALL=(ALL) NOPASSWD: ALL'
        validate: '/usr/sbin/visudo -cf %s'

    - name: Create a new regular user with sudo privileges
      user:
        name: "{{ created_username }}"
        state: present
        groups: sudo
        append: true
        create_home: true

    - name: Set authorized key for remote user
      ansible.posix.authorized_key:
        user: "{{ created_username }}"
        state: present
        key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"

    - name: Disable password authentication for root
      lineinfile:
        path: /etc/ssh/sshd_config
        state: present
        regexp: '^#?PermitRootLogin'
        line: 'PermitRootLogin prohibit-password'

    - name: Update apt and install required system packages
      apt:
        pkg:
          - curl
          - vim
          - git
          - ufw
        state: latest
        update_cache: true

    - name: UFW - Allow SSH connections
      community.general.ufw:
        rule: allow
        name: OpenSSH

    - name: UFW - Enable and deny by default
      community.general.ufw:
        state: enabled
        default: deny

هنگامی که از کتاب بازی خود راضی شدید، می توانید از ویرایشگر متن خود خارج شده و ذخیره کنید.

مرحله 9 – Playbook خود را برای اولین بار اجرا کنید

اکنون آماده اجرای این کتاب بازی در یک یا چند سرور هستید. اکثر کتاب‌های پخش به‌طور پیش‌فرض پیکربندی شده‌اند که در هر سرور موجود در فهرست شما اجرا شوند، اما شما این بار سرور خود را مشخص می‌کنید.

برای اجرای playbook فقط در server1 که به صورت root متصل می شود، می توانید از دستور زیر استفاده کنید:

ansible-playbook playbook.yml -l server1 -u root -k

پرچم -l سرور شما را مشخص می‌کند و پرچم -u مشخص می‌کند که کدام کاربری در سرور راه دور وارد شود. از آنجایی که هنوز سرور راه دور خود را راه اندازی نکرده اید، root تنها گزینه شماست. پرچم -k در اولین اجرای playbook شما بسیار مهم است، زیرا به شما امکان می دهد رمز عبور SSH خود را وارد کنید.

خروجی مشابه این دریافت خواهید کرد:

 

Output

. . .

TASK [UFW - Allow SSH connections] ***************************************************************************************************************************************************************************************************************************
changed: [server1]

TASK [UFW - Enable and deny by default] **********************************************************************************************************************************************************************************************************************
changed: [server1]

PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************
server1                    : ok=9    changed=8    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

این نشان می دهد که راه اندازی سرور شما کامل شده است! خروجی شما نباید دقیقاً یکسان باشد، اما مهم این است که هیچ شکستی نداشته باشید.

اکنون که اولین راه‌اندازی را برای کتاب پخش خود انجام داده‌اید، همه تماس‌های انتساب‌پذیر بعدی را می‌توان با کاربر sammy و بدون پرچم -k انجام داد:

ansible-playbook playbook.yml -l server1 -u sammy

همچنین می توانید با استفاده از:

 

ssh sammy@your_remote_server_ip

 

به یاد داشته باشید که sammy را با کاربر تعریف شده توسط متغیر create_username و server_host_or_IP را با نام میزبان یا آدرس IP سرور خود جایگزین کنید.

پس از ورود به سرور، می‌توانید قوانین فعال فایروال UFW را بررسی کنید تا تأیید کنید که به درستی پیکربندی شده است:

sudo ufw status

شما باید خروجی مشابه این بگیرید:

 

Output

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             

این بدان معناست که فایروال UFW با موفقیت فعال شده است. از آنجایی که این آخرین کار در playbook بود، تأیید می کند که playbook به طور کامل در این سرور اجرا شده است.

نتیجه

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

در این راهنما، نحوه استفاده از Ansible را برای خودکارسازی کارهای اولیه که باید در یک سرور تازه اجرا شوند، مانند ایجاد یک کاربر غیر ریشه با دسترسی sudo، فعال کردن UFW و غیرفعال کردن ورود به سیستم ریشه مبتنی بر رمز عبور از راه دور، نشان دادید.

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

اگر می‌خواهید برای سفارشی‌سازی بیشتر تنظیمات اولیه سرور خود، وظایف جدیدی را در این کتاب بازی اضافه کنید، لطفاً به راهنمای مقدماتی Ansible Configuration Management 101: Writing Ansible Playbooks مراجعه کنید. همچنین می توانید راهنمای ما در مورد نحوه استفاده از نقش های Ansible برای انتزاع محیط زیرساخت خود را بررسی کنید.

 

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

اوبونتو 20.04تنظیم کلیدهای SSH در اوبونتو 20.04تنظیمات اولیه سرورتنظیمات اولیه سرور در اوبونتو 20.04خرید سرور مجازیخودکارسازی تنظیمات اولیه سرورراه اندازی اولیه سرورراه اندازی سرور مجازیسرور مجازی آلماننحوه استفاده از Ansible

  • behnam gol mohamadi
  • ۰
  • ۰

 چگونه سرورهای اوبونتو 20.04 را به روز نگه داریم

ورود به سایت

معرفی

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

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

این آموزش شامل موارد زیر خواهد بود: آزمایش راه‌اندازی مجدد برازنده به دنبال بهترین شیوه‌ها برای مدیریت برنامه، برای به حداقل رساندن هرگونه عوارض ناشی از به‌روزرسانی‌های تعمیر و نگهداری، پیکربندی به‌روزرسانی‌های خودکار برای اکثر بسته‌ها و کتابخانه‌های در حال اجرا بر روی دستگاه شما وصله هسته زنده، و سایر بهترین روش‌ها در مورد به‌روزرسانی‌های هسته

پیش نیازها

یک سرور اوبونتو 20.04 و یک کاربر غیر ریشه با امتیازات sudo.

مرحله 1 – پیروی از بهترین روش ها برای مدیریت برنامه

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

در صورت امکان، برنامه های موجود در پشته شما باید توسط سیستم init سرور شما مدیریت شود، که در اکثر توزیع های لینوکس مدرن از جمله اوبونتو سیستمی است. Systemd دستور systemctl را برای تعامل با سرویس های در حال اجرا و راه اندازی مجدد خودکار آنها در صورت نیاز ارائه می دهد. تقریباً تمام نرم افزارهایی که از طریق مدیریت بسته شما نصب می شوند و برای اجرا در پس زمینه طراحی می شوند، باید به طور خودکار یک سرویس systemd و یک فایل واحد پیکربندی را به عنوان بهترین روش ارائه دهند.

هنگام اجرای نرم افزار خود، یا نرم افزار مستقر شده از مخازن Git، ایده بدی نیست که فایل های واحد خود را برای ادغام با systemd بنویسید. به عنوان یک جایگزین سبک، ممکن است ترجیح دهید از ابزاری مانند سرپرست استفاده کنید. همچنین می‌توانید از زمان‌بندی cron سیستم خود با دستور reboot@ استفاده کنید.

پس از اینکه پیکربندی در جای خود قرار گرفت، مطمئن شوید که آن را از طریق راه اندازی مجدد تست کنید. می‌توانید با اجرای sudo shutdown now -r راه‌اندازی مجدد کنید، که فرآیندهای در حال اجرا شما را کاملاً متوقف می‌کند و بلافاصله راه‌اندازی مجدد می‌شود. همچنین می‌توانید به‌جای زمان کنونی، زمان را به hh:mm یا چند دقیقه از هم‌اکنون تعیین کنید تا در آینده راه‌اندازی مجدد را برنامه‌ریزی کنید. استقرار تولید معمولاً پس از قطعی های برنامه ریزی نشده نیازی به توجه شما ندارد و همه سرویس ها و نقاط پایانی لازم باید به طور خودکار بازیابی شوند.

اکنون که مطمئن شده‌اید محیط شما با راه‌اندازی مجدد تعمیر و نگهداری مشکلی نخواهد داشت، در مرحله بعد، نحوه برنامه‌ریزی به‌روزرسانی‌های خودکار را خواهید آموخت.

مرحله 2 – پیکربندی ارتقاءهای بدون نظارت

مدیر بسته اوبونتو، apt، دارای یک گردش کار کاملاً ثابت برای انجام یک ارتقاء کامل سیستم است. ابتدا، آپدیت apt را اجرا می‌کنید تا لیست بسته‌های خود را به‌روزرسانی کنید، و سپس، apt upgrade را بدون مشخص کردن بسته‌ای اجرا می‌کنید تا هر بسته در سیستم را ارتقا دهید. اگر با بسته‌های شخص ثالث تداخل نسخه داشته باشید یا اگر عمداً برخی از بسته‌ها را ارتقا نداده‌اید، این گردش کار ممکن است کمی متفاوت باشد، اما دستورات اصلی یکسان هستند.

اوبونتو یک ابزار منحصر به فرد به نام ارتقاهای بدون نظارت را به منظور بازیابی و نصب خودکار وصله های امنیتی و سایر ارتقاءهای ضروری برای سرور شما فراهم می کند. اکثر سرورهای اوبونتو با این ابزار به صورت خودکار نصب و پیکربندی می شوند، اما می توانید آن را با دستورات apt زیر نصب کنید:

sudo apt update
sudo apt install unattended-upgrades

پس از نصب، می توانید بررسی کنید که آیا سرویس ارتقاء بدون نظارت با استفاده از systemctl اجرا می شود:

sudo systemctl status unattended-upgrades.service

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

پیکربندی آن در /etc/apt/apt.conf.d/50unattended-upgrades ذخیره می شود. این فایل را با استفاده از nano یا ویرایشگر متن مورد علاقه خود باز کنید:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

فایل به خوبی حاشیه نویسی شده است، و می توانید خطوط بسیاری از نظرات کد (با //) را ببینید که عملکرد آن را توضیح می دهند. اولین بلوک پیکربندی، بسته‌هایی را که به‌طور خودکار به‌روزرسانی می‌شوند، بررسی می‌کند و با الگوی نام‌های مخزن بسته اوبونتو مطابقت دارد. فایل‌های موجود در مخزن هسته و مخزن -security به طور پیش‌فرض به‌روزرسانی می‌شوند، اما خطوط حاوی مخازن -updates، -proposed و -backports به‌طور پیش‌فرض نظر داده می‌شوند.

این مخازن به‌طور پیش‌فرض غیرفعال هستند، زیرا به احتمال زیاد حاوی تغییرات قطعی در بسته‌های نصب‌شده شما هستند. برای اینکه به صورت دستی آنها را برای ارتقای بدون نظارت فعال کنید، می توانید نمادهای // نظر را از این خطوط حذف کنید.

در پایین تر از فایل، تعدادی گزینه با ضامن تنظیمات درست / نادرست وجود دارد. به عنوان مثال، پس از نصب بسته هایی که برای اعمال نیاز به راه اندازی مجدد دارند، یک جابجایی برای راه اندازی مجدد خودکار وجود دارد. می توانید این گزینه را با حذف علامت // و تغییر false به true فعال کنید. با این حال، انجام این کار باعث می شود سرور شما در فواصل غیرقابل پیش بینی از دسترس خارج شود. اگر این گزینه را فعال کردید، مطمئن شوید که برنامه‌ها یا کاربران شما می‌توانند خرابی را تحمل کنند.

پس از اتمام ویرایش فایل را ذخیره کرده و ببندید. اگر از nano استفاده می کنید، Ctrl+X را فشار دهید، سپس وقتی از شما خواسته شد، Y و سپس Enter را فشار دهید.

اگر تغییراتی در پیکربندی ایجاد کردید، سرویس ارتقاهای بدون نظارت را مجدداً بارگیری کنید تا اعمال شود:

sudo systemctl reload unattended-upgrades.service

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

مرحله 3 – به روز رسانی و LivePatching هسته

کمتر از بسته های دیگر، باید هسته سیستم خود را به روز کنید. هسته لینوکس شامل (تقریبا) تمام درایورهای سخت افزاری در حال اجرا است و مسئول بیشتر تعاملات سطح پایین سیستم است. به‌روزرسانی‌های هسته معمولاً فقط در صورتی ضروری هستند که آسیب‌پذیری با مشخصات بالایی برای رفع آن وجود داشته باشد، اگر نیاز به استفاده از یک ویژگی عمومی جدید هسته دارید، یا اگر هسته شما آنقدر قدیمی شده است که خطر انباشته شدن باگ‌ها و آسیب‌پذیری‌ها وجود دارد. شما ممکن است آگاه نباشید

هیچ روش جهانی برای زمان بندی خودکار به روز رسانی هسته لینوکس وجود ندارد. این به این دلیل است که به‌روزرسانی‌های هسته از گذشته نیازمند راه‌اندازی مجدد کامل سیستم بوده‌اند و زمان‌بندی راه‌اندازی مجدد بدون ایجاد فرضیاتی در مورد محیط شما غیرممکن است. انتظار می‌رود که بسیاری از سرورها تا حد امکان در دسترس بودن 24 ساعته و 7 روز هفته را ارائه دهند و راه‌اندازی مجدد می‌تواند مدت زمان نامعلومی طول بکشد یا نیاز به مداخله دستی داشته باشد.

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

فعال کردن Livepatch برای اطمینان از Uptime سرور در طول به روز رسانی هسته

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

می توانید برای یک کلید Livepatch در https://auth.livepatch.canonical.com/ ثبت نام کنید. پس از ثبت نام، می توانید بسته snap canonical-livepatch را نصب کنید. Snap یکی دیگر از مدیریت بسته های اوبونتو است که در کنار apt اجرا می شود.

sudo snap install canonical-livepatch

می‌توانید با استفاده از کلید وب‌سایت آن‌ها، با فرمان یک خطی، canonical-livepatch را فعال کنید:

sudo canonical-livepatch enable your-key

خروجی باید حاوی پیام Successfully enabled device باشد. این سرویس باید از این پس بدون هیچ گونه مداخله دیگری در پس زمینه اجرا شود و می توانید وضعیت آن را با استفاده از وضعیت canonical-livepatch بررسی کنید:

sudo canonical-livepatch status

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

نتیجه

در این آموزش، چندین استراتژی را برای به روز نگه داشتن سرورهای اوبونتو به طور خودکار بررسی کردید. همچنین برخی از تفاوت های ظریف مخازن بسته، به روز رسانی هسته و مدیریت راه اندازی مجدد سرور را یاد گرفتید. همه اینها اصول مهم DevOps و کار با سرورها به طور گسترده تر هستند و تقریباً تمام پیکربندی های تولید بر اساس این مفاهیم اصلی هستند.

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

برچسب‌ها:LivePatching هستهاتصال به سرور مجازیبه روز رسانی سرورخرید سرور مجازیراه اندازی سرورسرور مجازیسرورهای اوبونتو 20.04فعال کردن Livepatch

 

  • behnam gol mohamadi
  • ۰
  • ۰

نحوه استفاده از Ansible Vault برای محافظت از داده های حساس Playbook

ورود به سایت

معرفی

Ansible Vault قابلیتی است که به کاربران امکان می دهد مقادیر و ساختارهای داده را در پروژه های Ansible رمزگذاری کنند. این امکان را فراهم می کند تا داده های حساسی را که برای اجرای موفقیت آمیز بازی های Ansible لازم است، اما نباید به صورت عمومی قابل مشاهده باشند، مانند گذرواژه ها یا کلیدهای خصوصی، ایمن کنید. Ansible به طور خودکار محتوای رمزگذاری شده در طاق را در زمان اجرا پس از ارائه کلید رمزگشایی می کند.

در این راهنما، نحوه استفاده از Ansible Vault را نشان خواهیم داد و برخی از روش‌های توصیه شده برای ساده‌سازی استفاده از آن را بررسی خواهیم کرد. ما از سرور اوبونتو 20.04 برای ماشین کنترلی Ansible استفاده خواهیم کرد. به هاست راه دور نیاز نیست.

پیش نیازها

برای پیگیری، به یک سرور اوبونتو 20.04 با یک کاربر غیر ریشه با امتیازات sudo نیاز دارید. شما می توانید راهنمای راه اندازی سرور اولیه Ubuntu 20.04 ما را دنبال کنید تا کاربری با مجوزهای مناسب ایجاد کنید.

در سرور، باید Ansible را نصب و پیکربندی کنید. برای نصب بسته های مناسب می توانید آموزش نصب Ansible در اوبونتو 20.04 را دنبال کنید.

هنگامی که سرور شما با شرایط بالا پیکربندی شده است، این راهنما را ادامه دهید.

Ansible Vault چیست؟

Ansible Vault مکانیزمی است که به محتوای رمزگذاری شده اجازه می دهد تا به طور شفاف در جریان های کاری Ansible گنجانده شود. ابزاری به نام ansible-vault داده‌های محرمانه به نام Secrets را با رمزگذاری روی دیسک ایمن می‌کند. برای ادغام این اسرار با داده‌های معمولی Ansible، هر دو دستور ansible و ansible-playbook، به ترتیب برای اجرای وظایف موقت و playbook ساختاریافته، از رمزگشایی محتوای رمزگذاری‌شده در طاق در زمان اجرا پشتیبانی می‌کنند.

Vault با جزئیات در سطح فایل پیاده سازی می شود، به این معنی که فایل های جداگانه یا رمزگذاری شده یا غیر رمزگذاری شده هستند. از الگوریتم AES256 برای ارائه رمزگذاری متقارن کلید شده به رمز عبور ارائه شده توسط کاربر استفاده می کند. این بدان معنی است که رمز عبور یکسان برای رمزگذاری و رمزگشایی محتوا استفاده می شود، که از نقطه نظر قابلیت استفاده مفید است. Ansible قادر به شناسایی و رمزگشایی هر فایل رمزگذاری شده در طاقچه ای است که در حین اجرای یک کتاب بازی یا کار پیدا می کند.

اکنون که کمی در مورد Vault چیست، می‌توانیم درباره ابزارهایی که Ansible ارائه می‌کند و نحوه استفاده از Vault با گردش‌های کاری موجود بحث کنیم.

تنظیم ویرایشگر Ansible Vault

قبل از استفاده از دستور ansible-vault، ایده خوبی است که ویرایشگر متن مورد نظر خود را مشخص کنید. تعدادی از دستورات Vault شامل باز کردن یک ویرایشگر برای دستکاری محتوای یک فایل رمزگذاری شده است. Ansible به متغیر محیط EDITOR نگاه می کند تا ویرایشگر مورد نظر شما را پیدا کند. اگر این تنظیم نشده باشد، به طور پیش فرض روی vi خواهد بود.

اگر نمی خواهید با ویرایشگر vi ویرایش کنید، باید متغیر EDITOR را در محیط خود تنظیم کنید.

برای تنظیم ویرایشگر برای یک فرمان فردی، دستور را با انتساب متغیر محیطی به صورت زیر اضافه کنید:

EDITOR=nano ansible-vault . . .

برای تداوم این موضوع، فایل ~/.bashrc خود را باز کنید:

nano ~/.bashrc

ویرایشگر مورد نظر خود را با افزودن یک تخصیص EDITOR به انتهای فایل مشخص کنید:

~/.bashrc

export EDITOR=nano

پس از اتمام کار فایل را ذخیره کرده و ببندید.

برای خواندن تغییر در جلسه فعلی، فایل را دوباره منبع کنید:

. ~/.bashrc

برای بررسی اینکه تنظیمات شما اعمال شده است، متغیر EDITOR را نمایش دهید:

echo $EDITOR

 

Output

nano

اکنون که ویرایشگر دلخواه خود را ایجاد کرده اید، می توانیم عملیات های موجود را با دستور ansible-vault مورد بحث قرار دهیم.

نحوه مدیریت فایل های حساس با ansible-vault

دستور ansible-vault رابط اصلی برای مدیریت محتوای رمزگذاری شده در Ansible است. این دستور در ابتدا برای رمزگذاری فایل ها استفاده می شود و سپس برای مشاهده، ویرایش یا رمزگشایی داده ها استفاده می شود.

ایجاد فایل های رمزگذاری شده جدید

برای ایجاد یک فایل جدید رمزگذاری شده با Vault، از دستور ansible-vault create استفاده کنید. نام فایلی را که می خواهید ایجاد کنید ارسال کنید. به عنوان مثال، برای ایجاد یک فایل YAML رمزگذاری شده به نام vault.yml برای ذخیره متغیرهای حساس، می توانید تایپ کنید:

ansible-vault create vault.yml

از شما خواسته می شود رمز عبور را وارد کرده و تأیید کنید:

 

Output

New Vault password: 
Confirm New Vault password:

هنگامی که رمز عبور خود را تأیید کردید، Ansible بلافاصله یک پنجره ویرایش باز می کند که در آن می توانید مطالب مورد نظر خود را وارد کنید.

برای آزمایش عملکرد رمزگذاری، متن آزمایشی را وارد کنید:

vault.yml

Secret information

هنگامی که فایل را ببندید، Ansible محتویات را رمزگذاری می کند. اگر فایل را بررسی کنید، به جای دیدن کلماتی که تایپ کرده اید، یک بلوک رمزگذاری شده خواهید دید:

cat vault.yml

 

Output

$ANSIBLE_VAULT;1.1;AES256
65316332393532313030636134643235316439336133363531303838376235376635373430336333
3963353630373161356638376361646338353763363434360a363138376163666265336433633664
30336233323664306434626363643731626536643833336638356661396364313666366231616261
3764656365313263620a383666383233626665376364323062393462373266663066366536306163
31643731343666353761633563633634326139396230313734333034653238303166

ما می‌توانیم برخی از اطلاعات هدر را ببینیم که Ansible برای اطلاع از نحوه مدیریت فایل استفاده می‌کند و به دنبال آن محتویات رمزگذاری‌شده که به صورت اعداد نمایش داده می‌شوند.

رمزگذاری فایل های موجود

اگر از قبل فایلی دارید که می خواهید با Vault رمزگذاری کنید، به جای آن از دستور encrypt ansible-vault استفاده کنید.

برای آزمایش، می‌توانیم با تایپ کردن یک فایل نمونه ایجاد کنیم:

echo ‘unencrypted stuff’ > encrypt_me.txt

اکنون می توانید فایل موجود را با تایپ کردن رمزگذاری کنید:

ansible-vault encrypt encrypt_me.txt

مجدداً از شما خواسته می شود رمز عبور را ارائه و تأیید کنید. پس از آن، یک پیام رمزگذاری را تایید می کند:

 

Output

New Vault password: 
Confirm New Vault password:
Encryption successful

به جای باز کردن یک پنجره ویرایش، ansible-vault محتویات فایل را رمزگذاری می کند و آن را روی دیسک می نویسد و نسخه رمزگذاری نشده را جایگزین می کند.

اگر فایل را بررسی کنیم، باید یک الگوی رمزگذاری شده مشابه را ببینیم:

cat encrypt_me.txt

 

Output

$ANSIBLE_VAULT;1.1;AES256
66633936653834616130346436353865303665396430383430353366616263323161393639393136
3737316539353434666438373035653132383434303338640a396635313062386464306132313834
34313336313338623537333332356231386438666565616537616538653465333431306638643961
3636663633363562320a613661313966376361396336383864656632376134353039663662666437
39393639343966363565636161316339643033393132626639303332373339376664

همانطور که می بینید، Ansible محتوای موجود را به همان روشی که فایل های جدید را رمزگذاری می کند، رمزگذاری می کند.

مشاهده فایل های رمزگذاری شده

گاهی اوقات، ممکن است لازم باشد به محتویات یک فایل رمزگذاری شده بدون نیاز به ویرایش یا نوشتن آن در سیستم فایل بدون رمزگذاری، ارجاع دهید. دستور ansible-vault view محتویات یک فایل را به صورت استاندارد تغذیه می کند. به طور پیش فرض، این بدان معنی است که محتویات در ترمینال نمایش داده می شوند.

فایل رمزگذاری شده vault را به دستور ارسال کنید:

ansible-vault view vault.yml

از شما رمز عبور فایل خواسته می شود. پس از وارد کردن موفقیت آمیز آن، محتوا نمایش داده می شود:

 

Output

Vault password:
Secret information

همانطور که می بینید، درخواست رمز عبور در خروجی محتویات فایل مخلوط می شود. هنگام استفاده از نمای ansible-vault در فرآیندهای خودکار این را در نظر داشته باشید.

ویرایش فایل های رمزگذاری شده

هنگامی که نیاز به ویرایش یک فایل رمزگذاری شده دارید، از دستور ansible-vault edit استفاده کنید:

ansible-vault edit vault.yml

 

از شما رمز عبور فایل خواسته می شود. پس از وارد کردن آن، Ansible فایل را در یک پنجره ویرایش باز می کند، جایی که می توانید تغییرات لازم را انجام دهید.

پس از ذخیره، محتویات جدید با استفاده از رمز رمزگذاری فایل دوباره رمزگذاری شده و روی دیسک نوشته می شود.

رمزگشایی دستی فایل های رمزگذاری شده

برای رمزگشایی یک فایل رمزگذاری شده vault، از دستور ansible-vault decrypt استفاده کنید.

نام فایل رمزگذاری شده را ارسال کنید:

ansible-vault decrypt vault.yml

از شما رمز عبور فایل خواسته می شود. پس از وارد کردن موفقیت آمیز آن، محتوا نمایش داده می شود:

 

Output

Vault password:
Secret information

همانطور که می بینید، درخواست رمز عبور در خروجی محتویات فایل مخلوط می شود. هنگام استفاده از نمای ansible-vault در فرآیندهای خودکار این را در نظر داشته باشید.

ویرایش فایل های رمزگذاری شده

هنگامی که نیاز به ویرایش یک فایل رمزگذاری شده دارید، از دستور ansible-vault edit استفاده کنید:

ansible-vault edit vault.yml

از شما رمز عبور فایل خواسته می شود. پس از وارد کردن آن، Ansible فایل را در یک پنجره ویرایش باز می کند، جایی که می توانید تغییرات لازم را انجام دهید.

پس از ذخیره، محتویات جدید با استفاده از رمز رمزگذاری فایل دوباره رمزگذاری شده و روی دیسک نوشته می شود.

رمزگشایی دستی فایل های رمزگذاری شده

برای رمزگشایی یک فایل رمزگذاری شده vault، از دستور ansible-vault decrypt استفاده کنید.

نام فایل رمزگذاری شده را ارسال کنید:

ansible-vault decrypt vault.yml

از شما خواسته می شود رمز رمزگذاری فایل را وارد کنید. پس از وارد کردن رمز عبور صحیح، فایل رمزگشایی خواهد شد:

 

Output

Vault password:
Decryption successful

اگر دوباره فایل را مشاهده کنید، به جای رمزگذاری طاق، باید محتوای واقعی فایل را ببینید:

cat vault.yml

 

Output

Secret information

فایل شما اکنون روی دیسک رمزگذاری نشده است. پس از پایان کار، مطمئن شوید که اطلاعات حساس را حذف کرده یا فایل را دوباره رمزگذاری کنید.

تغییر رمز عبور فایل های رمزگذاری شده

اگر نیاز به تغییر رمز عبور یک فایل رمزگذاری شده دارید، از دستور ansible-vault rekey استفاده کنید:

ansible-vault rekey encrypt_me.txt

هنگامی که دستور را وارد می کنید، ابتدا رمز عبور فعلی فایل از شما خواسته می شود:

 

Output

Vault password:

پس از وارد کردن آن، از شما خواسته می شود رمز عبور جدید صندوق را انتخاب و تأیید کنید:

 

Output

Vault password:
New Vault password:
Confirm New Vault password:

هنگامی که رمز عبور جدید را با موفقیت تأیید کردید، پیامی مبنی بر موفقیت در فرآیند رمزگذاری مجدد دریافت خواهید کرد:

 

Output

Rekey successful

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

اجرای Ansible با فایل‌های رمزگذاری‌شده Vault

پس از اینکه اطلاعات حساس خود را با Vault رمزگذاری کردید، می توانید از فایل ها با ابزار معمولی Ansible استفاده کنید. دستورهای ansible و ansible-playbook هر دو می‌دانند چگونه فایل‌های محافظت‌شده در صندوق را با در نظر گرفتن رمز عبور صحیح رمزگشایی کنند. بسته به نیاز شما چند راه مختلف برای ارائه رمز عبور برای این دستورات وجود دارد.

برای پیگیری، به یک فایل رمزگذاری شده در طاق نیاز دارید. با تایپ کردن می توانید یکی ایجاد کنید:

ansible-vault create secret_key

رمز عبور را انتخاب و تأیید کنید. هر محتوای ساختگی را که می خواهید پر کنید:

secret_key

confidential data

ذخیره کنید و فایل را ببندید.

همچنین می توانیم یک فایل میزبان موقت به عنوان موجودی ایجاد کنیم:

nano hosts

ما فقط لوکال هاست Ansible را به آن اضافه می کنیم. برای آماده شدن برای مرحله بعدی، آن را در گروه [پایگاه داده] قرار می دهیم:

hosts

[database]
localhost ansible_connection=local

پس از اتمام کار فایل را ذخیره کرده و ببندید.

در مرحله بعد، یک فایل ansible.cfg در دایرکتوری فعلی ایجاد کنید، اگر قبلاً وجود نداشته باشد:

nano ansible.cfg

در حال حاضر، فقط یک بخش [پیش‌فرض] اضافه کنید و Ansible را به موجودی که ایجاد کردیم اضافه کنید:

ansible.cfg

[defaults]
inventory = ./hosts

وقتی آماده شدید، ادامه دهید.

استفاده از یک اعلان تعاملی

ساده ترین راه برای رمزگشایی محتوا در زمان اجرا این است که Ansible اعتبار مناسب را از شما بخواهد. می توانید این کار را با افزودن –ask-vault-pass به هر دستور ansible یا ansible-playbook انجام دهید. Ansible از شما رمز عبوری می خواهد که از آن برای رمزگشایی هر محتوای محافظت شده در خزانه که پیدا می کند استفاده می کند.

به عنوان مثال، اگر ما نیاز به کپی کردن محتویات یک فایل رمزگذاری شده در طاقچه در یک میزبان داشتیم، می‌توانیم این کار را با ماژول کپی و پرچم –ask-vault-pass انجام دهیم. اگر فایل واقعا حاوی داده های حساس است، به احتمال زیاد می خواهید دسترسی به میزبان راه دور را با محدودیت های مجوز و مالکیت قفل کنید.

ansible –ask-vault-pass -bK -m copy -a ‘src=secret_key dest=/tmp/secret_key mode=0600 owner=root group=root’ localhost

وظیفه ما مشخص می کند که مالکیت فایل باید به روت تغییر کند، بنابراین امتیازات مدیریتی مورد نیاز است. پرچم -bK به Ansible می گوید که رمز عبور sudo را برای میزبان مورد نظر درخواست کند، بنابراین از شما رمز عبور sudo خواسته می شود. سپس از شما رمز عبور Vault خواسته می شود:

 

Output

BECOME password:
Vault password:

هنگامی که رمز عبور ارائه می شود، Ansible تلاش می کند تا با استفاده از رمز عبور Vault برای هر فایل رمزگذاری شده ای که پیدا می کند، کار را اجرا کند. به خاطر داشته باشید که تمام فایل هایی که در حین اجرا به آنها ارجاع داده می شود باید از یک رمز عبور استفاده کنند:

 

Output

localhost | SUCCESS => {
    "changed": true, 
    "checksum": "7a2eb5528c44877da9b0250710cba321bc6dac2d", 
    "dest": "/tmp/secret_key", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "270ac7da333dd1db7d5f7d8307bd6b41", 
    "mode": "0600", 
    "owner": "root", 
    "size": 18, 
    "src": "/home/sammy/.ansible/tmp/ansible-tmp-1480978964.81-196645606972905/source", 
    "state": "file", 
    "uid": 0
}

درخواست رمز عبور امن است، اما می تواند خسته کننده باشد، به خصوص در اجراهای مکرر، و همچنین مانع از اتوماسیون می شود. خوشبختانه، چند جایگزین برای این شرایط وجود دارد.

استفاده از Ansible Vault با یک فایل رمز عبور

اگر نمی‌خواهید هر بار که کاری را انجام می‌دهید رمز عبور Vault را تایپ کنید، می‌توانید رمز عبور Vault خود را به یک فایل اضافه کنید و در حین اجرا به فایل ارجاع دهید.

به عنوان مثال، می توانید رمز عبور خود را در یک فایل .vault_pass مانند این قرار دهید:

echo ‘my_vault_password’ > .vault_pass

اگر از کنترل نسخه استفاده می کنید، مطمئن شوید که فایل رمز عبور را به فایل نادیده گرفتن نرم افزار کنترل نسخه خود اضافه کنید تا از انجام تصادفی آن جلوگیری کنید:

echo ‘.vault_pass’ >> .gitignore

اکنون می توانید به جای آن به فایل ارجاع دهید. پرچم –vault-password-file در خط فرمان موجود است. می‌توانیم همان کار را از قسمت آخر با تایپ کردن کامل کنیم:

ansible –vault-password-file=.vault_pass -bK -m copy -a ‘src=secret_key dest=/tmp/secret_key mode=0600 owner=root group=root’ localhost

این بار رمز عبور Vault از شما خواسته نمی شود.

خواندن خودکار فایل رمز عبور

برای جلوگیری از ارائه پرچم، می توانید متغیر محیطی ANSIBLE_VAULT_PASSWORD_FILE را با مسیر فایل رمز عبور تنظیم کنید:

export ANSIBLE_VAULT_PASSWORD_FILE=./.vault_pass

اکنون باید بتوانید دستور را بدون پرچم –vault-password-file برای جلسه جاری اجرا کنید:

ansible -bK -m copy -a ‘src=secret_key dest=/tmp/secret_key mode=0600 owner=root group=root’ localhost

برای آگاه کردن Ansible از محل فایل رمز عبور در جلسات، می توانید فایل ansible.cfg خود را ویرایش کنید.

فایل ansible.cfg محلی را که قبلا ایجاد کردیم باز کنید:

nano ansible.cfg

در بخش [defaults]، تنظیمات vault_password_file را تنظیم کنید. به محل فایل رمز عبور خود اشاره کنید. این می تواند یک مسیر نسبی یا مطلق باشد، بسته به اینکه کدام یک برای شما مفیدتر است:

ansible.cfg

[defaults]
. . .
vault_password_file = ./.vault_pass

اکنون، وقتی دستوراتی را اجرا می‌کنید که نیاز به رمزگشایی دارند، دیگر از شما خواسته نمی‌شود که پسورد vault را وارد کنید. به عنوان یک امتیاز، ansible-vault نه تنها از رمز عبور موجود در فایل برای رمزگشایی هر فایلی استفاده می کند، بلکه رمز عبور را هنگام ایجاد فایل های جدید با ایجاد ansible-vault و ensible-vault encrypt اعمال می کند.

خواندن رمز عبور از یک متغیر محیطی

ممکن است نگران ارسال تصادفی فایل رمز عبور خود به مخزن خود باشید. در حالی که Ansible یک متغیر محیطی برای اشاره به محل یک فایل رمز عبور دارد، اما متغیری برای تنظیم رمز عبور ندارد.

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

فایل .vault_pass خود را در ویرایشگر خود باز کنید:

nano .vault_pass

اسکریپت زیر را جایگزین محتویات کنید:

.vault_pass

#!/usr/bin/env python3

import os
print os.environ['VAULT_PASSWORD']

فایل را با تایپ کردن قابل اجرا کنید:

chmod +x .vault_pass

سپس می توانید متغیر محیطی VAULT_PASSWORD را تنظیم و صادر کنید، که برای جلسه فعلی شما در دسترس خواهد بود:

export VAULT_PASSWORD=my_vault_password

شما باید این کار را در ابتدای هر جلسه Ansible انجام دهید، که ممکن است ناخوشایند به نظر برسد. با این حال، این کار به طور موثری از انجام تصادفی رمز عبور رمزگذاری Vault شما محافظت می کند، که می تواند اشکالات جدی داشته باشد.

استفاده از متغیرهای رمزگذاری شده در Vault با متغیرهای منظم

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

تنظیم مثال

برای این مثال، ما وانمود می کنیم که در حال پیکربندی یک سرور پایگاه داده هستیم، بدون اینکه در واقع نیاز به نصب پایگاه داده به عنوان پیش نیاز داشته باشیم.

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

mkdir -p group_vars
nano group_vars/database

در داخل فایل group_vars/database، چند متغیر معمولی اضافه می کنیم. برخی از متغیرها، مانند شماره پورت MySQL، مخفی نیستند و می توانند آزادانه به اشتراک گذاشته شوند. سایر متغیرها، مانند رمز عبور پایگاه داده، محرمانه خواهند بود:

group_vars/database

---
# nonsensitive data
mysql_port: 3306
mysql_host: 10.0.0.3
mysql_user: fred

# sensitive data
mysql_password: supersecretpassword

می‌توانیم آزمایش کنیم که همه متغیرها با ماژول اشکال زدایی Ansible و متغیر hostvars در دسترس میزبان ما هستند:

ansible -m debug -a ‘var=hostvars[inventory_hostname]’ database

 

Output

localhost | SUCCESS => {
    "hostvars[inventory_hostname]": {
        "ansible_check_mode": false, 
        "ansible_version": {
            "full": "2.2.0.0", 
            "major": 2, 
            "minor": 2, 
            "revision": 0, 
            "string": "2.2.0.0"
        }, 
        "group_names": [
            "database"
        ], 
        "groups": {
            "all": [
                "localhost"
            ], 
            "database": [
                "localhost"
            ], 
            "ungrouped": []
        }, 
        "inventory_dir": "/home/sammy", 
        "inventory_file": "hosts", 
        "inventory_hostname": "localhost", 
        "inventory_hostname_short": "localhost", 
        "mysql_host": "10.0.0.3",
        "mysql_password": "supersecretpassword",
        "mysql_port": 3306,
        "mysql_user": "fred",
        "omit": "__omit_place_holder__1c934a5a224ca1d235ff05eb9bda22044a6fb400", 
        "playbook_dir": "."
    }
}

خروجی تأیید می کند که همه متغیرهایی که ما تنظیم کرده ایم روی هاست اعمال می شوند. با این حال، فایل group_vars/database ما در حال حاضر همه متغیرهای ما را در خود جای می دهد. این بدان معناست که ما می‌توانیم آن را رمزگذاری نشده رها کنیم، که به دلیل متغیر رمز پایگاه داده یک نگرانی امنیتی است، یا همه متغیرها را رمزگذاری کنیم، که باعث ایجاد مشکلاتی در قابلیت استفاده و همکاری می‌شود.

انتقال متغیرهای حساس به Ansible Vault

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

به منظور اعمال متغیرهای بیش از یک فایل، می توان از یک فهرست متغیر به جای فایل متغیر Ansible استفاده کرد. ما می توانیم پیکربندی خود را برای استفاده از این توانایی تغییر دهیم. ابتدا نام فایل موجود را از پایگاه داده به vars تغییر دهید. این فایل متغیر رمزگذاری نشده ما خواهد بود:

mv group_vars/database group_vars/vars

بعد، یک دایرکتوری با همان نام فایل متغیر قدیمی ایجاد کنید. فایل vars را به داخل منتقل کنید:

mkdir group_vars/database
mv group_vars/vars group_vars/database/

ما اکنون به جای یک فایل، یک دایرکتوری متغیر برای گروه پایگاه داده داریم و یک فایل متغیر رمزگذاری نشده داریم. از آنجایی که متغیرهای حساس خود را رمزگذاری خواهیم کرد، باید آنها را از فایل رمزگذاری نشده خود حذف کنیم. برای حذف داده های محرمانه، فایل group_vars/database/vars را ویرایش کنید:

nano group_vars/database/vars

در این صورت می خواهیم متغیر mysql_password را حذف کنیم. اکنون فایل باید به شکل زیر باشد:

group_vars/database/vars

---
# nonsensitive data
mysql_port: 3306
mysql_host: 10.0.0.3
mysql_user: fred

سپس، یک فایل رمزگذاری شده با طاق در دایرکتوری ایجاد کنید که در کنار فایل vars رمزگذاری نشده زندگی می کند:

ansible-vault create group_vars/database/vault

در این فایل متغیرهای حساسی که قبلا در فایل vars وجود داشت را تعریف کنید. از نام متغیرهای یکسانی استفاده کنید، اما رشته vault_ را برای نشان دادن اینکه این متغیرها در فایل محافظت شده توسط vault تعریف شده اند، پیشاپیش قرار دهید:

group_vars/database/vault

---
vault_mysql_password: supersecretpassword

پس از اتمام کار فایل را ذخیره کرده و ببندید.

ساختار دایرکتوری حاصل به این صورت است:

.
├── . . .
├── group_vars/
│   └── database/
│       ├── vars
│       └── vault
└── . . .

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

برای پرداختن به این موضوع، پروژه Ansible به طور کلی رویکرد کمی متفاوت را توصیه می کند.

ارجاع به متغیرهای Vault از متغیرهای رمزگذاری نشده

هنگامی که ما داده های حساس خود را به فایل محافظت شده در طاق انتقال دادیم، نام متغیرها را با vault_ در پیش گفتیم (mysql_password تبدیل به vault_mysql_password شد). ما می توانیم نام متغیرهای اصلی (mysql_password) را به فایل رمزگذاری نشده اضافه کنیم. به‌جای تنظیم مستقیم این مقادیر روی مقادیر حساس، می‌توانیم از عبارات قالب‌بندی Jinja2 برای ارجاع نام متغیرهای رمزگذاری‌شده از داخل فایل متغیر رمزگذاری نشده خود استفاده کنیم. به این ترتیب، می توانید با ارجاع به یک فایل، همه متغیرهای تعریف شده را مشاهده کنید، اما مقادیر محرمانه در فایل رمزگذاری شده باقی می مانند.

برای نشان دادن، فایل متغیرهای رمزگذاری نشده را دوباره باز کنید:

nano group_vars/database/vars

دوباره متغیر mysql_password را اضافه کنید. این بار، از قالب Jinja2 برای ارجاع به متغیر تعریف شده در فایل محافظت شده از طاق استفاده کنید:

group_vars/database/vars

---
# nonsensitive data
mysql_port: 3306
mysql_host: 10.0.0.3
mysql_user: fred

# sensitive data
mysql_password: "{{ vault_mysql_password }}"

متغیر mysql_password به مقدار متغیر vault_mysql_password که در فایل vault تعریف شده تنظیم می شود.

با این روش می توانید با مشاهده فایل group_vars/database/vars، تمامی متغیرهایی را که بر روی هاست های گروه پایگاه داده اعمال می شود، درک کنید. قسمت های حساس توسط قالب Jinja2 محو می شوند. group_vars/database/vault تنها زمانی باید باز شود که خود مقادیر نیاز به مشاهده یا تغییر داشته باشند.

می توانید بررسی کنید تا مطمئن شوید که همه متغیرهای mysql_* هنوز به درستی با استفاده از همان روش دفعه قبل اعمال می شوند.

ansible -m debug -a ‘var=hostvars[inventory_hostname]’ database

 

Output

localhost | SUCCESS => {
    "hostvars[inventory_hostname]": {
        "ansible_check_mode": false, 
        "ansible_version": {
            "full": "2.2.0.0", 
            "major": 2, 
            "minor": 2, 
            "revision": 0, 
            "string": "2.2.0.0"
        }, 
        "group_names": [
            "database"
        ], 
        "groups": {
            "all": [
                "localhost"
            ], 
            "database": [
                "localhost"
            ], 
            "ungrouped": []
        }, 
        "inventory_dir": "/home/sammy/vault", 
        "inventory_file": "./hosts", 
        "inventory_hostname": "localhost", 
        "inventory_hostname_short": "localhost", 
        "mysql_host": "10.0.0.3",
        "mysql_password": "supersecretpassword",
        "mysql_port": 3306,
        "mysql_user": "fred",
        "omit": "__omit_place_holder__6dd15dda7eddafe98b6226226c7298934f666fc8", 
        "playbook_dir": ".", 
        "vault_mysql_password": "supersecretpassword"
    }
}

هم vault_mysql_password و هم mysql_password قابل دسترسی هستند. این تکرار بی ضرر است و تاثیری در استفاده شما از این سیستم نخواهد داشت.

نتیجه

پروژه های شما باید تمام اطلاعات مورد نیاز برای نصب و پیکربندی موفقیت آمیز سیستم های پیچیده را داشته باشند. با این حال، برخی از داده‌های پیکربندی طبق تعریف حساس هستند و نباید در معرض عموم قرار گیرند. در این راهنما، ما نشان دادیم که چگونه Ansible Vault می تواند اطلاعات محرمانه را رمزگذاری کند تا بتوانید تمام داده های پیکربندی خود را در یک مکان بدون به خطر انداختن امنیت نگه دارید.

Ansible VaultVPS یا سرور مجازیاتصال به لینوکسخرید سرور مجازیسرور اوبونتو 20.04سرور مجازیسرور مجازی آلمانسرور مجازی آمریکامتغیرهای Vault

 

 

https://vpsgol.net/product/vps-germany/

 

https://vpsgol.net/product/vps-usa/

 

https://vpsgol.net/product/vps-france/

 

https://vpsgol.net/product/vps-canada/

 

https://vpsgol.net/product/vps-poland/

 

https://vpsgol.net/product/vps-netherlands/

 

https://vpsgol.net/product/vps-england/

  • behnam gol mohamadi