【Linux】setuidの仕組みと使い方 – 昇格した特権でファイルを実行する方法
Linuxで実行ファイルを実行すると、通常は現在のユーザーとグループIDの権限で動作します。しかし、そのファイルを別のユーザー(rootなど)として実行したい場面もあります。ユーザーアカウントを切り替えなくても、setuidを利用すれば、実行ファイルをファイル所有者の権限で実行できます。本記事では、setuidの仕組みと、ユーザーが昇格した特権で実行ファイルやバイナリを実行できるようにする方法を詳しく解説します。
setuidの仕組み
setuidは「SET User ID on execution(実行時のユーザーID設定)」の略です。例えば、rootユーザーが作成した「identity」という実行ファイルがあるとしましょう。通常どおりに実行すれば、あなた自身のユーザーID・グループID・ユーザー権限で動作します。ところが、このファイルにsetuidビットが設定されていると、実行時にはrootユーザーとして、rootの権限で動作するようになります。
まず、「identity」ファイルの所有者を確認し、rootユーザーが所有していることを確かめてみましょう。パーミッション文字列には、ユーザー・グループ・その他すべてに対して実行(x)ビットが設定されていることも確認できます。
ユーザー「john1」が「identity」ファイルを実行すると、実行時にプロセスが生成されます。プロセス一覧を見ると、このプロセスは「john1」のユーザー名とユーザーIDで作成・実行されていることがわかります。
次に、rootユーザーとして「identity」ファイルにsetuidビットを設定します。
chmod u+s /usr/bin/identity
「u」は、setuidビット(+s)を所有者(ユーザー)に対してのみ設定することを意味します。
設定後、所有者側のパーミッション文字列の実行部分を見ると、「x」が「s」に置き換わっています。実行ファイルのパーミッションに「s」が表示された場合、それはsetuidビットが設定されていることを示しています。
なお、数値指定によるchmodコマンドでも同じことができます。
chmod 4755 /usr/bin/identity
数値パーミッションの先頭に付ける「4」が、setuidビットの設定を表します。
以下は、「john1」が再び「identity」ファイルを実行した結果です。実行中のプロセス一覧を確認すると、今度はプロセスが「john1」ではなく「root」ユーザーによって作成・実行されていることがわかります。
setuidビットの重要な用途
専門家の間では「アプリケーションをrootユーザーとして実行すべきではない」とよく言われます。しかし、特定のファイルをroot権限で実行する必要があるケースも存在します。代表的な例が、Linuxシステムにデフォルトでインストールされているpasswdコマンドです。このコマンドにはsetuidビットが設定されています。
その理由はシンプルです。ユーザーのパスワード情報は「/etc/passwd」と「/etc/shadow」ファイルに保存されており、これらのファイルを変更できるのは「root」だけだからです。「john1」が自分のパスワードを変更しようとする場合、本来なら上記2つのファイルを編集する権限が必要です。passwdにsetuidビットが設定されているおかげで、「john1」は実行中だけ一時的にroot権限を取得し、パスワードの変更と2つのファイルの情報更新を行えるのです。
setuidのセキュリティリスク
扱い方を誤ると、攻撃者にsetuidバイナリを悪用され、システムを乗っ取られる危険性があります。ユーザーは通常、setuidプログラムを安易にインストールすべきではありません。特に、自分以外のユーザーに対するsetuid設定は避けるべきです。最も重要なのは、ホームディレクトリ内にrootユーザーのsetuidが有効になったバイナリを置かないことです。そうしたファイルは、トロイの木馬やマルウェアである可能性が高いからです。
まとめ
setuidは実行ファイルにのみ設定できます。また、同様にsetgidビットを設定することも可能で、こちらはグループの全メンバーが所有者権限で実行ファイルを実行できるようにするものです。
setuidおよびsetgidビットはセキュリティに直結する重要な設定であり、十分な知識を持つシステム管理者のみが使用すべき点に留意してください。
関連記事:
- LinuxでSticky Bitを使って共有ディレクトリのファイルを管理する方法
- Linuxターミナルでスペルチェックを行う方法
- find・locate・which・whereisコマンドでLinuxのファイルを検索する方法
-
【保存版】Windows 10でJARファイルを実行する方法と開けない時の対処法
JARファイルは「Java ARchive(Javaアーカイブ)」の略称で、Javaプログラム(Javaクラスファイル、メタデータ、リソースなど)を格納したファイル形式です。ZIPファイル形式に似たパッケージ形式であるため、複数のファイルを1つにまとめる用途にも使われ、ファイルの持ち運びやすさの向上やディスク容量の節約にも役立ちます。この汎用性の高さから、ゲーム、アプリケーション、ブラウザ拡張機能などを格納するために幅広く活用されています。 ただし、すべてのJARファイルが同じというわけではありません。EXEファイルのように実行することを目的としたものもあれば、ZIPファイルのように展開(解凍
-
【初心者向け】OneDriveでファイルを他のユーザーと共有する方法|共有の停止・権限変更も解説
Microsoft OneDriveは、Windowsに標準搭載されているオンラインストレージ兼同期サービスです。豊富な機能を備えており、競合サービスと比較しても引けを取らない、むしろ優れた使い勝手を提供しています。 OneDriveではドキュメントをオンライン上に保存でき、Web版のMicrosoft Office(Word、PowerPoint、Excel)にもブラウザから直接アクセスできます。さらに、組織外のパートナー、サプライヤー、顧客などとも安全に共同作業が可能で、相手がMicrosoft 365を契約しているかどうかも問いません。 OneDriveでのファイル共有はとても簡単ですが