付録C: 設定ファイルサンプル
典型的なシステム設定ファイルのサンプルと設定のベストプラクティスを示します。
表記(推奨度/副作用)
- 推奨度: 推奨 / 条件付き / 参考
- 副作用/注意: 互換性、負荷、セキュリティ影響、停止時間、リモート作業時の切断リスク等
ネットワーク設定サンプル
RHEL系(RHEL/RockyLinux/AlmaLinux等)ネットワーク設定
推奨度: 推奨(RHEL 9ではNetworkManager/keyfileをbaselineとする)
副作用/注意: 接続設定の変更により通信断が起こり得る。リモート作業時はconsole等の退避手段とrollback手順を確保する。
RHEL 9 では NetworkManager が標準で、接続プロファイルの既定保存形式は keyfile です。新規設定は nmcli、RHEL system role、または nmstate で管理し、/etc/NetworkManager/system-connections/*.nmconnection を直接作成・編集しないでください。プロファイル名とNIC名は別の値なので、変更前に nmcli connection show で対象を確認します。
NetworkManager/keyfile 設定例(RHEL 9の主手順)
次の例は、enp1s0用にstatic-enp1s0という接続プロファイルを新規作成します。192.0.2.0/24、198.51.100.0/24、203.0.113.0/24はRFC 5737の文書用アドレスなので、実環境のアドレスへ置き換えてください。リモート接続中の変更は通信断を起こし得るため、consoleとrollback手段を確保してから実行してください。
# 既存プロファイルとNICの対応を確認
nmcli connection show
nmcli device status
# 例: enp1s0用の静的IPv4プロファイルを作成
sudo nmcli connection add \
type ethernet \
con-name static-enp1s0 \
ifname enp1s0 \
ipv4.method manual \
ipv4.addresses "192.0.2.100/24" \
ipv4.gateway "192.0.2.1" \
ipv4.dns "192.0.2.53" \
ipv6.method auto
# 設定値を確認してから有効化
nmcli connection show static-enp1s0
sudo nmcli connection up static-enp1s0
# keyfileで保存されたことと、有効な接続を確認
nmcli -f TYPE,FILENAME,NAME connection show
nmcli connection show --active
Legacy: ifcfg-*(RHEL 8 / RHEL 9既存環境の移行対象)
/etc/sysconfig/network-scripts/ifcfg-*形式はRHEL 9でdeprecatedです。RHEL 9は既存profileを処理できますが、新規profileの主手順には使用せずkeyfileへ移行します。移行前に設定backupとconsoleを確保し、NM_CONTROLLED=noやcustom device nameがあるprofileはRed Hat公式の前提条件を先に確認してください。
# 現在の形式、ファイル、connection name/UUIDを確認
nmcli -f TYPE,FILENAME,NAME,UUID connection show
# 既存ifcfg profileをbackup(保存先は組織の運用規則に合わせる)
sudo cp -a /etc/sysconfig/network-scripts /root/network-scripts.before-keyfile-migration
# <connection-name-or-UUID>を実在する値へ置換して、1 profileずつ移行
sudo nmcli connection migrate "<connection-name-or-UUID>"
# keyfile化と接続状態を確認
nmcli -f TYPE,FILENAME,NAME,UUID connection show
nmcli connection show --active
nmcli connection migrateはsource ifcfg profileをkeyfileへ置換するため、旧ifcfg fileは元の場所に残りません。移行後のprofileは通常/etc/NetworkManager/system-connections/*.nmconnectionに保存されます。問題があればconsoleから、上の確認結果で特定した移行後keyfileを無効化・退避し、backup内の該当ifcfg fileを元のpathへ復元してnmcli connection reload後に接続を再度有効化します。同じUUIDのkeyfileとifcfg fileを併存させないでください。
公式情報(2026-07-21確認):
- RHEL 9: Configuring an Ethernet connection by using nmcli
- RHEL 9: NetworkManager connection profiles in keyfile format / ifcfg migration
Ubuntu/Debian ネットワーク設定
推奨度: 条件付き(Ubuntu は netplan が基本。Debian/既存運用では interfaces 等が残る場合がある)
副作用/注意: ネットワーク設定反映で瞬断が起こり得る。適用前に構文確認とロールバック手順を用意する。
/etc/netplan/*.yaml の例(Ubuntu / Netplan)
gateway4 / gateway6はdeprecatedです。現行の主例ではroutesでdefault routeを定義します。例示する192.0.2.0/24はRFC 5737の文書用アドレスなので、実環境のアドレスへ置き換えてください。実際のfile名とinterface名は環境に合わせ、cloud-init等が生成元の場合は先に永続化の責務を確認してください。
network:
version: 2
ethernets:
enp1s0:
dhcp4: false
addresses:
- 192.0.2.100/24
routes:
- to: default
via: 192.0.2.1
nameservers:
addresses:
- 192.0.2.53
search:
- example.com
リモート接続中はconsoleとrollback手段を確保し、構文生成とtimeout付き試行を経てから確定します。
sudo netplan generate
sudo netplan try
netplan status enp1s0
公式情報(2026-07-21確認):
/etc/network/interfaces (Debian/Ubuntu classic)
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
dns-search example.com
# DHCP設定例
# auto eth0
# iface eth0 inet dhcp
ルーティング設定
推奨度: 条件付き(恒久設定はOS/配布方式に合わせて管理する)
副作用/注意: 経路変更は到達性に直結する。誤るとリモート接続断や経路ループが発生し得る。
RHEL 9 / NetworkManager(nmcli)
恒久routeは対象connection profileへ追加します。次の例ではstatic-enp1s0に2経路を追加します。
sudo nmcli connection modify static-enp1s0 \
+ipv4.routes "198.51.100.0/24 192.0.2.254, 203.0.113.0/24 192.0.2.254"
sudo nmcli connection up static-enp1s0
nmcli connection show static-enp1s0
ip route show
/etc/sysconfig/network-scripts/route-*はifcfg profileを継続するRHEL 8 / RHEL 9既存環境のlegacy方式です。新規のRHEL 9手順には採用せず、上記keyfile profileへrouteを移してからnmcli connection migrateで移行します。
/etc/network/interfaces でのルート設定 (Debian/Ubuntu)
# eth0インターフェース設定内に追加
up route add -net 10.0.0.0/8 gw 192.168.1.254 dev eth0
up route add -net 172.16.0.0/12 gw 192.168.1.254 dev eth0
Web サーバー設定例
Apache HTTP Server
推奨度: 参考(採用している環境では有用。新規はNginx等の選択肢も検討)
副作用/注意: 設定変更によりサービス停止/意図しない公開範囲拡大が起こり得る。反映前に構文確認と段階適用を行う。
/etc/httpd/conf/httpd.conf (基本設定)
# 基本設定
ServerRoot "/etc/httpd"
Listen 80
Listen 443
# TLS/SSL の有効化は Listen 行ではなく、<VirtualHost *:443> や mod_ssl の設定(例: SSLEngine on)で行います
# セキュリティ設定
ServerTokens Prod
ServerSignature Off
# mod_headersを有効にし、成功・error responseの両方へ適用する
<IfModule mod_headers.c>
Header always set X-Frame-Options "DENY"
Header always set X-Content-Type-Options "nosniff"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'; form-action 'self'"
</IfModule>
# MPM設定(preforkモジュール)
<IfModule mpm_prefork_module>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxRequestWorkers 256
MaxConnectionsPerChild 4000
</IfModule>
# ログ設定
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog logs/access_log combined
ErrorLog logs/error_log
LogLevel warn
# バーチャルホスト設定
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html/example
ErrorLog logs/example_error.log
CustomLog logs/example_access.log combined
</VirtualHost>
# SSL設定
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html/example
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.crt
SSLCertificateKeyFile /etc/ssl/private/example.key
SSLCertificateChainFile /etc/ssl/certs/intermediate.crt
# SSL設定の強化
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on
</VirtualHost>
X-XSS-Protectionはnon-standardかつdeprecatedで、legacy browserのfilterが安全なpageへXSSを作り込む場合もあるため、現行hardening例では送信しません。CSPをXSSのdefense-in-depthとして使いますが、context-awareなoutput encoding、untrusted HTMLのsanitization、safe DOM API、input validationを置き換えるものではありません。
上のenforced baselineはsame-origin resourceだけを許可し、inline script/styleとeval()系APIを許可しません。既存siteへ直接適用すると機能を壊し得るため、最初に同じpolicyをContent-Security-Policy-Report-Onlyで配信し、実在する収集先をReporting-Endpointsとreport-toで指定して違反を観測します。必要なinline codeは'unsafe-inline'や'unsafe-eval'で緩和せず、responseごとのnonce、content hash、または外部fileへ移行してからContent-Security-Policyをenforceしてください。
mod_headersを有効化したうえで、構文、段階reload、実responseを確認します。
sudo apachectl configtest
sudo systemctl reload httpd
curl -sSI https://example.com/ | grep -iE '^(content-security-policy|x-content-type-options|x-frame-options):'
公式情報(2026-07-21 JST確認):
- MDN: X-XSS-Protection
- MDN: Content Security Policy guide
- MDN: Content-Security-Policy-Report-Only
- Apache HTTP Server 2.4: mod_headers
Nginx
推奨度: 推奨(一般的なWebサーバー/リバースプロキシとして広く利用される)
副作用/注意: 誤設定でダウンタイムやセキュリティリスクが増える。反映前に nginx -t で検証し、reload を優先する。
/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# ログ設定
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
# パフォーマンス設定
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# セキュリティ設定
server_tokens off;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'; form-action 'self'" always;
# Gzip圧縮
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
include /etc/nginx/conf.d/*.conf;
}
Nginxのadd_headerは、下位のserver / locationに別のadd_headerがあると上位設定を通常継承しません。共通headerをincludeへ切り出して各適用scopeで読み込むか、下の静的file用locationのように同じheaderを再設定します。採用versionで継承契約を明示し、nginx -t、reload、error responseを含む実responseで確認してください。
/etc/nginx/conf.d/example.conf
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
root /var/www/html/example;
index index.html index.php;
# SSL設定
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
# アクセス制御
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 静的ファイルのキャッシュ
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable" always;
# このscopeのadd_headerが上位設定を置換するため、共通security headerも再設定する
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'; form-action 'self'" always;
}
}
データベース設定例
MySQL/MariaDB
この節の一般設定は構成例です。製品間でparameterのdefault、廃止時期、反映方法が異なるため、後半のbinary log例はOracle MySQL向けのbaselineとして分離し、MariaDBへそのまま流用しません。
推奨度: 条件付き(環境/ワークロードに合わせて調整。デフォルト値を鵜呑みにしない)
副作用/注意: 設定変更は性能/互換性/安定性に影響する。反映に再起動が必要な項目があるため、検証環境で事前確認する。
/etc/my.cnf
[mysqld]
# 基本設定
port = 3306
socket = /var/lib/mysql/mysql.sock
datadir = /var/lib/mysql
pid-file = /var/run/mysqld/mysqld.pid
# 文字セット設定
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# メモリ設定
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
key_buffer_size = 256M
max_connections = 200
thread_cache_size = 8
# クエリキャッシュ(query_cache_*)は MySQL 8.0 では廃止されているため設定しない
# (MySQL 5.7 / MariaDB を前提とする場合のみ参考として記載)
# query_cache_size = 64M
# query_cache_limit = 2M
# ログ設定
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
# セキュリティ設定
bind-address = 127.0.0.1
# ssl-ca = /etc/mysql/ssl/ca-cert.pem
# ssl-cert = /etc/mysql/ssl/server-cert.pem
# ssl-key = /etc/mysql/ssl/server-key.pem
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
Binary log設定(Oracle MySQL 8.0.34以降)
次はOracle MySQL 8.0.34以降の新規installationをbaselineとする例です。MySQL 8.0ではbinary logとROW formatがdefaultであり、8.0.34以降はbinlog_format変数とformat変更自体がdeprecatedです。そのため、主例ではbinlog_formatを明示せず、binary logのbasenameとretentionだけを設定します。
[mysqld]
# replicationを使用する場合、server-idは各serverで一意にする
server-id = 1
# binary logのbasenameを明示する
log-bin = mysql-bin
# 自動purgeを有効にし、例として7日(604800秒)保持する
binlog_expire_logs_auto_purge = ON
binlog_expire_logs_seconds = 604800
604800は例示値です。最大replica lagに運用余裕を加えた期間を下回らず、point-in-time recoveryとbackup policyが要求する復旧可能期間を満たす値にします。短縮前には全replicaの適用位置と必要なbackupを確認してください。
log-binの有効化やbasename変更はstartup optionなので、設定反映には計画restartが必要です。反映後はdeprecated変数を参照せず、次のSQLでversion、binary log、自動purge、retentionを確認します。
SELECT @@version AS version,
@@global.log_bin AS log_bin,
@@global.binlog_expire_logs_auto_purge AS auto_purge,
@@global.binlog_expire_logs_seconds AS retention_seconds;
既存のSTATEMENT/MIXED環境では、明示設定だけを削除するとrestart後のevent形式が変わり得ます。application、temporary table、replicaの互換性を評価し、公式のreplication format移行手順に従ってROW移行を完了してから設定を除去してください。
MariaDBは別製品です。MariaDB 10.6.1以降にもbinlog_expire_logs_secondsがありますが、expire_logs_daysとのalias関係やbinlog_formatのdefault・変更契約はOracle MySQL 8.0と同一ではありません。採用中のMariaDB versionの公式system variableを確認してください。
公式情報(2026-07-21 JST確認):
- MySQL 8.0: Binary Logging Options and Variables
- MySQL 8.0.34 Release Notes: binlog_format deprecation
- MySQL 8.0: Replication Formats
- MariaDB: Replication and Binary Log System Variables
PostgreSQL
推奨度: 条件付き(環境/ワークロードに合わせて調整。変更前に効果と副作用を確認)
副作用/注意: パラメータ変更は性能とリソース使用量に影響する。適用タイミング(reload/restart)と影響範囲を確認する。
/var/lib/pgsql/data/postgresql.conf
# 接続設定
listen_addresses = 'localhost'
port = 5432
max_connections = 200
# メモリ設定
shared_buffers = 256MB
effective_cache_size = 1GB
work_mem = 4MB
maintenance_work_mem = 64MB
# WAL設定
wal_level = replica
max_wal_size = 1GB
min_wal_size = 80MB
checkpoint_completion_target = 0.7
# ログ設定
log_destination = 'stderr'
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'mod'
log_min_duration_statement = 1000
# 統計情報
track_activities = on
track_counts = on
track_functions = all
/var/lib/pgsql/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# Local接続
local all postgres peer
local all all scram-sha-256
# IPv4ローカル接続
host all all 127.0.0.1/32 scram-sha-256
# IPv6ローカル接続
host all all ::1/128 scram-sha-256
# レプリケーション接続
host replication replicator 192.168.1.0/24 scram-sha-256
監視設定サンプル
Nagios
推奨度: 参考(運用中の環境では有用。新規導入は要件に応じて他方式も検討)
副作用/注意: チェック間隔や同時実行数の設定次第で監視サーバー負荷が増える。通知設計を誤るとアラート疲れを招く。
/etc/nagios/nagios.cfg
# 主要設定ファイル
cfg_file=/etc/nagios/objects/commands.cfg
cfg_file=/etc/nagios/objects/contacts.cfg
cfg_file=/etc/nagios/objects/timeperiods.cfg
cfg_file=/etc/nagios/objects/templates.cfg
cfg_dir=/etc/nagios/servers
# ログ設定
log_file=/var/log/nagios/nagios.log
log_rotation_method=d
log_archive_path=/var/log/nagios/archives
# チェック設定
execute_service_checks=1
execute_host_checks=1
check_service_freshness=1
check_host_freshness=1
enable_notifications=1
# パフォーマンス設定
max_concurrent_checks=20
service_check_timeout=60
host_check_timeout=30
/etc/nagios/objects/templates.cfg
# ホストテンプレート
define host{
name linux-server
use generic-host
check_period 24x7
check_interval 5
retry_interval 1
max_check_attempts 10
check_command check-host-alive
notification_period workhours
notification_interval 120
notification_options d,u,r
contact_groups admins
register 0
}
# サービステンプレート
define service{
name generic-service
active_checks_enabled 1
passive_checks_enabled 1
parallelize_check 1
obsess_over_service 1
check_freshness 0
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
failure_prediction_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 10
retry_check_interval 2
contact_groups admins
notification_options w,u,c,r
notification_interval 60
notification_period 24x7
register 0
}
Zabbix
推奨度: 条件付き(統合監視の要件がある場合に有用)
副作用/注意: 収集間隔/保持期間によってDBや監視基盤の負荷が増える。認証情報の管理とアクセス制御も合わせて設計する。
/etc/zabbix/zabbix_server.conf
# データベース設定
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password
# ログ設定
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=10
DebugLevel=3
# プロセス設定
StartPollers=5
StartIPMIPollers=0
StartPollersUnreachable=1
StartTrappers=5
StartPingers=1
StartDiscoverers=1
StartHTTPPollers=1
# タイムアウト設定
Timeout=4
TrapperTimeout=300
UnreachablePeriod=45
UnavailableDelay=60
UnreachableDelay=15
# ハウスキーピング
HousekeepingFrequency=1
MaxHousekeeperDelete=500
セキュリティ設定例
SSH設定 (/etc/ssh/sshd_config)
推奨度: 推奨(ただし環境/運用に合わせて段階的に適用)
副作用/注意: 誤設定で管理者が締め出されるリスクがある。反映前に別経路(コンソール/踏み台)とロールバック手順を確保する。
# ポート設定
Port 22
Protocol 2
# 認証設定
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# セキュリティ設定
PermitEmptyPasswords no
MaxAuthTries 3
MaxSessions 10
ClientAliveInterval 300
ClientAliveCountMax 2
# 暗号化設定
Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-512
# ログ設定
SyslogFacility AUTH
LogLevel INFO
# アクセス制御
AllowUsers admin user1 user2
DenyUsers root
AllowGroups sshusers
Firewall設定 (iptables)
推奨度: 条件付き(ディストリ/方針により nftables/firewalld 等が標準の場合がある)
副作用/注意: ルール適用で通信断が発生し得る。リモート作業時は適用順序とロールバック(既存ルール復旧)を準備する。
#!/bin/bash
# /etc/iptables/rules.v4
# デフォルトポリシー
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
# ループバック許可
-A INPUT -i lo -j ACCEPT
# 確立済み接続許可
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH許可
-A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP/HTTPS許可
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# DNS許可
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p tcp --dport 53 -j ACCEPT
# ICMP許可(制限付き)
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 特定ネットワークからの管理アクセス
-A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
COMMIT
fail2ban設定 (/etc/fail2ban/jail.local)
推奨度: 条件付き(SSH等のブルートフォース対策として有用。運用状況に合わせて調整)
副作用/注意: 誤検知で正規ユーザーをBANする可能性がある。ログ/除外設定と解除手順を用意する。
[DEFAULT]
# 基本設定
bantime = 3600
findtime = 600
maxretry = 3
backend = auto
# 通知設定
destemail = admin@example.com
sender = fail2ban@example.com
action = %(action_mwl)s
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3
[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
設定管理のベストプラクティス
設定ファイルのバックアップ
推奨度: 推奨
副作用/注意: バックアップの保管先/権限/暗号化(秘密情報を含む場合)を考慮する。
#!/usr/bin/env bash
# 設定ファイル自動バックアップスクリプト
set -euo pipefail
BACKUP_DIR="/backup/config"
DATE="$(date +%Y%m%d_%H%M%S)"
# 重要な設定ファイルリスト
CONFIG_FILES=(
"/etc/httpd/conf/httpd.conf"
"/etc/nginx/nginx.conf"
"/etc/my.cnf"
"/etc/ssh/sshd_config"
"/etc/iptables/rules.v4"
)
mkdir -p -- "$BACKUP_DIR/$DATE"
for file in "${CONFIG_FILES[@]}"; do
if [ -f "$file" ]; then
cp "$file" "$BACKUP_DIR/$DATE/"
echo "Backed up: $file"
fi
done
# 30日以上古いバックアップを削除(破壊的操作)
# 注意: BACKUP_DIR が意図したディレクトリであることを必ず確認してください(例: "/" になっていない)。
# [注意] まず削除対象を表示し、問題なければ削除を有効化する
if [ -n "${BACKUP_DIR}" ] && [ "${BACKUP_DIR}" != "/" ] && [ -d "${BACKUP_DIR}" ]; then
find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -mtime +30 -print
# find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -mtime +30 -print -exec rm -rf -- {} +
else
echo "Skip cleanup: BACKUP_DIR is unsafe or missing: ${BACKUP_DIR}" >&2
fi
設定の検証
推奨度: 推奨
副作用/注意: 本番適用前に実施し、検証結果(差分/出力)を変更記録に残す。
#!/bin/bash
# 設定ファイル検証スクリプト
echo "=== Configuration Validation ==="
# Apache設定検証
echo "Checking Apache configuration..."
httpd -t && echo "Apache: OK" || echo "Apache: ERROR"
# Nginx 設定検証
echo "Checking Nginx configuration..."
nginx -t && echo "Nginx: OK" || echo "Nginx: ERROR"
# SSH設定検証
echo "Checking SSH configuration..."
sshd -t && echo "SSH: OK" || echo "SSH: ERROR"
# MySQL設定検証
echo "Checking MySQL configuration..."
mysqld --help --verbose > /dev/null 2>&1 && echo "MySQL: OK" || echo "MySQL: ERROR"
echo "=== Validation Complete ==="
これらの設定サンプルを参考に、環境に適した設定を構築してください。設定変更前にはバックアップを取得し、段階的に適用することで運用リスクを低減してください。