OSPN
Linuxシステム管理入門
オープンソースカンファレンス実行委員会
宮原 徹(@tmiyahar)
OSPN
本資料のライセンスについて
• 本資料はクリエイティブコモンズの「表示 -
継承 4.0 国際 (CC BY-SA 4.0) 」でライセン
スされています。
2
表示 — あなたは適切なクレジットを表示し、ライセンスへのリンク
を提供し、変更があったらその旨を示さなければなりません。あな
たはこれらを合理的などのような方法で行っても構いませんが、許
諾者があなたやあなたの利用行為を支持していると示唆するよう
な方法は除きます。
継承 — もしあなたがこの資料をリミックスしたり、改変したり、加工
した場合には、あなたはあなたの貢献部分を元の作品と同じライセ
ンスの下に頒布しなければなりません。
OSPN
本日の内容
コマンドを使ったLinuxシステム管理の勘所をデ
モを交えて解説します
• 管理者権限
• パッケージの管理
• サービスの起動、停止
• 公開鍵認証を使ったSSH接続
基本的にCentOS/RHEL 6ベースで話しますが、
一部CentOS/RHEL 7ベースの話も混ざります
3
OSPN
管理者権限
root権限の取り扱い
suコマンドやsudoコマンドを理解する
4
OSPN
root権限の取り扱い
A. 直接rootでログインさせる?
– sshdの設定で制御可能
– 公開鍵認証でrootとしてログインさせる
• パスワード認証は無効化
B. 一般ユーザでログインさせる?
a. suコマンドを実行してrootに変更
• システム設定作業が多いインストール直後には向いて
いる
b. sudoコマンドを実行してroot権限でコマンド実行
• コマンド実行履歴が/var/log/secureに記録される
OSPN
su コマンド実行の制限
• PAMを設定してwheelグループに所属してい
るユーザのみsuコマンドを実行できるように設
定
• suコマンド実行時にrootのパスワードを要求し
ないようにも設定できる
– rootのパスワード設定が不要
– SSHで暗号化されていたとしてもネットワークに
rootのパスワードを流したくない
– キーロガーなどによってrootパスワードを奪われ
たくない
OSPN
sudo コマンドの制御
• /etc/sudoersで制御
– パーミッションは400
– 編集にはvisudoコマンドを使用
• sudoersの書式は以下の通り
• wheelグループ所属のユーザーにsudoコマ
ンドを実行させる設定
ユーザ ホスト=(実行ユーザ) [NOPASSWD:] コマンド
%グループ ホスト=(実行ユーザ) [NOPASSWD:] コマンド
OSPN
パッケージ管理
Linuxディストリビューションは
パッケージの集合体
8
OSPN
パッケージ管理
• パッケージとは、アプリケーションに必要なファイ
ルをまとめて1つにしたもの
– ディストリビューションはパッケージによって、ファイル
を過不足なく管理できる
• パッケージの間では「依存関係」が存在する
– 依存しているパッケージがないと、パッケージがインス
トールできない(AがないとBはインストール不可)
– 依存されているパッケージがあると、パッケージを削
除できない(BがあるとAは削除不可)
パッケージA パッケージB
依存
OSPN
パッケージ管理ツール
• パッケージのインストールや削除を行う
• CentOS/RHELではyumコマンドが標準的
に使用されている
– パッケージの依存関係を自動的に解消
– インターネット上のリポジトリを参照してパッ
ケージのダウンロード、インストールを行う
• rpmコマンドも使用できる
– パッケージの依存関係は自動解消されない
– パッケージを細かく管理するのに向いている
10
OSPN
yumコマンドの主な使用方法
• パッケージ表示
– # yum list [installed]
– # yum grouplist
• インストール
– # yum install パッケージ名
– # yum groupinstall パッケージグループ名
• 更新系
– # yum check-update
– # yum update
• 削除
– # yum erase パッケージ名
• パッケージグループ名が日本語で使いにくい場合はLANG=C
を付けて実行
11
OSPN
リポジトリ設定
• /etc/yum.repos.dディレクトリに設定ファイル
○○.repoを配置
– 内部で参照するリポジトリのURLなどを定義
• 外部リポジトリを参照すると、ディストリ
ビューションに標準で含まれないソフトをイ
ンストール可能
– 例)EPELなど
12
OSPN
rpmコマンドの使い方(1)
• # rpm オプション パッケージ名(あるいはrpm)
– パッケージ名はURLを直接指定可能
– パッケージを複数指定で依存関係解消可能
• 検索オプション –q
– -qa インストール済みのパッケージを表示
– -qi パッケージの情報を表示
– -ql パッケージに含まれるファイルを表示
– -qf 指定したファイルを含むパッケージを表示
OSPN
rpmコマンドの使い方(2)
• インストールオプション
– 引数でrpmファイルを指定すること
– -ivh 通常インストール
– -Uvh アップデートインストール
– -Fvh 既にインストールされているパッケージ
のみアップデートインストール
• 削除オプション
– -e 指定されたパッケージを削除
• 依存関係がある場合、削除できない
OSPN
サービスの起動、停止
15
OSPN
SysV initとUpstart、systemd
• システム起動時のサービス起動の仕組み
• SysV initとUpstartは動作が似ているが、初期ス
クリプトなどが若干違う
• systemdは相当仕組みが異なる
SysV init Upstart
ディストリビューション CentOS 5 CentOS 6
初期設定ファイル /etc/inittab /etc/inittab
初期スクリプト /etc/rc.d/rc.sysinit /etc/init/rcS.conf
ランレベル初期化スクリプト /etc/rc.d/rc /etc/init/rc.conf
各ランレベル実行スクリプト /etc/rc.d/rcX.d/ /etc/rc.d/rcX.d/
OSPN
Linuxのサービス起動の仕組み
• /etc/rc.d/ディレクトリに関連ファイルが集
まっている
– /etc/rc.d/init.d/ 起動スクリプトを格納
– /etc/rc.d/rc?.d/ 各Runレベルでの起動ス
クリプトへのシンボリックリンクを格納
scriptinit.d
rc?.d
etc/
script
rc.d
シンボリック
リンク
OSPN
serviceコマンド
• service サービス名 コマンド
– /etc/init.d/サービス名スクリプトを呼び出し
• コマンドは以下の通り
– start サービスを起動する
– stop サービスを停止する
– restart サービスを再起動する
– reload 設定ファイルを再読み込み
– status 起動状況を表示
18
OSPN
systemdのディレクトリと起動プロセス
• /usr/lib/systemd/system/
– /etc/rc.d/init.d/に相当
• /etc/systemd/system/
– サービス起動スクリプトに対するシンボリックリンクが配置
– /etc/rc.d/に相当
システム起動時のスクリプト遷移
1. /etc/systemd/system/sysinit.target.wants/
– rc.sysinit スクリプト相当
2. /etc/systemd/system/basic.target.wants/
– システム共通に実行されるスクリプト
3. /etc/systemd/system/multi-user.target.wants/
– 従来のランレベル3(CUI)に相当
4. /etc/systemd/system/graphical.target.wants/
– 従来のランレベル5(GUI)に相当
19
OSPN
systemctlコマンド
• サービス一覧を表示
– # systemctl -t service
• サービスを起動、停止、再起動、状態確認
– # systemctl start|stop|restart|status service
• サービス自動実行の確認、ON/OFF
– # systemctl list-unit-files
– # syetemctl is-enabled service
– # systemctl enable|disable service
• 起動時のデフォルトターゲットを確認、変更
– # systemctl get-default
– # systemctl set-default target
20
OSPN
公開鍵認証を使ったSSH接続
21
OSPN
SSHをしっかり理解しよう
• SSHは暗号化通信でリモートログインする
仕組み
– ファイル転送やX11プロトコルの転送も可能
• パスワード認証、公開鍵認証、ホスト認証
などをサポート
– パスワード認証は危険なので公開鍵認証を設
定後に、SSHサーバで無効に設定
22
OSPN
秘密鍵/公開鍵暗号の仕組み
• 秘密鍵と公開鍵はペアで生成される
• 公開鍵で暗号化された情報は、秘密鍵だけが復号(元の
情報を取り出す)できる
公開鍵
情報 情報
秘密鍵
情報
暗号 復号
ペア
暗号化
情報
OSPN
公開鍵認証の開始手順
公開鍵
暗号
通信
SSHクライアント
SSHサーバ
公開鍵
公開鍵
照合
乱数
乱数
復号化
暗号化
乱数
乱数
MD5
MD5
チェックサム
照合
3DES
乱数
取出し
乱数
秘密鍵
3DES
パス
フレーズ
OSPN
公開鍵認証の設定
1. 公開鍵・秘密鍵の生成
– ssh-keygenコマンドを実行
– 秘密鍵にパスフレーズを設定
– ~/.sshディレクトリに秘密鍵、公開鍵のペアが生成
2. 公開鍵をサーバに設置
– ~/.ssh/authorized_keysに追加
– 所有権をログインするユーザー、パーミッションを
~/.sshは700、authorized_keysは600に設定
3. サーバに接続
– sshコマンドを実行
– 初回のみホスト証明書の受け入れ確認
– 2回目以降は~/.ssh/known_hostsと照合
OSPN
公開鍵・秘密鍵の作成
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): (エンターキー)
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase): (パスフレーズは非表示)
Enter same passphrase again: (パスフレーズは非表示)
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
b9:52:95:18:24:3c:83:91:9d:8d:76:06:0e:7a:b7:c2 user@centos6.example.com
↑フィンガープリントは公開鍵のハッシュ値
(略)
$ ls -l .ssh
合計 8
-rw-------. 1 user user 1743 11月 18 15:28 2015 id_rsa ←秘密鍵
-rw-r--r--. 1 user user 406 11月 18 15:28 2015 id_rsa.pub ←公開鍵
26
OSPN
公開鍵の設置
1. 接続先サーバにユーザーを作成
2. ~/.sshディレクトリを作成
– 所有者はユーザー(rootでの作業時に注意)
– パーミッションは700
3. ~/.ssh/authorized_keysファイルを作成
– 所有者はユーザー(rootでの作業時に注意)
– パーミッションは600
4. 公開鍵(id_rsa.pub)の内容を
~/.ssh/authorized_keysに追記
– $ cat id_rsa.pub >> ~/.ssh/authorized_keys
– ターミナルでエディタを使ってコピペでもOK
27
OSPN
サーバーに公開鍵を設置
# useradd sshuser ←ユーザーを作成
# su - sshuser ←作業するユーザーを変更
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ touch autorized_keys
$ chmod 600 autorized_keys
$ cat id_rsa.pub >> autorized_keys
↑ファイルがあらかじめ配置されている前提だが、どうやって
ファイルを持ってくるかが問題
28
OSPN
sshコマンドで接続
$ ssh sshuser@server.example.com
The authenticity of host 'server.example.com
(192.168.0.102)' can't be established.
RSA key fingerprint is
e3:ea:71:a7:b6:e8:6b:2e:27:f9:83:a5:0f:63:95:13.
Are you sure you want to continue connecting
(yes/no)? yes ←yesと入力
Warning: Permanently added
'server.example.com,192.168.0.102' (RSA) to the
list of known hosts.
Enter passphrase for key
'/home/user/.ssh/id_rsa': (パスフレーズを入力。非表示)
[sshuser@server ~]$
29
OSPN
OpenSSHサーバの設定
• /etc/ssh/sshd_configを設定
– デフォルトのままではセキュリティ的にやや問題
– 特に以下の2点については設定変更が必要
– 設定後sshdサービスを再起動
① PasswordAuthentication
– パスワード認証の可否を設定
– 公開鍵認証を設定後、設定をnoに変更する
• 設定しないとパスワード総当たり攻撃の対象に
② PermitRootLogin
– 直接rootでログインすることの可否を設定
– noに設定し、一般ユーザーでログイン後にsuやsudoでroot
権限を取得するやり方が多い?

Linuxシステム管理入門