序文 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 権限を使用してパスワードを変更する方法を見てみましょう。
ただし、テスター ユーザーが 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 権限が設定されている場合、次の機能が実行されます。
例を見てみましょう。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 権限では実現できないいくつかの使用シナリオを補うことです。 参照:
以下もご興味があるかもしれません:
|
<<: ドロップダウンボックス選択コンポーネントを実装するためのネイティブ js
>>: Mac に mysql5.7 をインストールするための完全な手順 (画像とテキスト付き)
1. mpstatコマンド1.1 コマンド形式 mpstat [ -A ] [ -u ] [ -V ...
ミックスインは、コンポーネントに分散された再利用可能な機能を柔軟な方法で提供します。 Mixin オ...
<br />多くの中小企業ではこの問題は発生しません。中小企業はデザイナーをサポートし、...
開発中にこのような要件に遭遇したので、将来使用するために記録しました。需要背景キーボード ショートカ...
この記事の主な内容は次のとおりです。 1. ブラウザのサポート2. 画像3. レスポンシブツール4....
1. プロジェクトwarが保存されているディレクトリを入力しますDockerfileを編集する vi...
<br />関連記事: Web コンテンツ ページ作成のための 9 つの実用的なヒント、...
Linux でバージョン情報を表示する方法。ビット数、バージョン情報、CPU コア情報、CPU 固有...
1. MySQL ユーザー管理[例1.1] ローカルMySQLサーバーのテストデータベースにroot...
今日、MySQL データベースをコンピューターに再度インストールしました。システムを再インストールす...
序文Linux カーネルでは、元のコードとの互換性を保つため、または特定の仕様に準拠するため、また現...
目次1. はじめに2. 関数型プログラミングとは何ですか? 3. 純粋関数(関数型プログラミングの基...
1. はじめにMySQL が起動すると、BufferPool が初期化されます。クエリ操作を実行する...
この記事では、Windows 10環境でのMySQL 5.5のインストールと使用方法を紹介します。リ...
包括的なドキュメントgithubアドレスhttps://github.com/RocketChat/...