xserver
Home クッキー及びWeb ビーコンについて



sudo による管理者権限の付与

sudo の概要

 サーバーの管理者権限を得るコマンドとして、su コマンドが用意されていますが、これはログインするたびにroot のパスワードを入力しなくてはならないという点で、ネットワーク上にroot のパスワードが流れたり、パスワード入力を監視されたり(覗かれたり)するなどの可能性があり、セキュリティ上の観点から多少の不安が残ります。そこで使用するのがsudo(superuser do) コマンドで、指定した一般ユーザに対して特定のroot コマンドを付与することで代理のroot ユーザとしてサーバーを管理させる事ができるようになります。自宅サーバーを構築している皆さんであれば最大の魅力は、やっぱりroot パスワードを何度も入力しなくても済むことでしょうかね…(^_^;)




■sudo のインストール

 sudo はほとんどのLinuxディストリビューションにはデフォルトでインストールされています。以下のコマンドを実行してsudo がインストールされているかどうかを確認してください。

# rpm -qa | grep sudo
sudo-1.6.7p5-2

インストールされていなければyum もしくは、apt-get を利用してインストールしておきましょう。

# yum install sudo
or
# apt-get install sudo





■sudo の基本的な使い方

 sudoコマンドは、なにも設定していない状態では一般ユーザはデフォルトで使用できないようになっています。試しにroot しか閲覧することのできない/var/log/messageをsudo コマンドを実行して見ようとするとパスワードの入力を求められ、どのようなパスワードを入力してもコマンドは以下のように失敗してしまいます。このログインの失敗は、/var/log/message に書き込まれます。

$ sudo tail /var/log/messages
Password:
Sorry, try again.
kororo is not in the sudoers file. This incident will be reported.

 それでは実際に一般ユーザに対してsudo コマンドが使用できるように設定していきます。設定ファイルは、/etc/sudoers になりますが、このファイルを絶対に vi で編集しないようにしてください。このファイルの設定ミスなどをしてしまうと思わぬトラブルを引き起こしかねないので、sudoersファイルのロックや構文チェックを行ってくれる visudo というコマンドが用意されています。visudo コマンドを実行し、以下のように記述すると一般ユーザに対して全てのroot 権限が与えられます。具体的には、「ユーザーkororoは、すべての接続元(ALL)から、すべてのユー ザー権限(ALL)で、すべてのコマンド(ALL)を実行できる」という意味になります。

# visudo
%kororo ALL=(ALL) ALL //kororo に全てのroot 権限を与える

※visudo の構文チェック

構文ミスがあると以下のように知らせてくれます。「e」をタイプすれば再編集することが出来ます。

Warning: undeclared Host_Alias `LOCAL' referenced near line 24
>>> sudoers file: syntax error, line 23 <<<
What now?
Options are:
(e)dit sudoers file again
e(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)

編集し終えたら、一般ユーザで再ログインしてからもう一度/var/log/message を見てみましょう。これでファイルが正常に閲覧できるようになります。なお、最初にsudo を実行した時に限り、パスワードを聞かれますが一定の時間内(デフォルト:5分以内)であれば次のコマンド実行時からはパスワードを聞かれなくなります。この時に入力するパスワードは一般ユーザのパスワードであるため、いくらSSHを使っているとはいえ、ネットワーク上にroot のパスワードが流れなくなるという点では、セキュリティの強化が図れます。

$ sudo tail /var/log/messages
Password: 現在ログインしているユーザのパスワードを入力

 次にHost_Alias を設けてローカルネットワーク( 192.168.0.0/24)に存在するkororo のみに全 root 権限を与えるように設定します。また、「NOPASSWD」を用いることでパスワードなしでsudo を実行することもできます。「LOCAL」は定義名なので自由な名前を付けられますが、英大文字でなければならない等の一定のルールがありますので次項で説明する「エイリアス機能」を参照してください。

# visudo
# Host alias specification
Host_Alias LOCAL = 192.168.0.0/24  //ローカルネットワークに限定する
or
Host_Alias LOCAL = 192.168.0.2  //あるいは、特定のIPアドレスに限定する

# User privilege specification
%kororo LOCAL=(ALL) NOPASSWD: ALL 

■エイリアス機能

上記でもHost_Alias を使用して実例を見てみましたが、sudoers のエイリアス機能には以下の4種類があります。定義名は、大文字のA-Z、数字、アンダーバー(_)を使用します。そして先頭文字は必ずA~Zで始まる必要がありますので注意してください。

 User_Alias ユーザー名の別名を定義する

例)User_Alias WEBMASTER = koro, hoge, foo
 Runas_Alias 実行ユーザー名の別名を定義する

例)Runas_Alias OP = root, operator
 Host_Alias 接続元ホストの別名を定義する
例)Host_Alias LOCAL = 192.168.0.0/24
例)Host_Alias INTERNET = 172.16.0.1, 172.16.0.2
 Cmnd_Alias 実行するコマンドの別名を定義する

例)Cmnd_Alias SHUTDOWN = /sbin/halt, /sbin/shutdown, \
/sbin/poweroff, /sbin/reboot, /sbin/fastboot, /sbin/init

実際にエイリアス機能を使用して特定コマンドだけを使用できるようにすることもできます。以下のsudoers の例では、ファイル削除のrm コマンドだけをkororoユーザに与えていることになります。ここで留意しておきたいのは、rmコマンドだけしか使えなくなるというわけではなく、sudoしてから実行できるコマンドがrm しかなくなるという意味になります。つまり、ユーザkororoは一般ユーザ権限の範囲内では、cp やmakdir 等のユーザーコマンドは全て使用することができ、プラス、rootでしか削除できないファイルをsudoから実行して削除できる権限(rm コマンド)を得たということです。

# visudo

# Cmnd alias specification
Cmnd_Alias RM /bin/rm

# User privilege specification
%kororo ALL=(ALL) RM

逆に、システムの停止・再起動の権限をsudoから実行できないようにすることもできます。Cmnd_Alias で設定した定義のSHUTDOWNの前に打ち消しの意味を持つ「!」をつけると、「SHUTDOWNは実行できない」という意味を持ちます。システムの停止や再起動時には、「sudo su」や「sudo -s」を実行して、root のシェル権限を得てから慎重に行うのがベストでしょう。

# visudo

# Cmnd Alias SHUTDOWN = /sbin/halt, /sbin/shutdown, \
/sbin/poweroff, /sbin/reboot, /sbin/fastboot, /sbin/init

# User privilege specification
%kororo ALL=(ALL) ALL, !SHUTDOWN


◎sudoコマンドのオプション
 -l 現在の設定状況を表示する
 -s sudo su と同等の意味になる。root のシェルを実行する

■sudoのパスワードキャッシュ

先ほども触れましたが、sudo 実行後、一定の時間内であればパスワードを再入力することなく続けてコマンドを実行することができます。このキャッシュタイムアウトは、sudoを実行するたびに更新されます。しかし、この一定の時間内(デフォルトでは5分)というのが問題になる場合もきっとあるでしょう。うっかり席を立ってしまい、その5分以内の間に悪質なユーザにシェルをいじられ重要なファイルを盗まれたり、削除されたりしないとも限りません。自宅サーバーで運用している限りはその心配はほとんどなさそうですが、企業レベルの運用となると少し不安が残ります。なので、このタイムアウトをなくして、sudo を実行するたびにパスワードが聞かれるようにする方法も頭の片隅にいれておきましょう。記述は簡単です。キャッシュタイムアウトを10分に伸ばしたければ値を「10」にします。また、パスワードプロンプトもよりわかりやすいように改良しておきましょう。デフォルトのパスワードプロンプトでは、「Password:」と味気ないものですが、これをログインユーザとホスト名が表示されるように変更しておきます。

# visudo

Defaults timestamp_timeout = 0 //パスワードキャッシュの時間(分単位)
Defaults passprompt = "%u@%h Password: "  //パスワードプロンプトの変更



■参考

⇒@IT:止められないUNIXサーバの管理対策 第5回







TOPに戻る

Sponcerd Link


Search
 
Web サイト内
Rental Server

【レンタルサーバのXbit】 低価格・高品質のビジネスクオリティー。300メガ1,050円~30分で サービススタート可能!


容量300MB、月額125円、高性能なサーバが日本最大級のバックボーンに直結。
さくらのレンタルサーバ



当サイトはLinux自宅サーバーの構築を目的としたサイトです。
当サイトに関するご意見、ご要望等は、こちらのメールアドレスよりお願いします。
Beginning | Introduction | Installation | Server |
Security | Tips | Related-Sites
Copyright©2003-2006 KORO All Rights Reserved.
総計:
今日:
昨日: