Jump to content 日本-日本語

製品  >  ソフトウェア  >  HP-UX   >  Knowledge-on-Demand  >  UNIXの教科書 運用編

UNIXの教科書 運用編
〜はじめよう! WindowsとLinuxからのステップアップ〜

第3日目:ファイルの安全管理(その2)

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む
UNIXの教科書 運用編 第3日目:ファイルの安全管理(その2)
今回も、引き続きファイルの安全管理を取り上げます。前回は、所有者・所有グループ・その他のユーザーに対して、ファイルの読み出し・書き換え・実行に関する許可を与えるパーミッションについて学びましたが、UNIXではさらに「setuidビット」「setgidビット」「stickyビット」という3つの特殊なパーミッションを用意しています。これらがどんなものなのか、どういうふうに使えるのかを学んでいきましょう。
UNIXの教科書 運用編〜はじめよう! WindowsとLinuxからのステップアップ〜
ファイルのモードについて
特殊なパーミッションを活用する
2009年11月
大津 真
ページ: 1   2   |   次へ 

UNIXの教科書:登場人物紹介 このリンクをクリックすると、新しいウィンドウが開きます

マリー先生
マリー先生:
前回は、システムの安全管理において基本中の基本と言えるファイルのアクセス権限、つまりパーミッションについて説明したわけだけど、今回はその続きとしてファイルのモードという概念について説明していきましょう。その前に、前回のパーミッションについて何か質問ありますか?
四色君:
「ls -l」でファイルの詳細情報を表示したときにシンボリックリンクにもパーミッションが表示されますが、これは何を表しているんですか?
四色君
マリー先生
マリー先生:
「ls -l」で表示されるシンボリックのパーミッションは意味がまったくないの。元のファイルとのパーミッションとも関係ないから、無視してね。

$ ls -l  【Enter】
total 16
-rw-r-----   1 o2         users          591 Oct 10 14:47 orig.txt
  ←元のファイル
lrwxr-x---   1 o2         users            8 Oct 10 14:49 slink.txt
 -> orig.txt
  ←シンボリックリンク。こちらのパーミッションには意味がない
タックス君:
それじゃあchmodコマンドでシンボリックリンクのパーミッションを変更すると、どうなるのでしょう?
タックス君
マリー先生
マリー先生:
その場合、元のファイルのパーミッションが変更されるの。

$ chmod 666 slink.txt  【Enter】
  ←シンボリックリンクのパーミッションを変更しようとすると……
$ ls -l  【Enter】
total 16
-rw-rw-rw-   1 o2         users          591 Oct 10 14:47 orig.txt
  ←元のファイルのパーミッションが変更される
lrwxr-x---   1 o2         users            8 Oct 10 14:49 slink.txt
 -> orig.txt
  ←シンボリックリンクのパーミッションはそのまま

今日の時間割 ファイルのモードについて 特殊なパーミッションを活用する 練習問題

1時間目:ファイルのモードについて

前回説明したファイルの許可属性であるパーミッションは、ユーザーをファイルの「所有者」「所有グループ」「その他のユーザー」という3種類に分け、それぞれに「読み出し可」「書き換え可」「実行可」という3つの属性値を表すものです。「読み出し可」や「書き換え可」などの設定値は、「1」(オン)か「0」(オフ)か、つまり1ビットで表せられるので、ユーザーの分類ごとに3ビットずつ、全体として9ビットの値となります。これらは各ファイルやディレクトリごとの属性としてinodeと呼ばれるディスク内の領域に保存されています。

パーミッションは9ビットの値からなる
図1:パーミッションは9ビットの値からなる

さて、ファイルの許可属性は、これらの基本パーミッション部分の上位に特殊なパーミッションとしてさらに3ビットが用意されています。3ビットは上位の桁から順に「setuidビット」「setgidビット」「stickyビット」です。なお、基本パーミッションと特殊なパーミッションを合わせてファイルの「モード」と呼ぶことがあります。

基本パーミッションと特殊なパーミッションを合わせてモードと呼ぶ
図2:基本パーミッションと特殊なパーミッションを合わせてモードと呼ぶ

setuidビット

UNIXでは実行中の個々のプログラムの単位を「プロセス」と呼びます。このときプロセスの実行権限を決めるユーザーIDを「実効ユーザーID」(Effective User ID)と呼びます。通常、プロセスはそれを実行したユーザーの権限で実行されます。たとえばユーザー「taro」がlsコマンドを実行した場合、ユーザー「taro」のユーザーIDが実効ユーザーIDとなります。それに対してsetuidを設定したプログラムの場合、実効ユーザーIDはそのファイルの所有者となります。

タックス君:
setuidビットの働きはなんとなくわかってのですが、なぜ、実効ユーザーIDをファイルの所有者にする必要があるのでしょう?
タックス君
マリー先生
マリー先生:
setuidビットは、実行時にroot権限が必要なコマンドを一般ユーザーが実行する必要がある場合に使用されることが多いわ。setuidビットが必要になる典型的な例が、一般ユーザーが自分のパスワードを変更するときね。パスワードを変更するpasswdコマンドを「ls -l」で表示してみて。コマンドの保存先のパスはwhichコマンドでわかるわよ。
タックス君:
まず、passwdコマンドコマンドの保存先をwhichコマンドで調べてみますね。

$ which passwd  【Enter】
/usr/bin/passwd

次に、これを「ls -l」で表示すると……。

$ ls -l /usr/bin/passwd  【Enter】
-r-sr-xr-x   4 root       bin         150932 May  3  2007 /usr/bin/passwd
  ↑
  所有者の実行許可が「s」となっている

所有者は「root」ですが、所有者の実行許可を表す部分が「s」になっていますね。
タックス君
マリー先生
マリー先生:
そうね。setuidビットがセットされたファイルは、所有者の実行部分の表示が「s」となるの(実行許可がないファイルの場合には大文字で「S」)。passwdコマンドの変更内容は/etc/passwdや/etc/shadowといったファイルに書き込まれるのよ。
四色君:
それでは、/etc/passwdの情報を「ls -l」コマンドで表示してみましょう。

$ ls -l /etc/passwd  【Enter】
-r--r--r--   1 root       root          1012 Sep  7 14:08 /etc/passwd

すべてのユーザーに対して書き換えが禁止されていますね。
四色君
マリー先生
マリー先生:
書き換え許可がないファイルでもrootユーザーは書き換えが可能よ。さっき見たとおりpasswdコマンドにはsetuidビットがセットされているから、一般ユーザーがpasswdコマンドを実行すると実効ユーザーIDが「root」になって――つまりrootの権限で実行されて、一般ユーザーには書き換えができない/etc/passwdファイルが変更できるようになるというわけね。

setgidビット

setgidビットは、setuidビットのグループ版です。setgidビットのセットされたコマンドを実行すると、実効グループIDがそのファイルの所有グループとなります。
setgidビットの設定されたファイルは、所有グループの実行許可部分の表示が「s」(実行許可がない場合には大文字で「S」)となります。

$ ls -l /bin/stmkfont  【Enter】
-r-xr-sr-x   1 bin        bin         245760 Jan 13  2007 /bin/stmkfont
    ↑
  所有グループの実行許可が「s」となっている

setgidビットをディレクトリにセットすると

setgidビットをディレクトリに対してセットすると、複数のユーザーから構成されるグループでディレクトリ以下を共有するときに便利になります。setgidビットを設定していない場合、ディレクトリの下にファイルを作成すると、作成者のプライマリグループが所有グループになります。一方、setgidビットをセットしたディレクトリの場合には、ディレクトリの所有グループがその下に作成したファイルに引き継がれるのです。
たとえば、setgidビットがセットされた、所有グループが「newprj」のディレクトリ「newproject」があるとします。

$ ls -ld newproject/  【Enter】
drwxrws---   2 root       newprj          96 Oct 10 22:08 newproject/
              ↑所有グループが「newprj」

プライマリグループが「users」で、そのほかに「newprj」グループに属するユーザー「o2」がいるとします。ユーザー「o2」が、newprojectディレクトリの下にファイルを作成すると所有グループが「newprj」になります(setgidビットがセットされていない場合には所有グループが「users」になります)。

$ id  【Enter】  ←idコマンドで属するグループを確認
uid=111(o2) gid=20(users) groups=108(newprj)  ←プライマリグループは「users」
$ mkdir sampledir  【Enter】  ←ディレクトリを作成
$ ls -l newproject/  【Enter】
total 0
drwxr-s---   2 o2         newprj          96 Oct 10 22:13 sampledir
              ↑所有グループが引き継がれ「newprj」になる

四色君:
ディレクトリの所有者は引き継がれないのですか?
四色君
マリー先生
マリー先生:
引き継がれないわ。所有者は作成したユーザーになるの。

休憩時間:SMHによるユーザーの管理

第1回の休憩時間で紹介したSMH(HP System Management Homepage)でも、ユーザーやグループの管理が行えます。たとえばユーザーを追加するにはSMHのメイン画面から「Tools」を選択します。

Tools画面
図3:Tools画面

次に、「Configure Local Users」を選択するとユーザーの管理画面が表示され、「ローカルユーザー」に現在登録されているユーザーの一覧が表示されます。

ユーザー一覧画面
図4:ユーザー一覧画面

ユーザーを追加するには「ユーザーカウントの追加」をクリックします。すると、ユーザー情報を入力する画面が表示されるので、ユーザー名やパスワードなどの情報を入力して「追加」をクリックすると、ユーザーが登録されます。

ユーザー情報を入力して「追加」をクリックすれば完了
図5:ユーザー情報を入力して「追加」をクリックすれば完了

連載記事一覧 ページ: 1   2   |   次へ  次のページへ

本ページの内容は執筆時の情報に基づいており、異なる場合があります。

お問い合わせ

ご購入前のお問い合わせ


ご購入後のお問い合わせ

HPEサポートセンター
製品の標準保証でご利用いただける無償のサービスです。

ショールーム

ショールーム 導入をご検討のお客様へ
業務アプリケーションの継続・標準化・開発性とシステム担当者様、システム開発者様が抱える悩み・疑問に対する解決策実体験して頂けます。
印刷用画面へ
プライバシー ご利用条件・免責事項