Linux の特別な権限 SUID、SGID、SBIT の詳細な説明

Linux の特別な権限 SUID、SGID、SBIT の詳細な説明

序文

Linux のファイルまたはディレクトリの権限については、通常の rwx 権限についてすべて知っている必要があります (Linux の rwx 権限の詳細については、私のブログ投稿 http://www.cnblogs.com/javaee6/p/3994750.html を参照してください)。まず、次の2つの権限が何であるかを見てみましょう

/tmp ディレクトリと passwd ファイルの権限が非常に奇妙であることは非常に奇妙です。なぜ s 権限と t 権限があるのでしょうか?以下の内容を読めば理解できるでしょう。

setuid と setgid は、それぞれ実行時に uid ID を設定する、および実行時にグループ ID を設定することの略語です。これらを suid や sgid と略すことがよくあります。これらはファイル アクセスを制御する権限フラグであり、ユーザーはそれぞれ実行可能ファイルの所有者または所有者グループの権限で実行可能ファイルを実行できます。

注: この記事のデモ環境は Ubuntu 16.04 です。

スイド

Linux では、すべてのアカウントのパスワードは /etc/shadow ファイルに記録され、このファイルを読み書きできるのは root だけです。

別の共通アカウント テスターがパスワードを変更する必要がある場合は、/etc/shadow ファイルにアクセスする必要があります。しかし、/etc/shadow ファイルにアクセスできるのは root だけです。これはどのように行われるのでしょうか?実際、テスター ユーザーは SUID 機能を使用して /etc/shadow ファイル内のパスワードを変更できます。 passwd プログラム ファイルの権限情報を見てみましょう。

上の画像の赤いボックス内の権限情報が少し奇妙です。所有者情報は rwx ではなく rws です。ファイル所有者の x 権限に s が表示される場合、それは SETUID BITS または SETUID と呼ばれ、その特性は次のとおりです。

  • SUID権限はバイナリ実行ファイルに対してのみ有効です
  • 実行者がバイナリ実行可能ファイルに対して x 権限を持っている場合、実行者はファイルの所有者の権限を持ちます。
  • この権限はバイナリ実行ファイルの実行中のみ有効です

次に、テスター ユーザーが SUID 権限を使用してパスワードを変更する方法を見てみましょう。

  • テスターユーザーは/usr/bin/passwdプログラムの実行権限を持っているので、実行することができます。
  • passwdプログラム passwdプログラムの所有者はrootです
  • テスター ユーザーは、passwd プログラムを実行するときに一時的に root 権限を取得します。
  • したがって、テスター ユーザーは、passwd プログラムの実行中に /etc/shadow ファイルを変更できます。

ただし、テスター ユーザーが cat コマンドを実行して /etc/shadow ファイルを読み取ると、機能しません。

理由は明らかです。テスターユーザーには /etc/shadow ファイルを読み取る権限がなく、cat プログラムが SUID に設定されていません。これら 2 つの状況は次の図で理解できます。

どのユーザーでも cat コマンドを使用して /etc/shadow ファイルの内容を読めるようにしたい場合も、非常に簡単です。SUID 権限を設定するだけです。

$ sudo chmod 4755 /bin/cat 

これで、cat に SUID 権限が与えられました。/etc/shadow の内容を cat できるかどうか確認してみましょう。これは非常に危険なので、次のコマンドを使用して cat の SUID 権限をすぐに削除します。

$ sudo chmod 755 /bin/cat

SGID

グループの x 権限に s フラグが表示される場合、それは SGID と呼ばれます。 SGID の特性は SUID の特性と同じです。/usr/bin/mlocate プログラムを使用してその使用方法を説明します。 mlocate プログラムは、データベース ファイル /var/lib/mlocate/mlocate.db を照会して高速なファイル検索を実行します。 mlocate プログラムの権限を次の図に示します。

明らかに、SGID 権限が設定されています。以下は、データベース ファイル /var/lib/mlocate/mlocate.db の権限情報です。明らかに、SGID 権限で設定されています。以下は、データベース ファイル /var/lib/mlocate/mlocate.db の権限情報です。

一般ユーザー tester が mlocate コマンドを実行すると、tester はユーザー グループ mlocate の実行権限を取得します。ユーザー グループ mlocate には mlocate.db の読み取り権限があるため、tester は mlocate.db を読み取ることができます。プログラムの実行プロセスを次の図に示します。

バイナリ プログラムに加えて、SGID はディレクトリでも使用できます。ディレクトリに SGID 権限が設定されている場合、次の機能が実行されます。

  • ユーザーがこのディレクトリに対してrとxの権限を持っている場合、ユーザーはディレクトリに入ることができます。
  • このディレクトリ内のユーザーの有効なユーザーグループは、このディレクトリのユーザーグループになります。
  • ユーザーがこのディレクトリで w 権限を持っている場合、ユーザーが作成した新しいファイルのユーザー グループは、ディレクトリのユーザー グループと同じになります。

例を見てみましょう。testdir ディレクトリを作成し、その権限を次のように設定します。

現時点では、ディレクトリ testdir の所有者は nick であり、グループは tester です。

まず、nickfile というファイルを作成します。

このファイルの権限は特別なものではないようです。次に、testdir ディレクトリの SGID 権限を設定します。

$ sudo chmod 2775 テストディレクトリ

次に、ファイル nickfile2 を作成します。

新しく作成されたファイルが属するグループは tester です。

要約すると、SGID が通常のファイルに対して作用する場合、SUID と同様に、ファイルが実行されると、ユーザーはファイルが属するグループの権限を取得します。 SGID がディレクトリに適用されると、非常に重要な意味を持ちます。ユーザーがディレクトリに対して書き込み権限と実行権限を持っている場合、そのユーザーはそのディレクトリ内にファイルを作成できます。ディレクトリが SGID で変更された場合、そのディレクトリ内にユーザーが作成したファイルは、そのディレクトリが属するグループに属します。

スビット

実際、SBIT は SUID や SGID とはほとんど関係がありません。

SBIT は、制限付き削除フラグまたはスティッキー ビットの略語です。

SBIT は現在ディレクトリに対してのみ機能し、ファイル所有者以外のユーザーがファイルを削除できないようにするために使用されます。一般的な例は /tmp ディレクトリです。

権限情報の最後の t は、ディレクトリに SBIT 権限が設定されていることを示します。 SBIT がディレクトリに与える影響は次のとおりです。ユーザーがディレクトリ内に新しいファイルまたはディレクトリを作成すると、そのファイルまたはディレクトリを削除する権限を持つのはユーザーと root のみになります。

注意: SBIT はファイルでは機能しません。

SUID、SGID、SBIT権限を設定する

数値による権限の設定

SUID、SGID、SBIT 権限に対応する番号は次のとおりです。

SUID->4
SGID->2
SBIT->1

したがって、ファイル権限が「-rwxr-xr-x」のファイルに SUID 権限を設定する場合は、元の 755 の前に 4 を追加して、4755 にする必要があります。

$ chmod 4755 ファイル名

同様に、2 と 1 を使用して SGID および SBIT 権限を設定できます。設定が完了すると、ファイル権限の x がそれぞれ s、s、t に置き換えられます。

実際、S と T の状況も発生する可能性があります。 S と t は x 権限の代わりです。ただし、x 権限がない場合は、SUID、SGID、または SBIT 権限を追加した後、大文字の S または大文字の T として表示されます。たとえば、権限 666 のファイルに SUID、SGID、および SBIT 権限を追加します。

chmod 7666 nickfile を実行します。666 は「-rw-rw-rw」を意味し、x 権限がないため、最終的には「-rwSrwSrwT」になります。

シンボルの種類による権限の変更

権限を変更するには、数字を使用するだけでなく、記号も使用できます。

$ chmod u+s testfile # testfile ファイルに SUID 権限を追加します。
$ chmod g+s testdir # testdir ディレクトリに SGID 権限を追加します。
$ chmod o+t testdir # testdir ディレクトリに SBIT 権限を追加します。

要約する

SUID、SGID、および SBIT 権限は特別な機能を実装するように設計されており、その目的は、ugo 権限では実現できないいくつかの使用シナリオを補うことです。

参照:

  • chmod マニュアルページ
  • setuid - Wikipedia
  • Linux における SUID、SGID、SBIT の素晴らしい使い方
  • Linux の特別な権限 SUID、SGID、SBIT
以下もご興味があるかもしれません:
  • Linux ファイル ディレクトリのデフォルトの権限 (詳細な説明)
  • Linux 基本チュートリアル: 特別な権限 SUID、SGID、SBIT
  • Linux システムファイルのデフォルトの権限と特別な権限

<<:  ドロップダウンボックス選択コンポーネントを実装するためのネイティブ js

>>:  Mac に mysql5.7 をインストールするための完全な手順 (画像とテキスト付き)

推薦する

HTML テーブル マークアップ チュートリアル (9): セル間隔属性 CELLSPACING

テーブルがコンパクトになりすぎないように、テーブル内のセル間に一定の距離を設定できます。基本的な構文...

VMware14 に CentOS 7 をインストールするグラフィック チュートリアル

CentOS の紹介CentOS は、Red Hat Linux が提供する無料で利用できるソースコ...

ウィンドウの中央にブロック要素の位置を設定する方法

ウィンドウの中央にブロック要素の位置を設定する方法ブロック要素をウィンドウの中央に配置する上記の方法...

MYSQL の 3 つのツリー構造テーブル設計の長所と短所の簡単な分析と共有

目次導入質問設計 1: 隣接リストテーブルデザインSQL の例デザイン 2: パスの列挙テーブルデザ...

Linux コマンドラインで電卓を使用する 5 つのコマンド

みなさんこんにちは。私は梁旭です。 Linux を使用するときに、計算を行う必要がある場合があり、そ...

HTML ページにミュージック ビデオを追加する例

1. ビデオタグFirefoxでは自動再生をサポートしますが、GoogleとIEではサポートしません...

Linux オペレーティング システムに Apache サービスをインストールする方法

ダウンロードリンク:動作環境VMware 仮想マシンの CentOS 7.6セキュアCRT Xftp...

いくつかの重要なMySQL変数

MySQL 変数は数多くありますが、その中には注目に値するものもあります。ここでは、参考までに、注目...

js を使用してシンプルなスイッチ ライト コードを実装する

体の部位: <button>ライトのオン/オフを切り替える</button>...

Reactドラッグフックを実装するための100行以上のコード

序文ソースコードは合計で 100 行強しかありません。これを読めば、react-dnd などの成熟し...

Java で ffmpeg を呼び出してビデオ形式を flv に変換する方法の詳細な説明

Java で ffmpeg を呼び出してビデオ形式を flv に変換する方法の詳細な説明注:以下のプ...

MySQL 8.0.26 のインストールと簡易チュートリアル (インターネット上で最も完全)

目次1. MySQLをダウンロードする1.1 ダウンロード1.2 インストール1. MySQLをダウ...

SQLと各種NoSQLデータベースの使用シナリオの説明

SQL はメイントランクです。なぜ私はこのように理解するのでしょうか。技術的な観点からリレーショナル...

ローカルストレージにブール型の値を保存する際の落とし穴を解決する

LocalStorageはブール値を保存します今日、ブール値データを保存するために localsto...

MySQL 30軍事ルールの詳細な説明

1. 基本仕様(1)InnoDBストレージエンジンを使用する必要があります。解釈:トランザクション、...