投稿

ラベル(サーバー管理)が付いた投稿を表示しています

LinuxインストールDVDの内部動作 - initrd, isolinux, vmlinuz, Anacondaなど-

イメージ
普段何気なく使っているインストールDVDだが、裏では initrd、isolinux、vmlinuz、Anaconda など、様々なファイルやソフトウェアーが協調して動作している。 本稿では、LinuxインストールDVDの内部動作を追い、initrd、isolinux、vmlinuz、Anaconda などについて理解を深めることを目的とした。 コンテンツは下記のとおり。 インストールDVDの中身 基本的なブートの仕組み initrdについて インストールDVDのディレクトリー構造 インストーラーが起動するまでの流れ インストールされるシステムはどこにあるのか インストールDVDの中身 インストールDVD = インストーラーではない。 インストーラーは、インストールDVDに含まれる一部のファイルであり、 インストールプログラム(installation program) などと呼ばれる。 インストールプログラムは、インストールDVDに含まれるリソースを使いながら、実際のインストール作業を行うプログラムである。 例えば、FedoraやRed Hat系ディストリビューションでは、 Anaconda という名前のインストールプログラムが使われている。 インストールプログラムは、インストールという特別な作業を行うことを除けば、普通のプログラムと変わらない。 例えば、Anacondaは、PythonとCで書かれたプログラムである。 よって、実行するにはOSが必要である。 つまり、新しくOSをインストールするために、(既存の)OSを起動(ブート)することになる。 インストールプログラムを実行するためにブートするOSは、起動に必要なリソースとともに、インストールDVDの中に入っている。 まとめると、インストールDVDは下記を含むメディアと言える。 インストールプログラム、及びインストールに必要なリソース インストールプログラムを実行するために起動するOS、及び起動に必要なリソース 基本的なブートの仕組み 上に書いたように、インストールプログラムを実行するためには、インストールDVDの中に入っているOSを起動(ブート)することになる。 よって、インストールDVDの動作を理解するためには、ブートを理解する必要...

KickstartによるBondingの設定(CentOS 7)

イメージ
Follow @venividivici830 ボンディング(Network bonding)は、複数のネットワークインターフェイスを、1つの仮想的なNICとして扱う機能。 ネットワークの冗長性やスループット向上に寄与する。 第4章 ネットワークボンディングの設定 5.4 ネットワーク・ボンディング ボンディングにより作成された仮想的なデバイスはマスター(master)、統合される物理デバイスはスレーブ(slave)と呼ばれる。 CentOS7で作るネットワークサーバ構築ガイド1804対応第2版 本投稿では、 Kickstartにより、自動的にBondingを設定して、CentOS 7をインストール した。 PXEサーバー、PXEクライアントは、ともにVirtualBox Version 5.2.20 r125813 (Qt5.6.3)の仮想マシンで、OSはCentOS Linux release 7.6.1810 (Core)とした。 ネットワーク構成は下記のとおり。 PXEサーバーは、既に構築されていることを前提とする。 PXEにより、VirtualBoxでCentOS 7のインストーラーを起動した(図で解説あり) また、 キックスタートファイルの配置場所は、PXEサーバーの/var/share/kickstart_filesで、NFSでexportされていることを前提とする。 VirtualBoxにおけるPXEとKickstartによるCentOS 7の自動インストール PXEクライアントの作成  VirtualBoxの仮想マシンとして、CentOS Client1、CentOS Client2の2つを作成した。 それぞれの仮想マシンの設定で、下記を実施。 システム > マザーボードから、起動順序の「ネットワーク」にチェック(PXEブートを行うため) ネットワークから、アダプター1とアダプター2を、割り当て「内部ネットワーク」として作成(PXEサーバーとの通信、及びBondingのスレーブとするため) 後の作業で必要になるため、それぞれの仮想マシンのアダプター1のMACアドレスを控えた。 CentOS Client1 - 08:00:27:A3:01:0...

PXEにより、VirtualBoxでCentOS 7のインストーラーを起動した(図で解説あり)

イメージ
Follow @venividivici830 VirtualBox Version 5.2.20 r125813 (Qt5.6.3)、CentOS Linux release 7.6.1810 (Core)を用いて、PXEによるインストーラーの起動までを試した。 PXEサーバー、PXEクライアントともに、VirtualBoxの仮想マシン。 作業開始時点のPXEサーバーの状態は、Minimal ISOをインストールした直後とする。 SELinuxはEnforcing、firewalldはstopしないで必要なだけ開放した。 基本的に、 Redhatの公式ドキュメント のやり方を踏襲した。 PXEについて PXEは、ネットワークブートを実現する仕組み。 OSやインストーラーを、ネットワーク経由で起動できる。 Kickstartと組み合わせることで、Linux OSのインストールを自動化できる。 PXEに必要なサーバーは、下記の3つ。 DHCPサーバー - IPアドレス付与、TFTPサーバーとブートローダーの場所を教える  TFTPサーバー - ブートローダーを提供、インストールソースの場所を教える  ファイルサーバー(HTTP、FTP、NFSなど) - インストールソースを提供  PXEクライアントは、これら3つのサーバーとやり取りし、ネットワーク経由でのOSやインストーラーの起動に必要な情報を順次取得していく。 下図はイメージ。 青はサーバー、緑は設定ファイルまたはブートに必要なリソースで、PXEサーバーを構築するために編集や配置を行うもの。 ネットワーク設定 ネットワーク構成は下図のようにした。 VirtualBoxのゲストOSとして2台のサーバーを作り、それぞれPXEサーバー、PXEクライアントとした。 PXEサーバーには、Minimal ISOでCentOS Linux release 7.6.1810 (Core)をインストールした。 PXEサーバーは、NICを2つ設定し、1つはブリッジアダプター、もう1つは内部ネットワークとして設定した。 ブリッジアダプターはホストOSと同じネットワークに所属し、家庭のルーターからDHCPでIPアドレスが動的に割り...

macOSからVirtualBoxのCentOSに公開鍵認証でssh接続できるようにする

インストールや、パスワード認証でssh接続できるようにするまでの手順は、下記をご覧ください。 macOS High SierraにVirtualBoxでCentOSをインストールする  macOSからVirtualBoxのCentOSにssh接続するまで  環境は、macOS High Sierra バージョン 10.13.5、Virtualbox バージョン 5.2.12 r122591、CentOS-7 (1804)です。 公開鍵認証とは 公開鍵認証は、ssh接続の認証方式の一つです。パスワード認証とは区別されます。 接続するユーザーが鍵ペアー(秘密鍵ファイルと公開鍵ファイル)を作っておき、サーバー側で、接続を許可するユーザーの公開鍵を登録します。 すると、 サーバーに登録された公開鍵に対応する秘密鍵をもったユーザー(PC)からのみ、接続が可能 になります。 秘密鍵をもったユーザーのみに接続を制限できるので、一般的にパスワード認証より強固と言われます。 クライアント側で、秘密鍵と公開鍵を作成する Mac側(sshクライアント側)で、下記のコマンドを打ち、鍵ペアーを作成します。 鍵のビット数については、manコマンドで-bオプションの説明を確認したところ、default is 2048 bitsとのことだったので、このままにした。 $ ssh-keygen -t rsa 対話的に、下記のように、いろいろ聞かれます。 Enter file in which to save the key (/Users/ user /.ssh/id_rsa):は、鍵ペアーが作成される先のディレクトリーを指定する部分ですが、()内がデフォルトなので、そのままEnterしました。 Enter passphrase (empty for no passphrase):は、パスフレーズ(秘密鍵を使うためのパスワードのようなもの)を指定する部分です。 適当に設定して、Enterします。空はやめたほうがいいです。 Generating public/private rsa key pair. Enter file in which to save the key (/Users/ user /.ssh/id_r...

コマンドラインから、コマンドのカンニングペーパーを参照できる、cheat.shがちょっと面白い

GitHubのTrendingを見ていたら、 cheat.sh というのを見つけました。 コマンドラインから、Linuxコマンドなどのcheat sheet(カンニングペーパー)を参照できるツールです。 ちょっとおもしろかったので、簡単に書きます。 README に書いてあるように、curlコマンドさえあれば使うことができます。 インストールなどは不要でした。 Linuxコマンドだけでなく、プログラミング言語の構文もサポートしており、55のプログラミング言語と、1,000のLinuxコマンドをカバーしているそうです。 curlコマンドを使ってカンニングペーパーが検索されると、100 ms以内でレスポンスを返すことを目標にしているようです。 簡単な使い方は、cheat.sh/の後に、カンニングペーパーを参照したいコマンドを指定して、curlでGETします。 例えば、ssコマンドの場合は、下記の通りです。 $ curl cheat.sh/ss 下記のようなレスポンスが返って来ました。 # Utility to investigate sockets # # Options: #   -4/-6   list ipv4/ipv6 sockets #   -n      numeric addresses instead of hostnames #   -l      list listening sockets #   -u/-t/-x list udp/tcp/unix sockets #   -p      Show process(es) that using socket # show all listening tcp sockets including the corresponding process ss -tlp # show all sockets connecting to 192.168.2.1 on port 80 ss -t dst 192.168.2.1:80 # s...

ロードバランサーを使った構成で、HTTPをHTTPSにリダイレクトする

Follow @venividivici830 X-Forwarded-Protoを使う場合と、使わない場合で、まとめてみました。 AWSだと、 このドキュメント にやり方が書いてありますね。 手元にAWS環境がないから試せないけど、流れとしては、下記のような感じだと思います。 ロードバランサーに対してHTTPでアクセスされても、HTTPSでアクセスされても、バックエンドWebサーバー(ロードバランサーに紐付いたサーバー)の80番ポートに転送する バックエンドWebサーバー側では、 X-Forwarded-Proto リクエストヘッダー を利用して、ロードバランサーに対してHTTPでアクセスされたか、HTTPSでアクセスされたかを判定する ロードバランサーに対してHTTPでアクセスされた場合、URLを書き換える .htaccess の使用は推奨されていない こと、初めて知りました。 VirtualHostを使え と。 下記、上記ドキュメントから引用。 仮想ホストファイルまたは .htaccess ファイルのいずれかで、mod_rewrite ルールを使用します。リダイレクトルールには仮想ホストファイルを使用することをベストプラクティスとして推奨しています。 注: .htaccess の使用は推奨されません。メインの構成ファイルにアクセスできない場合にのみ使用するようにしてください。 Apacheのサイトでも説明されていますね。 一般的に、サーバの主設定ファイルにアクセスできない場合を除いて、 .htaccess ファイルの使用は極力避けてください。 「HTTP HTTPS リダイレクト」とかで検索すると、.htaccessを利用した例がたくさん出てくるので、注意ですね。 X-Forwarded-Protoは、 ここ に説明されていますね。 バックエンドWebサーバーから見ると、ロードバランサーにHTTPでアクセスされても、HTTPSでアクセスされても、(上の例では)バックエンドWebサーバーの80番ポートに転送されるので、クライアントがHTTPでアクセスしたか、HTTPSでアクセスしたかを、RewriteCond %{HTTPS} offとかだと判定できません。 X-Forwarded-Pro...

Windowsで、特定のユーザーに特定のサービスの再起動を許可する

Follow @venividivici830 Windowsで、ユーザーごとに、サービスレベルで操作権限(サービスの開始、停止など)を与える話です。 流れとしては、 scコマンドで、サービスの随意アクセス制御リスト (DACL) に対し、セキュリティ記述子定義言語 (SDDL) 構文で、アクセス制御情報を追加する ことになります。 これにより、あるユーザーはOracleの再起動だけ許可、あるユーザーはTomcatの再起動だけ許可、など、細かい権限設定が可能です。 サーバーのマシン自体の再起動権限は与えられないけど、アプリケーションサーバープログラムや、DBサーバープログラムの再起動だけは許可したい、などのシチュエーションに使えます。 サービスのDACLは、名の通り、サービス単位で権限を制御するためのACLです。 SDDLは、ACLを文字列で記述するための構文です。 「;」で各フィールドを区切る形です。詳細については、 こちら 。に公式ドキュメントg サービスの操作権限をユーザーレベルで制御するには、最低限、下記のように3つのフィールドを設定すれば良いようです。 (許可 (A)/拒否 (D);;アクセス許可の文字列;;; SID ) ;;や;;;って何だよ、と最初見た時思いましたが、フィールドが空で、デリミター(;)だけが並んでいるだけですね。 許可 (A)/拒否 (D) には、サービスに対する特定の操作を 許可する場合はA、拒否する場合はD を設定します。 (許可または拒否する)サービスに対する特定の操作は、 アクセス許可の文字列 で設定します。 このページ に、 アクセス許可の文字列 に設定できる値が一覧されています。 再起動の場合は、RP(Start)とWP(Stop)の操作を許可すれば良いので、RPWP を指定すれば良いです。 SID は、ユーザーオブジェクトに固有のIDで、要はユーザーのIDです。権限を付与したいユーザーのSIDを指定します。 権限を付与したいユーザーで、 コマンドプロンプトからwhoamiコマンドをuserオプション付きで実行することにより、SIDを取得できます。 > whoami /user WIndowsにもwhoamiコマンドがあったんですね。知らなかった。 まと...

macOSからVirtualBoxのCentOSにssh接続するまで

イメージ
Follow @venividivici830 環境は、macOS High Sierra バージョン 10.13.5、Virtualbox バージョン 5.2.12 r122591、CentOS-7 (1804)です。 CentOSのインストールまでは、 こちら をご覧ください。 以下の例では、ゲストOSであるCentOSを、Macと同じネットワークに属させます。 この場合、VirtualBoxのネットワーク設定で、割り当てをブリッジアダプターにします。 仮想マシンの状態をバックアップ 設定に失敗しても後から元に戻せるように、VirtualBoxのスナップショット機能で、現在の仮想マシンの状態をバックアップしておきました。 スナップショットは、右上のマシンツールから画面を開き、作成ボタンで作成できます。 ネットワークの設定 ゲストOSであるCentOS 7に、固定IPアドレスを設定します。 nmcliコマンドを使います。 NetworkManagerというLinuxのネットワーク管理の仕組みがあり、そのコマンドラインインターフェースがnmcliです。 rootでCentOSにログインし、下記のコマンドを打つと、ネットワークインターフェースenp0s3が、disconnectedとなっていました。 # nmcli device status 下記のコマンドで、enp0s3をアクティブにします。 # nmcli con up enp0s3 下記のコマンドでIPアドレスを確認すると、筆者の自宅のネットワークはDHCPのため、DHCPでIPアドレスが割り当てられていました。 #ip addr 筆者の自宅のネットワークアドレスは、192.168.11.0/24でした。 PCやスマホと被らない適当なアドレスとして、CentOSに192.168.11.77を割り当てました。 # nmcli con mod enp0s3 ipv4.addresses 192.168.11.77/24 ネットワークインターフェースを再起動します。 # nmcli con down enp0s3 # nmcli con up enp0s3 Mac側のターミナルで、疎通確認ができました。 $ pi...