4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LinuxAdvent Calendar 2024

Day 14

Ubuntu Server 使うときの自分なり定番設定を書いてみる

Posted at

概要

自宅でUbuntu Server立てる時に共通で実施する設定です。
自分でも忘れることあるので、備忘録としても使おうと目論んでます。

AppArmor 無効化

Ubuntu 標準のセキュリティ機能を無効化。

ChatGPT の回答 - AppArmor について概要を3行で教えて

AppArmor は、Linux でアプリケーションの動作を制限するセキュリティ機構です。プロファイルを用いてファイルやリソースへのアクセスを制御し、システムを保護します。設定が簡単で軽量なため、Ubuntu などで標準的に利用されています。

確認操作

aa-status
systemctl status apparmor

変更操作

aa-teardown
systemctl disable apparmor

パッケージの更新(Linux カーネル含む)

apt によるパッケージの更新。

ChatGPT の回答 - apt について概要を3行で教えて

apt は、Debian 系 Linux で使われるパッケージ管理ツールです。ソフトウェアのインストール、更新、削除、依存関係の管理を簡単に行えます。Ubuntu などで広く利用され、システムの効率的な管理をサポートします。

確認操作

なし(変更操作時に確認画面が出る)

変更操作

apt update
apt dist-upgrade

QEMU エージェントインストール

proxmox で立てることが多いのでインストール

ChatGPT の回答 - QEMU エージェントについて概要を3行で教えて

QEMU エージェントは、仮想マシンとホスト間の通信を支援するために使用されるツールです。ゲスト OS 内で動作し、ホスト側からのコマンド実行や情報取得(例: シャットダウン、IP アドレスの取得)を可能にします。主に KVM/QEMU 環境で使われ、仮想化管理を効率化します。

確認操作

dpkg -l qemu-guest-agent |cat
systemctl status qemu-guest-agent

変更操作

apt install qemu-guest-agent
systemctl enable --now qemu-guest-agent

ロケール設定

日本で使う場合の設定

ChatGPT の回答 - ロケール設定について概要を3行で教えて

ロケール設定は、システムやアプリケーションで使用する言語や地域に依存する設定(例: 日付形式、文字コード)を管理する仕組みです。Linux では locale コマンドや設定ファイル(例: /etc/default/locale)を通じてロケールを確認・変更できます。正しいロケール設定は、国際化対応やエラーメッセージの言語統一に役立ちます。

確認操作

dpkg -l language-pack-ja |cat
localectl
timedatectl

変更操作

apt install language-pack-ja
localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
timedatectl set-timezone Asia/Tokyo

パッケージインストール -基本編-

素の OS を使いやすくするためのパッケージ

ChatGPT の回答 - 以下のコマンドをステップバイステップで解説して

  • vim
    • 高機能テキストエディタ。ターミナルでファイル編集に使われます。
  • less
    • ファイルやコマンド出力をスクロールして閲覧するためのツール。
  • sudo
    • 一般ユーザーが管理者権限でコマンドを実行するためのツール。
  • htop
    • インタラクティブなプロセス管理ツール。プロセスの状態や CPU/メモリを視覚的に確認できる。
  • expect
    • スクリプトで対話型アプリケーションを自動操作するためのツール。
  • tree
    • ディレクトリ構造をツリー形式で表示するコマンド。
  • acl
    • ファイルシステムのアクセス制御リスト(ACL)を管理するツール。
  • bash-completion
    • Bash シェルのコマンド補完機能を拡張するパッケージ。
  • zip
    • ファイルを ZIP 形式で圧縮するためのツール。
  • unzip
    • ZIP 形式のファイルを解凍するツール。
  • dos2unix
    • DOS 形式(Windows)の改行コードを Unix 形式に変換するツール。
  • apt-utils
    • パッケージ管理の補助ツール。詳細なインストール情報を提供します。
  • software-properties-common
    • 追加リポジトリの管理に必要。
  • apt-transport-https
    • HTTPS を使ったパッケージリポジトリとの通信を可能にするパッケージ。
  • jq
    • JSON 形式データを扱うための軽量コマンドラインツール。

確認操作

dpkg -l \
    vim \
    less \
    sudo \
    htop \
    expect \
    tree \
    acl \
    bash-completion \
    zip \
    unzip \
    dos2unix \
    apt-utils \
    software-properties-common \
    apt-transport-https \
    jq \
    |cat

変更操作

apt install \
    vim \
    less \
    sudo \
    htop \
    expect \
    tree \
    acl \
    bash-completion \
    zip \
    unzip \
    dos2unix \
    apt-utils \
    software-properties-common \
    apt-transport-https \
    jq

パッケージインストール -ネットワーク編-

ネットワーク関連のツールをいれるパッケージ

ChatGPT の回答 - 以下のコマンドをステップバイステップで解説して

  • iputils-tracepath
    • ネットワーク経路を調査するツール。tracepath コマンドを提供し、MTU(最大転送単位)の問題を検出可能。
  • iputils-ping
    • ping コマンドを提供し、指定ホストへのネットワーク接続を確認。接続の可否や応答時間を測定。
  • ca-certificates
    • 信頼された証明書を管理するパッケージ。HTTPS 通信や TLS/SSL 証明書の検証に必要。
  • bind9-utils
    • BIND DNS サーバー関連のツールを提供。dig や host コマンドで DNS クエリを実行可能。
  • net-tools
    • 旧来のネットワーク管理ツールを提供。ifconfig や netstat コマンドが含まれる。
  • traceroute
    • ネットワーク経路を調査するツール。パケットが目的地に到達するまでのルートを表示。
  • nmap
    • ネットワークスキャナー。ポートスキャンやサービス検出、セキュリティ診断に使用。
  • netcat-openbsd
    • 軽量なネットワーク接続ツール。通信テストやポートスキャンに使用可能。
  • dnsutils
    • DNS 関連ツールを提供。nslookup コマンドで DNS 情報を照会可能。
  • curl
    • HTTP リクエストをコマンドラインで実行できるツール。ファイルのダウンロードや API 通信に利用。
  • git
    • 分散型バージョン管理システム。ソースコードの管理や共有に必須。
  • wget
    • HTTP や FTP でのファイルダウンロードを行うツール。スクリプトでの利用にも便利。
  • telnet
    • テキストベースのネットワークプロトコルを利用するツール。接続テストやポート確認に使用。
  • nfs-common
    • NFS(Network File System)を利用するクライアントツール。ネットワーク越しのファイル共有に必要。
  • smbclient
    • SMB/CIFS プロトコルを使用するクライアントツール。Windows 共有フォルダへアクセス可能。
  • cifs-utils
    • CIFS プロトコルを利用するためのツール。ファイル共有のマウントや管理に使用。
  • openssh-client
    • SSH クライアントツール。リモートサーバーへの接続を可能にします。
  • openssh-server
    • SSH サーバーツール。サーバーとしてリモートアクセスを許可します。
  • lynx
    • テキストベースのウェブブラウザ。低リソース環境やサーバーでウェブページの閲覧が可能。

確認操作

dpkg -l \
    iputils-tracepath \
    iputils-ping \
    ca-certificates \
    bind9-utils \
    net-tools \
    traceroute \
    nmap \
    netcat-openbsd \
    dnsutils \
    curl \
    git \
    wget \
    telnet \
    nfs-common \
    smbclient \
    cifs-utils \
    openssh-client \
    openssh-server \
    lynx \
    |cat

変更操作

apt install \
    iputils-tracepath \
    iputils-ping \
    ca-certificates \
    bind9-utils \
    net-tools \
    traceroute \
    nmap \
    netcat-openbsd \
    dnsutils \
    curl \
    git \
    wget \
    telnet \
    nfs-common \
    smbclient \
    cifs-utils \
    openssh-client \
    openssh-server \
    lynx

パッケージインストール -ドメイン参加編-

ドメイン参加のツールをいれるパッケージ

ChatGPT の回答 - 以下のコマンドをステップバイステップで解説して

  • realmd
    • Active Directory や他の認証ドメインに参加するためのツール。ドメイン参加の設定を簡単に行える。
  • sssd
    • System Security Services Daemon(SSSD)で、認証情報をキャッシュし、AD や LDAP と連携。ユーザー認証や ID 情報の管理に使用。
  • sssd-tools
    • SSSD を管理するための補助ツール。追加のコマンドライン機能を提供。
  • libnss-sss
    • NSS(Name Service Switch)モジュール。SSSD を通じてユーザーやグループ情報を提供。
  • libpam-sss
    • PAM(Pluggable Authentication Module)モジュール。SSSD を使用して認証を行う。
  • adcli
    • Active Directory にシステムを簡単に参加させるための CLI ツール。ドメイン参加プロセスの自動化を支援。
  • samba-common-bin
    • Samba 関連のコマンドラインツール。net コマンドを使ってドメインや共有設定を管理可能。
  • oddjob
    • サービスやタスクを管理するデーモン。ユーザー認証や自動プロビジョニングに使用。
  • oddjob-mkhomedir
    • 新規ドメインユーザーのホームディレクトリを自動で作成するツール。
  • packagekit
    • システムパッケージの管理を行うフレームワーク。GUI ツールでのソフトウェアインストールや更新を支援。
  • krb5-user
    • Kerberos 5 認証用のユーザーランドツール。Active Directory とのシングルサインオン(SSO)に必要。

確認操作

dpkg -l \
    realmd \
    sssd \
    sssd-tools \
    libnss-sss \
    libpam-sss \
    adcli \
    samba-common-bin \
    oddjob \
    oddjob-mkhomedir \
    packagekit \
    krb5-user \
    |cat

変更操作

apt install \
    realmd \
    sssd \
    sssd-tools \
    libnss-sss \
    libpam-sss \
    adcli \
    samba-common-bin \
    oddjob \
    oddjob-mkhomedir \
    packagekit \
    krb5-user

ドメイン参加

Ubuntu を ActiveDirectory に参加させる為の設定。
ドメイン名は個人情報チックなので【ドメイン名】としました。

ChatGPT の回答 - 以下のコマンドをステップバイステップで解説して

  • UID/GID の最大値変更
    目的: Linux のユーザー ID(UID)とグループ ID(GID)の最大値を 2147483600 に設定。
    理由: Active Directory の UID/GID 範囲が大きいため、Linux 側で許容する範囲を拡張。
  • NTP サーバー設定
    目的: NTP(ネットワーク時刻同期)の設定に、AD ドメインの NTP サーバーを指定。
    理由: Active Directory のドメイン参加には正確な時刻同期が必要。
  • sudo の無パスワード設定
    目的: AD グループ(domain admins と domain sudoers)に無パスワードで sudo 実行権限を付与。
    理由: 管理者作業を簡略化。
  • ホスト名設定
    目的: ホスト名をドメイン名付きの FQDN(Fully Qualified Domain Name)に変更。
    理由: AD ドメインで一意のホスト名を使用する必要があるため。
  • DNS 解決設定
    目的: ドメイン名を DNS 解決の対象として追加。
    理由: AD ドメイン参加時の名前解決を正確に行うため。
  • ホストファイルの更新
    目的: /etc/hosts でループバックアドレスにホスト名を登録し、127.0.1.1 のエントリを削除。
    理由: ホスト名解決がドメイン内で正しく機能するようにするため。
  • PAM 設定の更新
    目的: PAM(Pluggable Authentication Module)でホームディレクトリを自動作成し、アクセス権限を制限。
    理由: 新しいドメインユーザーのログイン時に適切なホームディレクトリを提供。
  • ホームディレクトリ準備
    目的: ドメインユーザー用のホームディレクトリを作成。
    理由: 各ユーザーのディレクトリを整理。
  • ドメイン参加
    指定した Active Directory ドメインに参加。
    理由: Linux システムを AD の管理下に置き、ユーザー認証やポリシー適用を可能にする。

確認操作

grep -E "^(UID_MAX|GID_MAX)" /etc/login.defs
show-timesync |grep ServerName
sudo -l | grep "NOPASSWD"
hostnamectl
cat /etc/systemd/resolved.conf.d/AD.conf
systemctl status systemd-resolved
cat /etc/hosts
pam-auth-update --list
grep "pam_mkhomedir.so" /etc/pam.d/common-session
ls -ld /home/【ドメイン名】
realm list

変更操作

sed -i "s/^UID_MAX.*$/UID_MAX 2147483600/g" /etc/login.defs
sed -i "s/^GID_MAX.*$/GID_MAX 2147483600/g" /etc/login.defs
sed -i "s/^[# ]*NTP=.*$/NTP=【ドメイン名】/g" /etc/systemd/timesyncd.conf ; systemctl restart systemd-timesyncd
cat <<"EOF" >> /etc/sudoers.d/NO-PASSWD
"%domain admins" ALL=NOPASSWD: ALL
"%domain sudoers" ALL=NOPASSWD: ALL
EOF
hostnamectl set-hostname $(hostname -s).【ドメイン名】
mkdir -p /etc/systemd/resolved.conf.d ; cat <<"EOF" >> /etc/systemd/resolved.conf.d/AD.conf
[Resolve]
Domains=【ドメイン名】
EOF
systemctl restart systemd-resolved
sed -i s/^127\.0\.0\.1.*$/"127.0.0.1 localhost localhost.localdomain $(hostname -s) $(hostname -f)"/g /etc/hosts
sed -i "/^127\.0\.1\.1.*$/d" /etc/hosts
pam-auth-update --enable mkhomedir
sed -i -re s/"pam_mkhomedir\.so"/"pam_mkhomedir\.so umask=027"/g /etc/pam.d/common-session
mkdir /home/【ドメイン名】; chmod 0755 /home/【ドメイン名】; chown root:root /home/【ドメイン名】
realm join 【ドメイン名】 -U administrator -v

SSSD の調整

ドメイン参加した状態だと使いづらいため調整する

ChatGPT の回答 - 以下のコマンドをステップバイステップで解説して

use_fully_qualified_names を False に設定して、user@domain の形式ではなく user 形式でユーザー名を利用可能にします。
デフォルトのログインシェルを/bin/bash に設定。
ホームディレクトリのパスを/home//形式に設定。
各ユーザーに専用グループを自動作成。
動的 DNS 更新を有効化。
動的 DNS の更新間隔を 12 時間に設定。
PTR レコード(逆引き DNS)の更新を有効化。
動的 DNS レコードの TTL を 1 時間に設定。

確認操作

grep -E "use_fully_qualified_names|default_shell|override_homedir|auto_private_groups|dyndns" /etc/sssd/sssd.conf
systemctl status sssd
id username
getent passwd username
nslookup $(hostname)

変更操作

sed -i "s/^use_fully_qualified_names = True$/use_fully_qualified_names = False/g" /etc/sssd/sssd.conf
cat <<"EOF" >> /etc/sssd/sssd.conf
default_shell=/bin/bash
override_homedir=/home/%d/%u
auto_private_groups = true
dyndns_update = true
dyndns_refresh_interval = 43200
dyndns_update_ptr = true
dyndns_ttl = 3600
EOF
systemctl restart sssd
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?