公開鍵配置とパスワード不要sudo
ログインパスワードは知っていて、Ansibleで操作するにはちょっとめんどくさいときに初期セットアップ的に行うやつ。公開鍵を配置し、sudo時にパスワード不要に設定する。
※完全にメモなのはごめんなさい。
事前作業
公開鍵を作成しておく。
# ssh-keygen
ansible本体と追加のパッケージをインストールする。
# dnf -y install ansible-core
# ansible --version
# ansible-galaxy collection install ansible.posix
# dnf install pip -y
# pip install passlib
インベントリファイルも作成しておく。
[server]
192.168.13.113
実行コマンド
必要に応じて--check
は外す。
# ansible-playbook -i inventory.ini set-pubkey.yml --ask-pass --ask-become-pass --check
Playbook
---
- name: Deploy SSH public key
hosts: all
remote_user: sysadmin
become: yes
tasks:
- name: Ensure .ssh directory exists
file:
path: "/home/sysadmin/.ssh"
state: directory
mode: '0700'
owner: sysadmin
group: sysadmin
- name: Add SSH public key
ansible.posix.authorized_key:
user: sysadmin
state: present
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
- name: Allow passwordless sudo for sysadmin
lineinfile:
path: /etc/sudoers
state: present
regexp: '^sysadmin'
line: 'sysadmin ALL=(ALL) NOPASSWD: ALL'
validate: 'visudo -cf %s'
いろいろセットアップする。
実行コマンド
必要に応じて--check
は外す。
# ansible-playbook -i inventory.ini os-conf.yml --check
Playbook
---
- name: Configure system users, NTP, and install httpd, NetData
hosts: all
become: yes
tasks:
- name: Create user stadmin
user:
name: stadmin
groups: wheel
password: "{{ 'admin' | password_hash('sha512') }}"
- name: Create user stuser
user:
name: stuser
password: "{{ 'user' | password_hash('sha512') }}"
- name: Install chrony package
yum:
name: chrony
state: present
- name: Configure chrony to use ntp.nict.jp
lineinfile:
path: /etc/chrony.conf
regexp: '^pool'
line: 'pool ntp.nict.jp iburst'
notify: Restart chronyd
- name: Ensure chronyd is started and enabled
systemd:
name: chronyd
state: started
enabled: yes
- name: Install httpd
package:
name: httpd
state: present
- name: Ensure httpd is started and enabled
systemd:
name: httpd
state: started
enabled: yes
- name: Open firewall for httpd
firewalld:
service: http
permanent: yes
state: enabled
notify: Reload firewall
- name: Install epel-release
package:
name: epel-release
state: present
- name: Install NetData
package:
name: netdata
state: present
- name: Ensure NetData is started and enabled
systemd:
name: netdata
state: started
enabled: yes
- name: Open firewall for NetData
firewalld:
port: 19999/tcp
permanent: yes
state: enabled
notify: Reload firewall
- name: Get host IP address
set_fact:
host_ip: "{{ ansible_default_ipv4.address }}"
- name: Setup the netdata.conf
lineinfile:
path: /etc/netdata/netdata.conf
regexp: '^ bind to ='
line: " bind to = {{ host_ip }}"
notify: Restart NetData
handlers:
- name: Restart chronyd
systemd:
name: chronyd
state: restarted
- name: Reload firewall
command: firewall-cmd --reload
- name: Restart NetData
systemd:
name: netdata
state: restarted
Ansibleを使わない場合の手順
ユーザー作成・グループ追加
# useradd stadmin
# passwd stadmin
# usermod -aG wheel stadmin
# useradd stuser
# passwd stuser
NTP設定
/etc/chrony.conf
のpool行(3行目)を変更する。
- pool 2.centos.pool.ntp.org iburst
+ pool ntp.nict.jp iburst
chronydの再起動
# systemctl restart chronyd.service
ApacheのインストールとFW許可
インストール
# dnf install httpd -y
Firewall許可
サービスでもポートでもどちらでも良い。
# firewall-cmd --add-service=http
# firewall-cmd --runtime-to-permanent
# firewall-cmd --add-port=80/tcp
# firewall-cmd --runtime-to-permanent
サービス起動・自動起動設定
# systemctl start httpd
# systemctl enable httpd
Basic認証を実装
設定ファイル
/etc/httpd/conf.d/auth_basic.conf
に下記の通り設定を記載する。(新規作成)
<Directory /var/www/html/auth-basic>
AuthType Basic
AuthName "Basic Authentication"
AuthUserFile /etc/httpd/conf/.htpasswd
require valid-user
</Directory>
ユーザー登録
user
というユーザーを作成し、パスワードの設定を行う。
# htpasswd -c /etc/httpd/conf/.htpasswd user
New password: # パスワード設定
Re-type new password:
Adding password for user user
ディレクトリ作成とApache再起動
テストページ用ディレクトリ(フォルダ)を作成し、Apacheを再起動する。(設定再読み込み)
# mkdir /var/www/html/auth-basic
# systemctl reload httpd
テスページ作成
/var/www/html/auth-basic/index.html
に下記を記載する。(新規作成)
<html>
<body>
<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">
Test Page for Basic Authentication
</div>
</body>
</html>
実装確認
http://(IPアドレス)/auth-basic/
にブラウザでアクセスし、下記のようなダイアログが出て来たらユーザーパスワードを入力してページを表示させる。
注意したいのが、一度ブラウザで正しいユーザー/パスワードを入力すると、ブラウザを閉じるまでパスワードレスでページが表示できてしまう。
NetDataインストール
リソースモニタリングツールであるNetDataをインストールする。
epel-releaseインストール
epel-release
は、追加のパッケージをインストールするときに使うやつ。
NetDataを入れるには必要。
# dnf install epel-release -y
NetDataインストール
# dnf install netdata -y
設定ファイル編集
アクセスを受け付けられるよう、自分のIPアドレスを設定する。
bind to = 192.168.17.118
再起動とFW穴あけ
# systemctl enable --now netdata
# firewall-cmd --add-port=19999/tcp
# firewall-cmd --runtime-to-permanent