5. Setuid

一般ユーザーが何かをするために昇格されたアクセスを必要とするケースはたくさんあります。システム管理者は、ユーザーが保護されたファイルにアクセスするたびに root パスワードを入力するために常にそこにいるわけではないため、この動作を許可するための特別なファイルパーミッションビットがあります。Set User ID (SUID) は、ユーザーがプログラムを自分自身としてではなく、プログラムファイルの所有者として実行することを可能にします。

例を見てみましょう。

パスワードを変更したいとします。簡単ですよね? passwd コマンドを使うだけです。

passwd

passwd コマンドは何をしているのでしょうか?いくつかのファイルを変更していますが、最も重要なのは /etc/shadow ファイルを変更していることです。そのファイルを少し見てみましょう。

$ ls -l /etc/shadow

-rw-r----- 1 root shadow 1134 Dec 1 11:45 /etc/shadow

あれ、ちょっと待ってください、このファイルは root が所有しているのですか?root が所有するファイルを変更できるのはどうしてでしょうか?

今度は、実行したコマンドの別のパーミッションセットを見てみましょう。

$ ls -l /usr/bin/passwd

-rwsr-xr-x 1 root root 47032 Dec 1 11:45 /usr/bin/passwd

ここに新しいパーミッションビット s があることに気づくでしょう。このパーミッションビットは SUID です。ファイルにこのパーミッションが設定されている場合、プログラムを起動したユーザーは、ファイル所有者のパーミッションと実行パーミッション(この場合は root)も取得できます。つまり、ユーザーが passwd コマンドを実行している間は、root として実行していることになります。

そのため、passwd コマンドを実行すると、/etc/shadow のような保護されたファイルにアクセスできるのです。このビットを削除すると、/etc/shadow を変更できなくなり、したがってパスワードを変更できなくなることがわかるでしょう。

SUID の変更

通常のパーミッションと同様に、SUID パーミッションを変更する方法は 2 つあります。

シンボリックな方法:

sudo chmod u+s myfile

数値的な方法:

sudo chmod 4755 myfile

ご覧のとおり、SUID は 4 で表され、パーミッションセットの前に付加されます。SUID が大文字の S で表されているのを見かけるかもしれません。これは、同じことを意味しますが、実行パーミッションがないことを意味します。

ログインして学習進捗を保存

サインイン

演習

練習は完璧をもたらします!ファイルパーミッション、ユーザーグループ、および SUID のような特殊なビットがどのように機能するかを理解することは、Linux システムを管理し、保護するために不可欠です。実践的な経験があなたの知識を確固たるものにするでしょう。

ファイルパーミッションとユーザー管理の理解を深めるための実践的なラボを以下に示します。

  1. Linux ユーザーグループとファイルパーミッション - ユーザーとグループの作成と管理、ファイルパーミッションの理解、ファイル所有権の操作を練習します。このラボは、SUID が昇格されたアクセスのためにこれらの概念をどのように活用するかを理解するために必要な基礎知識を提供します。

このラボは、実際のシナリオで概念を適用し、Linux のユーザーとファイル管理に自信を持つのに役立ちます。

クイズ

SUID を表す数字は何ですか?