クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

権限昇格の基本

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

仮想マシンラボ読了目安 9分コマンド5個

このレッスンですること

このマシンには、権限の低い2つめのアカウント intern があります。そして管理者が、ありがちなミスを3つ残していて、intern はそれを見つけられる状態です。必要以上の権限を持つプログラム、絞り込まれないままの sudo のルール、だれでも書き換えられるファイルを信用してしまう定期ジョブです。

あなたは自分のアカウント student から、この3つを見るだけです。どれも使いません。見つけて使うのは、ラボ自身の課題です。

始める前に

メモ

このレッスンの上のバーでラボを起動を押してください。このラボは、自分専用の Ubuntu マシンまるごとなので、コンテナより起動に少し時間がかかります。下の実行ボタンは、コマンドをマシンのターミナルに順番に入力してくれます。「マシンはまだ起動中です」と出たら、数秒待ってからもう一度押してください。入力の様子を見たり、自分でコマンドを打ったりするときは、バーのターミナルを開く(新しいタブ)を押します。

たったひとつのルール

注意

このマシンはあなただけのものです。ほかの生徒のマシンへの道はなく、いくつかのパッケージ配布サイトを除いて、インターネットへの道もありません。攻撃してよいのは、このマシンだけです。自分のものではないマシンに同じことをするのは、英国のコンピューター不正使用法(Computer Misuse Act 1990)では犯罪にあたります。

1. 2つめのアカウントを見よう

このマシンには、ラボの準備で作られた2つめのアカウントがあります。このアカウントには、あなたのアカウントが持つ権限はひとつもありません。getent passwd はシステムのアカウント一覧を読み、intern の1行を表示します。そこにあるのは、そのアカウントのホームフォルダとシェルだけです。

コマンド
getent passwd intern

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

2. setuid のヘルパーを見よう

setuid のプログラムは、だれが起動しても、持ち主のユーザーとして動きます。ls -l で見ると、持ち主の実行ビットがある場所に s があります。-rwsr-xr-x で、持ち主は root です。つまり、これを動かした人はだれでも、動いている間は root になります。

コマンド
ls -l /usr/local/bin/sysfind

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

3. sudo のルールを見よう

sudo の設定ファイルには、だれが、だれとして、何を実行してよいかが書いてあります。あなたのアカウントは、sudo を使えばこれを読めます。この行は、intern が、パスワードなしでひとつのプログラムを root として実行できるようにしています。

コマンド
sudo cat /etc/sudoers.d/90-lab-intern

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

4. 書き換えられるスクリプトを見よう

root の cron(定期ジョブ)が、このスクリプトを毎分実行します。ls -l を見ると rwxrwxrwx で、ぜんぶのビットが立っています。つまり、intern を含むこのマシンのだれもが、root が次に動かす前に、中身を書き換えられます。

コマンド
ls -l /opt/maintenance/cleanup.sh

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

5. root が動かしていることを確かめよう

ここでは、root の定期ジョブを読みます。sudo cat で sudo のルールを読んだのと同じやり方です。出てくるのは1行で、前の手順のスクリプトを、root として毎分実行する、というものです。

コマンド
sudo crontab -l -u root

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ラボに取り組もう

ヒント

3つの弱点を見ました。そのうちのひとつを使って root になるのが、このラボの課題です。su - intern で権限の低いアカウントに切り替えてください。パスワードは README.md にあります。cat README.md で読めます。どの弱点で root になれるかを調べて、README が求めるやり方で証明しましょう。

先生へ

ヒント

このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒ひとりひとりのコピーです。これは VM ラボのレッスンで、生徒はそれぞれ自分の Ubuntu マシンを持ち、その中に2つめのアカウントと3つの弱点が最初からあります。このラボには採点スクリプトがありません。このマシンの生徒は、スクリプトが読むファイルをどれでも書けてしまうからです。生徒は、使った弱点とそれを実行したコマンドのレポートを提出し、先生がそれを読んで確認します。ご自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから一から作ってください。

このラボとソースについて: Linux 権限昇格のラボ:setuid のバイナリ、sudo のルール、cron のジョブ

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。