■ファイルの安全管理■
ネットワーク経由での不正アクセスやウィルス侵入が一般化してきています。システムのセキュリティー対策や安全なシステム運用おいて最も基本となるファイルやディレクトリのアクセス制限を行います。また、「vim」エディタの操作方法も説明いたします。
■パーミッションに関して
Linuxに限らずUNIX系のOSでは、ファイルシステム内の全てのファイルやディレクトリに対して「オーナー」「所有グループ」「その他のユーザー」という3段階のアクセス制限を設定することができます。このアクセス制限のことをパーミッションと呼びます。
・パーミッションの確認
|
※testディレクトリの詳細情報の表示。
赤い部分の10桁のフィールドの記号の中で、最初の1桁がファイルの種類を表します。ディレクトリの場合「d」、通常ファイルの場合「-」、シンボリックリンクの場合「|」になります。その後の9桁がパーミッションを表す記号です。3桁ごとに「オーナー」「所有グループ」「その他のユーザー」に対するアクセス権になります。
各3桁は順番に「読み出し」「書き込み」「実行」の権限を表しており、「r」「w」「x」で表記されていれば許可、「-」は許可されていないことを示しています。
|
・ホームディレクトリのパーミッションを確認する。
|
この場合、一般ユーザーに関しては、「オーナー」に対して「読み出し」「書き込み」「実行」の全てが許可されていますが「所有グループ」「その他のユーザー」には何も許可しておりません。
・ファイルとディレクトリのパーミッションの違い
パーミッションは、ファイルとディレクトリでは若干意味合いが異なります。それぞれを比較してみましょう。下記にパーミッションの概要を表記しておきます。
| ファイルのパーミッション | |
| r | ファイルの内容を表示できる |
| w | ファイルにデーターを書き込める |
| x | ファイルをコマンドとして実行できる |
| ディレクトリのパーミッション | |
| r | ディレクトリの一覧を表示できる |
| w | ディレクトリの下にファイルを作成、削除できる。また、ファイルの名前を変更できる |
| x | ディレクトリの下に進める |
例えばファイルパーミッションの例として「/bin」ディレクトリには様々なコマンドが保存されています。これらが実行できるのは「実行」(x)が許可されているからなのです。
例として「cp」コマンドを「ls」コマンドで確認してみましょう。
|
このように、「オーナー」「所有グループ」「その他のユーザー」に「実行」(x)が許可されているために、すべてのユーザーが「cp」コマンドを実行できるのです。
・10進数と2進数と16進数
2進数、10進数、16進数は慣れない方には難しいかと思いますが、覚えてしまえば簡単です。後々、アセンブラやC言語等で役に立ちますので、ここで覚えてしまいましょう。
|
■パーミッションの設定
・コマンドでのパーミッションの設定を行います
パーミッションの設定はファイルのオーナーもしくはスーパーユーザーのみになります。パーミッションの設定方法には記号もしくは数値による設定の2種類があります。まずは、記号による設定を行ってみましょう。
パーミッションの設定は「chmod」コマンドを使用します。
chmod <オプション> <パーミッション> <ファイルのパス>
・パーミッションを設定する記号
<ユーザー><オペレーター><アクセス権>
[ユーザー]
「a」=全てのユーザー、「u」=オーナー、「g」=所有グループ、「o」=その他のユーザー
[オペレーター]
「+」=アクセス権を加える、「-」=アクセス権を削除する、「=」=アクセス権を設定する
[アクセス権]
「x」=実行、「r」=読み出し、「w」=書き込み
・パーミッションの設定に慣れてみよう
オペレーターの「+」は指定したユーザーに対するアクセス権を加え「-」は削除します。例えば「o+w」はその他のユーザーの書き換えを許可します。
|
※その他のユーザーに書き換えを許可されました。
※その他のユーザーの書き換えを許可されなくなりました。
・ディレクトリ以下のパーミッションを設定
指定したディレクトリ以下のパーミッションを全て設定するには<オプション>に「-R」を指定します。
|
「test」ディレクトリ以下のパーミッションをまとめて設定しました。
■記号によるパーミッションの設定
・3桁の8進数の求め方
パーミッションを示す3桁の8進数の表記方法は、まず「オーナー」「所有グループ」「その他のユーザー」ごとにそれぞれの権限を許可されていれば「1」、許可されていなければ「0」とします。ですから、パーミッションは全体で9ビットの2進数で表されていると考えることができます。
|
||||||||||||||||||||||||||||
■特殊フラグについて
・特殊フラグを格納する領域
ファイルのパーミッションはそれぞれを3ビットを合わせて合計9ビットで示されています。実際にはその上に「suidビット」「sgidビット」「stickyビット」という3ビットの特殊なフラグを格納する領域があります。よって、パーミッションは全体として12ビットで構成されています。この12ビット全体のことを「ファイルモード」と呼ぶことがあります。
「chmod」コマンドでパーミッションを設定する場合、これまでは3桁の8進数で指定をしていましたが、特殊フラグを含めてモード全体を設定するには4桁の8進数を指定します。
例えば、「suibビット」を立てて、かつオーナーのみ「読み出し」「書き換え」「実行」の全てを許可するには「4700」を指定します。なお、記号で設定する場合には「s」および「t」を使い、例えば「suidビット」を立てるには「u+s」、「sgidビット」を立てるには「g+s」、「stickyビット」を立てには「+t」となります。
・suidビット
一般ユーザーが実行する際に、スーパーユーザーの権限が必要になるコマンドに使用されます。
通常のコマンドを一般ユーザーが実行すると、そのプロセスのユーザーIDは実行したユーザーのIDになるため、そのユーザーに書き換えが許可されていないファイルを変更することができません。それに対して「suidビット」が立っているコマンドを実行すると、プロセスの実行ユーザーIDはファイルのオーナーになります。したがって、ファイルのオーナーがスーパーユーザー(root)に設定されているコマンドに「suidビット」を立てておけば、一般ユーザーが実行した場合でもスーパーユーザーにしか書き込みが許可されていないファイルを変更できるわけです。
|
上記はパスワードを変更する「passwd」コマンドは、一般ユーザーにアクセスが禁止されている「/etc/shadow」を書き換えるために「suidビット」が立っています。
・sgidビット
「sgidビット」をコマンドに設定した場合、グループに対して「suidビット」同じような働きをします。プロセスの実行IDがファイル所有グループのグループIDになります。「sgidビット」を設定したファイルは、「所有グループ」の実行部分が「s」となるのです。
|
・グループでディレクトリを管理する
「sgidビット」をディレクトリに対して設定すると、そのディレクトリの下に作成したファイルの所有グループは、ディレクトリの所有グループと同じになります。これは、複数のメンバーからなるプロジェクトなどをディレクトリを管理する場合に有効です。
|
※メンバーを登録。
※所有グループを変更。
■vimエディタの基本操作方法
・vimエディタの操作を覚えよう。
最近ではLinuxでもgeditというGUIで動作するエディタが増えております。しかし、設定ファイルを修正したいというような場合には、ターミナルで動作するエディタが活躍します。ここではその代表ともいえるvimエディタについて説明いたします。
・vimエディタの起動と終了
vimエディタを起動するには、引数にファイルのパスを指定して、「vim」コマンドを実行します。例えば、カレントディレクトリの「sample」ディレクトリの「sample」ファイルを編集するには次のようにいたします。
|
画面左側に表示されている「~」は何も入力されていないことを示す記号です。なお、存在しないファイルのパスを指定する場合には、新規ファイルが作成されます。
vimを終了するには「:」(コロン)をタイプします。すると画面一番下のステータスラインに「:」が表示されカーソルが移動します。続けて「q [Enter」と入力すると終了します。
・コマンドモードとインサートモード
vimが一般的なエディタと大きく異なるのは「コマンドモード」と「インサートモード」という2つのモードがある点です。コマンドモードではタイプした文字がコマンドとして認識されるモードになっています。インサートモードでは文字を入力するモードです。 起動した段階では「コマンドモード」になっています。例えば「h」と「l」はカーソルを前後に移動します。
コマンドモードからインサートモードに移行する場合には「i」コマンドを実行します。つまり「l」キーを押します。するとステータスラインに「--挿入--」と表示され、インサートモードであることを示します。これ以降、タイプした文字はカーソル位置に挿入されていきます。
また、インサートモードで文字を修正するには、上下左右の矢印でカーソルを移動し、Backspaceキー、Deleteキーで文字を削除します。新たにタイプした文字はカーソル位置に挿入されます。インサートモードからコマンドモードに戻るには「Esc」キーを押します。
・インサートモードに移行するためのコマンド
|
・カーソルの移動
コマンドモードでの文字単位のカーソルの移動は上下左右の矢印キーでも行えますが、次のコマンドを覚えておくととても便利です。これらのキーは右手のホームポジション位置に割り当てられています。
|
・その他のカーソル移動のコマンド(コマンドモード)
|
・ファイルの保存
vimを終了するには「:」をタイプしてから「q(Enter)」をタイプします。「:」で始まるコマンドは、viの前身であるラインエディタexからの引き継いだコマンドです。カーソルの移動コマンドと異なり、exコマンドでは、タイプしたコマンドが画面下部のステータスラインに表示されます。ファイルの保存もexコマンドで行います。
|
・シェルのコマンドを実行する
「:!<コマンド>[Enter]」とすることで、vimで編集中にシェルのコマンドを実行することができます。例えば、「ls -l /etc/rc.d」を実行したければ、まず「:」をタイプし続けて「! ls -l /etc/rc.d [Enter]」とタイプします。
また、vimには30分程で基本コマンドを把握できるチュートリアルプログラムが用意されています。チュートリアルはコマンドライン「vimtutor」コマンドを実行することで起動します。
|
■文字列の削除と修正
コマンドモードでも、「Delete」キーを押すことでカーソル位置の文字を削除できます。それ以外でも行単位や単語単位で文字を削除するコマンドが用意されています。
・文字単位の削除
コマンドモードでカーソル位置の文字を削除するには「x」コマンドを使用します。前に数を付ければ指定した個数の文字を削除することができます。例えば「3x」とすると、カーソル位置から3文字分が削除されます。
|
・行単位の削除
カーソル位置の行全体を削除するには「dd」コマンド(Dキーを2回押す)を使用します。先頭の数値を指定することで削除する行数を指定できます。例えば2行削除したい場合には「2dd」とします。
・「d」コマンドをカーソル移動コマンドと組み合わせる
「d」コマンドをカーソル移動コマンドと組み合わせることによって、カーソル位置から指定した位置までの範囲を一度に削除できます。
|
・文字を変更する
カーソル位置の1文字を変更するには「x」コマンドで削除⇒「i」コマンドでインサートモードに移行⇒文字をタイプ⇒「Esc」キーでコマンドモードに戻るという方法もありますが、「r」コマンドを使用すると簡単に行えます。「r」コマンドを使用するには、まずカーソルを目的の文字の上に移動します。次に「r」をタイプして続けて目的の文字をタイプします。この場合、インサートモードには移行しません。例えば、カーソル位置の文字を「R」から「L」に変更するには次のように行います。
「r」コマンドによる文字の変更
|
なお、カーソル位置の文字の大文字と小文字を変更するには「~」コマンドを使用します。
大文字と小文字の変換
|
・操作の取り消しとやり直し
最後に行った編集を取り消すには「u」コマンドを使用します。「u」コマンドを実行するたびに前の操作を順番に1つずつ取り消してくれます。操作をやり直すには「Ctrl」+「R」キーを押します。
・vimのビジュアルモード
viにはない、vimの便利な拡張機能の1つがビジュアルモードです。ビジュアルモードでは文字列のコピーや削除がより簡単に行えます。ビジュアルモードに移行するには次のコマンドを実行します。
|
・ビジュアルモードのコマンド
ビジュアルモードで便利なコマンドをまとめておきます。
|