見出し画像

【セキスペに出た】Linuxの基本知識(情報処理安全確保支援士試験)

登録セキスペ(SC)をR06春~R04秋まで5回分の解説Noteを作ってきましたが、「ほぼ毎回Linux出るようになったなぁ」という強い印象が残りました。

5回中4回はスゴイ確率ですよね。

私はPG問題は解いてないですが。パッと見、令和04年秋午後1問1(コマンド ifconfigやcurl)もあるので、2問出ることもあるみたい。

SCではサーバのセキュリティは必ず出ます。世の中のサーバの80%以上はLinuxで動いているので、Linuxの知識があるとアドバンテージになるのは道理です。

このNoteには「過去問を解いた時にあったら良かったLinux知識」をまとめました。

日頃使っているWindowsでは意識しなかったことを、Linuxでは意識して使います。利用者のアカウント分け、データの権限、Windowsとは違うディレクトリ構造など。解答を考える「ゲタ」になるように書きました。

問題演習がまだの方はアドバンテージとして、問題演習後の方は本質的な知識を得るために使って頂ければと思います。


このNoteは、私が独学合格した経験と、IT専門学校での授業のノウハウで書いています。合格のお手伝いに少しでもなったら嬉しいです。

それでは始めましょう!




利用者アカウント


Linuxは、1台のコンピュータを複数人で使うのが得意なOSです。

コンピュータが高価な時代に、高性能コンピュータを複数人で共有するためのOSが「UNIX」でした。LinuxはUnixを参考に作られました。

サーバコンピュータは複数人から利用されるので、Linuxは便利なOSです。サーバを管理するアカウント、利用者に応じてアクセス「権限」を設定できます。

ここでは、アカウントの基礎と権限について学びます。




アカウントを分ける意義


PCを使うには利用者アカウントで「ログイン」する必要があります。

PCに入るときに、利用者IDやパスワードを入力しますよね(認証と云います)。

アカウント毎に環境を作れるので、あたかも自分専用のPCのように使えるんです。

例えばデスクトップの壁紙など。Webブラウザのお気に入りも別々にできるので、お父さんお母さんに「どんなWeb見てるんだろう」と探られずに済みますね。


アクセスできるデータも分けることができます。例えば、お父さんのアカウントでログインして保存したデータに、お母さんのアカウントでログインしたらアクセスはできません。

下図は、sennakiアカウントから、linucアカウントやlpicアカウントのデータにアクセスできない状況です。

自分専用のPCを使っていると意識しないかもしれませんね。


Linuxでは、アカウントを分ける概念がWindowsより明確で強いんです。




管理者アカウントと一般ユーザーの違い


アカウントには種類があります。

  • 管理者:PC全体の設定をする責任者用

  • 一般:日常的に理用する人用

管理者アカウントは、パソコン全体の管理をするためのアカウント。「スーパーユーザー」と呼ばれ、Windowsではadministrator、Linuxではrootという名前のアカウントが準備されています。


一般アカウントは、皆さんが使うアカウント。

一般アカウントでは、データ保存・アプリの利用はできますが、PC全体・他の利用者にも影響が出るような設定はできません。

一方、管理者アカウントは、PC全体の設定もデータのアクセスもできます。

アプリをインストールもできますし、全てのアカウントのデータを見ることも消すことも。

なお、一般アカウントでも、一時的に管理者権限を取得する操作をすれば、PC全体の設定などもできます(上図)。




データの所有者と「権限」


アカウントによって、アクセスできるデータ・実行できるプログラムは違います。

Linuxでは、ファイルやプログラムへのアクセスをアカウント毎に細かく設定できるんです。

ディレクトリ(フォルダ)やファイルの所有者は明記されますし、権限には、閲覧・編集(変更, 削除など)・実行の3種類があります。


アクセス権限はアカウント毎に設定でき、「グループ」毎にも設定できます。

「グループ」は、複数のアカウントをまとめた集団です。

部長・課長・一般社員のように役職で作るなどの使い道が一般的です。

部長A・部長Bをまとめて部長グループとして登録すれば、権限を一括設定できます。部長Aの権限を設定・部長Bの権限を設定とチクチクしなくても良く、部長グループとしての設定で一括すれば良いんです。

個人や研究室単位だとグループまで設定することはないかもですね。人数分の一般アカウント、責任者用の管理アカウントだけあれば充分です。

私もあまりグループを意識したことはありませんでした。




ディレクトリ構造


Windowsでは「Dドライブのレポートフォルダの~…」とフォルダを開いてファイルをダブルクリックして開いますよね。

Linuxでも同じです。

なお、フォルダは「ディレクトリ」とも云いますが、同じこと。両方の呼び方に慣れておいてください。

ただしLinuxには「ドライブ」の概念はありません。

Windowsでは、ドライブごとにフォルダ構造があり、複数の木(ツリー)構造があります。

Linuxでは、1本の木構造のディレクトリ構造です。

ここでは、Linuxのディレクトリ構造・パス・Webサーバの公開ディレクトリについて理解していきましょう。




ルートディレクトリが頂点


Windowsだとドライブが最上位。

いつもCドライブやDドライブを使っていますよね。Windowsは各ドライブごとにディレクトリ構造があります。

Linuxでは、ルートディレクトリ(/)が最上位。1つのディレクトリ構造です。


Windowsでは各機器・パーティションがドライブとして認識され、ドライブ毎にディレクトリ構造が作られています。

また、USBメモリを刺したらドライブ(例えばE)が追加されますよね。

Windowsのパスは、必ず先頭はドライブ。「C:¥」とか「D:¥」「E:¥」など。Linuxにはドライブはなく、全て「/」で始まります。


LinuxにUSBメモリを刺すと、ドライブは追加されません。

下図の青色部分のように、USBメモリはディレクトリの一部として組み込まれます。

Linuxでは、USBメモリもPC内部のHDDやSSDも、ディレクトリとして認識されます。記録媒体をディレクトリに割り当てることを「マウント」と云います。

USBメモリだけでなく、外付けHDD、DVDドライブも/media内のディレクトリに配置されます。PCに接続したら勝手にディレクトリが追加されますし、外せばディレクトリは消えます。マウント操作や配置ディレクトリは「mount」コマンドで手動変更もできます。




絶対パスと相対パスの違い


ディレクトリやファイルの場所を示す書き方を「パス」と云います。

パスには2つの表現方法があります。ITパスポートやFEで学びましたね。

  • 絶対パス:ルートディレクトリから目的地を指す記述方法

  • 相対パス:現在位置から目的地を指す記述方法


絶対パスは住所のような表現です。

地球の日本の東京都の葛飾区のように。

Windowsでは、ドライブを先頭に[¥」で区切って、「C:¥~¥~」のように指します。


Linuxでは、ルートディレクトリを先頭に「/」で区切って、「/~/~」のように指します。


相対パスは、現在位置からの表現。

絶対パスが住所なら、相対パスは車のナビに近いですね。

現在位置がイタリアだったら、一旦イタリアから出て、日本の東京都の葛飾区へ。現在地が世田谷区だったら、一旦世田谷区から出て、葛飾区へ入るイメージです。

一層上へ出るのは「..」で表現されます。

例えば「/media/sennaki/APPC12/mos」にいる時、「/media/sennaki/APPC12/old」を指すには、「../old」と表現するのが相対パスです。「..」で一旦mosから上に抜けて、oldに入って行きます。




Webサーバのディレクトリ構造


世界のWebサーバの86%がLinuxで動いています。>参考Web

Webサーバから見ると、一部のディレクトリ内のファイルが世界に公開されている状態です。

自宅兼お店のお店部分だけに、お客さんが入ってくるみたいなものですね。


私たちは「http://www.~/index.html」とアクセスしますが、実際はWebサーバの「/var/www/html/index.html」にアクセスしています(ソフトウェアがApache2の場合)。

「http://www.~/org/index_org.html」ならWebサーバの「/var/www/html/org/index_org.html」です。

URLは、プロトコル・コンピュータ名・アクセスするファイルのパスだったんですね。

なお、ソフトウェアApacheは、世界中で使われているWebサーバのソフトウェアです(>参考web)。OSS(オープンソースソフトウェア)の代表格として、Iパスにも出題されています>ITパスポート令和元年秋問89(過去問道場さん




コマンド


ここではコマンドの使い方を学びます。

私たちが日頃マウスでウィンドウ・ボタンを操作しているのは「GUI」というインタフェースです。コマンドによる操作は「CUI」と云います。

コマンドはイチイチキーボード操作するので、直感的ではなく分かりにくいです。少しハードルを感じちゃいますね。

しかし、慣れるとキーボードだけで操作した方が面倒くさくないんです。また、コマンドは文字列なのでプログラムから制御もできます。

ここでは、GUIとCUIの違いを、WindowsとLinuxを比べながら解説していきます。より深くコンピュータについて知れますよ。




コマンドによる基本操作


コマンドとは、プログラムを実行する文字命令のこと。

映画でハッカーさんがカタカタカタやってますよね。ハッキング中にプログラムを作ることもあるでしょうが、事前に作ったプログラムやコマンドを、状況に応じてキーボードで実行しています。


Linuxでは「ターミナル」(や端末)と呼ばれるソフトに、コマンドを入力します。ターミナルに入力されたコマンドは、シェルというプログラムによってコンピュータに伝えられます。


コマンドにはファイルを作ったり消したり、ネットワークの設定を見たりなど、色んなコマンドがあります。自分で作ったプログラムも立派なコマンドにできますよ。

誰しも最初に学ぶコマンドは以下ですね。

  • pwd:今いるディレクトリのパスを表示

  • ls:今いるディレクトリ内のデータの一覧を表示

  • cp:データのコピー

  • mv:データの移動

  • rm:データの削除

コマンドをプログラムのように繰り返し実行したり、状況に応じて実行するコマンドを変える「シェルスクリプト」も便利です。


Windowsではコマンドプロンプトと云います。

移動するcdコマンドはWindowsでもLinuxでも同じですが、コマンドは基本的に違います。ファイルの一覧表示のコマンドが、Linuxではls、Windowsではdir。他にもmvとmove、cpとcopyなど違います。

  • pwd→Windowsにはなし

  • ls→dir:今いるディレクトリ内のデータの一覧を表示

  • cp→copy:データのコピー

  • mv→move:データの移動

  • rm→del:データの削除

Windowsでコマンドを使うことはまずないです。

とはいえ、コマンドをテキストファイルに書いて一気に実行する「バッチファイル」は便利。Linuxの「シェルスクリプト」に相当します。

>私のブログ「Windowsコマンド実習」
>私のブログ「Linux実習」




GUIとCUIの違い


「GUI」は、マウスでボタンやウィンドウを操作するので、直感的で分かりやすいです。

しかし、スピードや繰り返し操作にデメリットがあります。

「CUI」は、キーボードによるコマンド操作なので、コマンドの使い方を覚える必要があり、初心者向けではないです。しかし、キーボードだけで操作でき、プログラムにも組み込めるのがメリット(スクリプトバッチ)。




パラメータによるコマンド実行


コマンドには、動作に必要な情報「パラメータ」を入力できます。

例えば、ファイルをコピーするコマンドでは、コピー元ファイル名とコピー後ファイル名を教えてあげないと実行できません。

パラメータが必要か不要かは、コマンドに依ります。


他にもよく使うのは「ls」。

「ls」だけ打ち込めば、ディレクトリ内の全てのファイル/ディレクトリが一覧表示されます。「ls pg*」と入力すれば「pg」で始まるものだけが一覧表示されます。

なお「*」はワイルドカードと云って「任意の文字列」という意味です。pg○とかpg○○とかpg○○○を指しています。




オプションによるコマンド実行


コマンドにオプションを入力すると、細かく動きが変わります。

例えば、ファイル一覧を表示するコマンドlsのオプションを見てみましょう。

  • ls:名前だけ一覧表示

  • ls -l:詳細も表示

  • ls -ltr:古い順に表示

オプションの文字列はコマンドに依ります。

「ls -h」とすればヘルプ(help)が表示されます。便利なものだけ覚えると良いですし、「こういうのできないかな?」と思ったら調べれば良いです。

なお、Windowsのコマンドのヘルプは「dir /?」とすれば表示されます。




シェル, ターミナルについて


コマンドを打ち込めるアプリは、Linuxでは「ターミナル」、Windowsでは「コマンドプロンプト」と呼ばれます。「シェル」はコマンドを入力したら必要なプログラムを実行してくれ、実行結果を表示してくれるプログラム。

シェル, ターミナルは、細かくは違うものですが、同じものと考えて問題ありません。どちらでも通じます。




環境変数はPC動作の設定値


「環境変数」とはPCの設定値。

Linuxでの環境変数とは、シェルの実行設定を指すのが一般的です。

実行するプログラムの場所を設定する「パス(PATH)」も有名。

Linuxの環境変数は、ファイル「.bashrc」などに書き込まれています。ファイル名先頭に「.」があると隠しファイル。

「ls」では見えないですが、「ls -a」で見えるようになります。


他にも「エイリアス」というコマンドの別名。「ls -alF」とイチイチ打ち込むのが面倒だから「ll」にする、などコマンドの別名を決められます。


Windowsでも環境変数はありますよ。プログラム開発ソフトなど、ディープで特殊なソフトを使う時に設定することがありますね。




パスを切る/通すとは


pwdもcpもlsも本当は、「/usr/bin/pwd」のように書かねば実行されません。

なぜならプログラムファイルが「/usr/bin/」内にあるから。

しかし環境変数に「コマンドを入力したら、この辺を探してね」と指定しているので、シェルが探し出してくれます。

「pwdかー。今いるディレクトリにはないなー、環境変数が書いてる.bashrcを見ると/usr/bin/を探せって書いてあるから見に行くかー。お、pwdのプログラムファイルあった、実行しよう!」という感じ。

環境変数PATHに設定することを「PATHを切る」「PATHを通す」と云います。ちょっとプロっぽい言葉です。




プロセス


WindowsもLinuxも、色んなプログラムが同時に実行されて動いています。

使うアプリは勿論プログラムですし、キーボードやマウスの操作を受け取るプログラム、画面に表示するプログラムだって同時に走っています。

Linuxでは、よりOSやプログラムに近づいた使い方を意識することが多いです。

Windowsで利用者アカウントやプロセスを意識したことが少なかったのは、初心者にとって使いやすいメリット。しかし、使いこなす人からするとデメリットに感じてくる部分があります。




プロセスは実行中のプログラム


「プロセス」とはPCで実行されているプログラム、と思って大丈夫です。

私たちが使っているアプリは勿論ですが、OSが動くために必要なプログラムもプロセスとして実行されています。

例えば。ネットワーク接続をしているプロセス、ソフトウェアのアップデートがないか調べるプロセスなどが自動で走っています。

プロセスはpsコマンドで確認できます。

Windowsではタスクマネージャーで確認できます。3年ぐらい使っていれば、使う機会がありますね。




親プロセスは子プロセスを実行する


あるプロセスが、別のプロセスを立ち上げる時があります。

立ち上げたプロセスを「親プロセス」、立ち上げられたプロセスを子プロセスと云います。>参考Web

基本的に親プロセスが終了すれば、子プロセスも終了されます。

プロセスを動かし続けるには特別な操作が必要(次に紹介するバックグラウンド実行など)。




プロセスの実行アカウント


プロセスはプログラム。動かしたアカウントがあります。

他の利用者アカウントが走らせたプロセスを止めることはできません。

rootアカウントなら全ての利用者の全てのプロセスを好きにできます。逆に他の利用者はrootが走らせたプロセスに関与できません。rootは管理者アカウント、格上ですからね。




コマンドの応用


コマンドは、コマンド・パラメータ・オプションで使えることは理解できたでしょうか。

ここでは更に便利な使い方について学びます。

Linuxならではの機能で、慣れると便利です。Windowsでは全く使わないので、「こんなのもあるんだなー」と見て行ってくださいね。

勿論、国家試験(情報安全確保支援士)で出題されていますよ。とはいえ、全てが正解に絡むわけではないので、気軽に見て行ってくださいね。




リダイレクトによる出力変更


コマンドの実行結果は、通常は画面に表示(出力)されます。

「リダイレクト」を使うと出力先を変更できます。よくやるのは、コマンドの出力をファイルへ。




パイプラインでコマンド連携


「パイプライン」を使うと、コマンドの出力結果を、次のコマンドの入力に渡すことができます。

あるコマンドの結果を別のコマンドに受け渡すコンボができるんです。

私がよく使うのは「ls |grep ○○」とか「less |grep ○○」。

grepは探すコマンド。lsでファイル一覧を出して特定の文字列を探したり、lessでファイルの中身を表示して探したりします。




バックグラウンドで実行させ続ける


シェルでコマンドを実行すると、実行終了するまで次の操作はできません。

「バックグラウンド」を使うと、裏で実行させ続け、他のコマンドの実行ができるようになります。

コマンドの最後に「&」をつけるとバックグラウンド実行になります。


しかし、ログアウトすると終了します。ユーザが退室したのにプログラムが動いてるって普通じゃないですからね。

ログアウトした後も実行し続けたいなら、nohubやdisownコマンドを使います。

コマンド実行時にnohubをするか、実行後にdisownをすれば、実行を続けます。>参考Web




sudoで一時的な管理者権限をゲット


sudoコマンドを使えば、管理者権限でコマンドを実行できます。

一般利用者でも管理者権限が必要な場面がありますから。


最初からrootアカウントにログインしたり、別アカウントから「su」コマンドでrootアカウントに切り替えたりすることもできるのですが…。

幾つかのLinuxでは、rootにログインできないようにしています。

今回試したLinux Mintでは、rootアカウントにログインできないようになっていました。

まず、rootアカウントだとあらゆる操作ができるので、うっかりミスしたら重大な障害になります。面倒でもその都度sudoコマンドやパスワード入力をした慎重な操作手順の方が良いです。

また「root」って利用者名があるのは誰でも知っています。つまりパスワードだけ破れば管理者権限で不正利用できるようになります。rootにログインできない設定は、ブルートフォース攻撃対策でもあるんです。




cronでコマンドスケジューリング


cronを使えば、コマンドをスケジュールで実行できます。

バックアップやシステムチェックなど定期的にやりたい処理に使えます。

具体的な書き方まで覚えておかなくて良いで、説明や実演は割愛しますね。ごめんなさい。>参考Web




「&&」でコマンドを都度実行


「&&」でコマンドを繋げると、次々にコマンドを実行できます。>参考Web

私は使ったことはないですが、SCの攻撃の手口で出てきたので載せています。




まとめ | 次はSCの問題演習へ


お疲れ様でした!


問題演習は以下をしてください。効果を実感できます。


もし、WindowsやLinux環境でコマンド実習してみたかったら、私のブログをどうぞ。

Progateさんは、プログラミングのe-learningの代表格です。私のIT専門学校の授業でも最初の2~3コマの導入で使わせてもらっています。

Progateさんは無料で使えます。その中のLinux講座で、今使っているWebブラウザだけで実習できます。

ProgateでのLinux演習 私のブログより


さらに自分でLinux環境を試して見たかったら、無料ソフト「Virtual BOX」を使えばWindowsの中でLinuxを動かせます。

このNoteのスクショもWindows10で「Virtual BOX」を動かし、「Virtual BOX」内のソフトウェアパソコンにLinuxをインストールして動かしています。

手順は以下。

  1. 自分のPCにVirtual BOXをインストール

  2. Virtual BOXでソフトウェアPCを設定(CPU, メモリなど)

  3. Linuxのインストールファイル(isoイメージ)をダウンロード

  4. Virtual BOXでisoを読み込む

  5. Virtual BOX内でLinuxインストール手続きを進める

以下が参考になりました。

※2のライブUSBは不要です。Linuxインストール画面だけ参考にしてください。

  1. 参考Web:VirtualBOXの操作

  2. 参考Web:Linuxのインストール画面

  3. 参考Web:Webサーバの立ち上げ

必ずVirtual BOX内で作業をしてください。ライブUSBを作ってPCに指して再起動したら、今使っているPCそのものがLinuxになってしまいますよ。

自己責任でお願いしますね。



まとめが長くなってすみませんでした。

ご自分に合ったものがあったら嬉しいです。

ぜひ「情報セキュリティスペシャリスト」に合格してくださいね。

\私の3ヶ月の学習履歴/

p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ


この記事が参加している募集

学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ