Linux で Sudo を使用して権限を委譲する

Linux で Sudo を使用して権限を委譲する

sudo 権限委譲の概要

  • su スイッチ ID: su –l ユーザー名 –c 'コマンド'
  • 須藤
  • sudoパッケージから
  • 男 5 sudoers
  • Sudo は、指定されたユーザーに、指定されたホスト上で特定のコマンドを実行する権限を与えることができます。権限のないユーザーが sudo を使用しようとすると、管理者に連絡するように求めるプロンプトが表示されます。
  • sudoは各ユーザーのsudo操作を記録するログを提供することができます
  • Sudo はシステム管理者向けの構成ファイルを提供し、ユーザー権限とホストを集中管理できるようにします。
  • sudo はタイムスタンプ ファイルを使用して「チケット チェック」システムを実装します。デフォルトの有効期間は 5 分です。
  • 構文チェック機能を持つ visudo コマンドを使用して設定ファイルを編集します。
  • visudo –c 構文をチェックする
    visudo -f /etc/sudoers.d/test

須藤

  • 設定ファイル: /etc/sudoers、/etc/sudoers.d/
  • タイムスタンプファイル: /var/db/sudo
  • ログファイル: /var/log/secure
  • 設定ファイルはワイルドカード glob の使用をサポートしています。
  • ? : 任意の1文字
    *: 任意の長さの文字に一致します
    [wxc]は、文字の1つに一致します
    [!wxc] これら3文字以外の文字
    \x : エスケープ
    [[alpha]] : アルファベット順 例: /bin/ls [[alpha]]*
  • プロファイル ルールには 2 つのカテゴリがあります。
  • 1. エイリアス定義: 不要
    2. 承認ルール: 必須

sudo ユーザ

  • 承認ルールの形式:
  • ユーザーログインホスト = (ユーザーを表す) コマンド
  • 例:
  • ルート ALL=(ALL) ALL
  • フォーマットの説明:
  • ユーザー: コマンドを実行する人のID
  • ホスト: どのホストを介して
    (runas): どのユーザーとして
    コマンド: 実行するコマンド

エイリアス

  • ユーザーとrunas:
  • ユーザー名
    #ユーザーID
    %グループ名
    %# ジッド
    ユーザーエイリアス|runasエイリアス
  • ホスト:
  • IPまたはホスト名
  • ネットワーク(/ネットマスク)
    ホストエイリアス
  • 指示:
  • コマンド名
    ディレクトリ
    sudo編集
    コマンドエイリアス

最近、あるネットワーク ホスト上の USB サム ドライブから別のネットワーク ホストに MP3 ファイルをコピーする短い Bash プログラムを作成しました。ファイルは、私がボランティア団体のために運営しているサーバー上の特定のディレクトリにコピーされ、そこからダウンロードして再生することができます。

私のプログラムは、ファイルをコピーする前にファイル名を変更して、Web ページ上で日付順に自動的に並べ替えるなど、他のいくつかの処理も実行します。また、USB ドライブ上のすべてのファイルを削除し、転送が正しく完了したことを確認します。この素敵な小さなプログラムには、ヘルプを表示するための -h、テスト モード用の -t など、いくつかのオプションがあります。

私のプログラムは素晴らしいのですが、主な機能を実行するには root として実行する必要があります。残念ながら、この組織にはオーディオとコンピュータ システムの管理に関心のある人が数人しかいなかったので、私は半技術系の人を探し、転送を実行するために使用するコンピュータにログインしてこの小さなプログラムを実行できるようにトレーニングする必要がありました。

私が直接プログラムを実施できないわけではありませんが、旅行や病気などさまざまな理由で、いつもそこにいるわけではありません。たとえ私がそこにいるときでも、「怠け者のシステム管理者」として、私は他の人に私の仕事を任せたいと思っています。そのため、これらのタスクを自動化するスクリプトを作成し、sudo を使用してこれらのスクリプトを実行する複数のユーザーを指定しました。多くの Linux コマンドを実行するには、ユーザーが root である必要があります。これにより、私自身の愚かさなどの偶発的な損傷や、悪意のあるユーザーによる意図的な損傷からシステムが保護されます。

得意なことをやりなさい

sudo プログラムは、ルート アクセス権を持つシステム管理者として、すべての管理タスクまたは一部の管理タスクの責任をコンピューターの他のユーザーに委任できる便利なツールです。これにより、ルート パスワードを侵害することなくこの委任を実行できるため、ホスト上で高いレベルのセキュリティを維持できます。

たとえば、一部の機能を実行するには root として実行する必要がある Bash プログラム「myprog」へのアクセス権を一般ユーザー「ruser」に付与したとします。まず、ユーザーは自分のパスワードを使用して ruser としてログインし、次のコマンドを使用して myprog を実行します。

myprog

sudo プログラムは /etc/sudoers ファイルをチェックし、ruser が myprog を実行できるかどうかを確認します。この場合、sudo はユーザーに root パスワードではなくパスワードの入力を要求します。 ruser がパスワードを入力すると、プログラムが実行されます。さらに、sudo は、プログラムが実行された日時、完全なコマンド、およびそれを実行したユーザーとともに、myprog へのアクセスの事実を記録します。このデータはすでにログインされています。 /var/log/セキュリティ。

トレーニングの目的で、sudo が実行するすべてのコマンドのログを取っておくと便利です。誰が何を行ったか、コマンドを正しく入力したかどうかを確認できます。

これは、自分自身と別のユーザーにプログラムの実行を許可するために行いました。ただし、sudo を使用すると、さらに多くのことが可能になります。これにより、システム管理者は、ネットワーク機能または特定のサービスを管理する権限を、信頼できるユーザー個人またはグループに委任できるようになります。ルート パスワードのセキュリティを維持しながら、これらの機能を委任できます。

sudoersファイルを設定する

システム管理者は、/etc/sudoers ファイルを使用して、ユーザーまたはグループが個々のコマンド、定義されたコマンド グループ、またはすべてのコマンドにアクセスできるようにすることができます。この柔軟性は、sudo を使用した委任の強力さとシンプルさの鍵となります。

最初、sudoers ファイルは非常にわかりにくいと感じたので、以下では、使用していたホストから sudoers ファイル全体をコピーして分解しました。この分析を進めていくうちに、それほど漠然としたものではなくなってくることを願っています。余談ですが、RedHat ベースのディストリビューションのデフォルトの設定ファイルには、ガイダンスを提供するためのコメントや例が豊富に含まれており、作業がはるかに簡単になり、オンラインで検索する必要性が減ります。

標準エディタを使用して sudoers ファイルを変更しないでください。 visudo コマンドは、ファイルを保存してエディターを終了した直後に変更を有効にするように設計されているため、これを使用します。 Vi に加えて、visudo も使用できます。

まず、いくつかのエイリアスを使用してこのファイルを分析してみましょう。

ホストエイリアス

ホスト エイリアス セクションは、コマンドまたはコマンド エイリアスへのアクセスを提供するために使用できるホスト グループを作成するために使用されます。基本的な考え方は、組織内のすべてのホストに対してこの単一のファイルを維持し、それを各ホストの /etc にコピーすることです。したがって、特定のホスト (サーバーなど) をグループとして構成して、特定のユーザーに、httpd、DNS、ネットワークなどのサービスを開始および停止する機能や、ファイル システムをマウントする機能などの特定のコマンドへのアクセス権を付与することができます。

ホストエイリアスではホスト名の代わりに IP アドレスを使用することもできます。

## sudoersは特定のユーザーにさまざまなコマンドの実行を許可します
## ルートパスワードを必要とせずにルートユーザーになります。
## コレクションのファイルの下部に例が示されています
## 関連するコマンドを特定の人に委任することができます
## ユーザーまたはグループ。
## このファイルは 'visudo' コマンドで編集する必要があります。
ホストエイリアス
## マシンのグループ。ホスト名を使用する方がよいかもしれません(おそらく
## 代わりに、ドメイン全体を表すワイルドカードまたは IP アドレスを使用します。
# Host_Alias ​​FILESERVERS = fs1、fs2
# Host_Alias ​​MAILSERVERS = smtp、smtp2
## ユーザーエイリアス
## 通常のグループを使用できるため、これらはあまり必要ありません
## (つまり、ファイル、LDAP、NIS など) このファイルでは、%groupname のみを使用します。
## ではなく USERALIAS
# User_Alias ​​ADMINS = jsmith、mikem
ユーザーエイリアス AUDIO = dboth、ruser
## コマンドエイリアス
## これらは関連するコマンドのグループです...
## ネットワーキング
# Cmnd_Alias ​​NETWORKING = /sbin/route、/sbin/ifconfig、/bin/ping、/sbin/dhclient、/usr/bin/net、/sbin/iptables、/usr/bin/rfcomm、/usr/bin/wvdial、/sbin/iwconfig、/sbin/mii-tool
## ソフトウェアのインストールと管理
# Cmnd_Alias ​​SOFTWARE = ​​/bin/rpm、/usr/bin/up2date、/usr/bin/yum
## サービス
# Cmnd_Alias ​​SERVICES = /sbin/service、/sbin/chkconfig
## 位置データベースの更新
# Cmnd_Alias ​​LOCATE = /usr/bin/updatedb
## ストレージ
# Cmnd_Alias ​​STORAGE = /sbin/fdisk、/sbin/sfdisk、/sbin/parted、/sbin/partprobe、/bin/mount、/bin/umount
## 権限の委任
# Cmnd_Alias ​​DELEGATING = /usr/sbin/visudo、/bin/chown、/bin/chmod、/bin/chgrp
## プロセス
# Cmnd_Alias プロセス = /bin/nice、/bin/kill、/usr/bin/kill、/usr/bin/killall
## ドライバー
# Cmnd_Alias ​​DRIVERS = /sbin/modprobe
# デフォルト仕様
# tty でエコーを無効にできない場合は実行を拒否します。
デフォルトvisiblepw
デフォルト env_reset
デフォルト env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
デフォルト env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
デフォルト env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
デフォルト env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
デフォルト env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
デフォルト secure_path = sbin:bin:usr\sbin:usr\bin:usr\local\bin
## 次に、どのユーザーがどのソフトウェアを実行できるかという主要な部分です。
## どのマシン(sudoersファイルは複数のマシン間で共有できます)
## システム)。
## 構文:
## ユーザー MACHINE=COMMANDS
## COMMANDS セクションには他のオプションが追加される場合があります。
## ルートがどこでも任意のコマンドを実行できるようにする
ルート = すべて すべて
## 'sys'グループのメンバーがネットワーク、ソフトウェア、
## サービス管理アプリなど。
# %sys ALL = ネットワーク、ソフトウェア、サービス、ストレージ、委任、プロセス、場所、ドライバー
## グループホイールのユーザーがすべてのコマンドを実行できるようにする
ホイール = ALL ALL
## パスワードなしでも同じ
# %wheel ALL=(ALL) NOPASSWD: ALL
## ユーザーグループのメンバーがマウントおよびアンマウントできるようにします
##cdrom をルートとして
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## ユーザーグループのメンバーがこのシステムをシャットダウンできるようにします
# %users localhost=/sbin/shutdown -h 今
## /etc/sudoers.d からドロップイン ファイルを読み取ります (ここでの # はコメントを意味しません)
#includedir /etc/sudoers.d
############################################################
# David Both によって myprog への限定アクセスを提供するために追加されました #
############################################################
オーディオ guest1=usrlocalbinmyprog

デフォルトの sudoers ファイル。変更点は太字で表示されています。

ユーザーエイリアス

ユーザー エイリアス設定により、ルートはユーザーをエイリアス グループに分類して、グループ全体が特定のルート機能にアクセスできるようになります。ここは線を追加した部分です。 User_Alias ​​AUDIO = dboth、ruser は、エイリアス audio を定義し、エイリアスに 2 人のユーザーを割り当てます。

sudoers ファイルで説明されているように、エイリアスの代わりに /etc/groups ファイルを使用することもできます。すでに「audio」などのニーズに合ったグループが定義されている場合は、後で sudoers ファイルでグループに使用できるコマンドを割り当てるときに、%audio のように、先頭に % 記号を付けたグループ名を使用します。

コマンドエイリアス

sudoers ファイルの下部にはコマンド エイリアス セクションがあります。これらのエイリアスは、ネットワーク コマンドや、更新プログラムや新しい RPM パッケージのインストールに必要なコマンドなど、関連するコマンドのリストです。これらのエイリアスを使用すると、システム管理者はコマンドのグループへのアクセスを簡単に許可できます。

このセクションには、特定の種類のコマンドへのアクセスを簡単に委任できるエイリアスが多数既に設定されています。

環境のデフォルト

次のセクションでは、いくつかのデフォルトの環境変数を設定します。このセクションで最も興味深い項目は、ユーザー環境がパスワードを表示するように設定されている場合に sudo が実行されないようにする !visiblepw 行です。これは安全上の予防措置であり、無視してはいけません。

コマンドセクション

コマンド セクションは、sudoers ファイルの主要部分です。ここに十分なエントリを追加することで、必要な作業はすべてエイリアスなしで実行できます。仮名を使うと物事がずっと簡単になります。

このセクションでは、すでに定義したエイリアスを使用して、どのホストで誰が何を実行できるかを sudo に指示します。このセクションの構文を理解していれば、例は一目瞭然です。コマンド セクションで見つかった構文を見てみましょう。

ruser =ALL ALL

つまり、 ruser は任意のホスト上の任意のユーザーとして任意のプログラムを実行できます。

これは、ユーザー ruser の一般エントリです。行の最初の ALL は、このルールがすべてのホストに適用されることを示します。 2 番目の ALL により、 ruser は他のユーザーと同じようにコマンドを実行できるようになります。デフォルトでは、コマンドは root ユーザーとして実行されますが、 ruser は sudo コマンドラインでプログラムを別のユーザーとして実行するように指定できます。最後の ALL は、 ruser がすべてのコマンドを制限なく実行できることを意味します。これにより、ruser が効果的にルート化されます。

以下に示すように、root のエントリが 1 つあることに注意してください。これにより、root ユーザーはすべてのホスト上のすべてのコマンドに完全にアクセスできるようになります。

root =ALL ALL

つまり、root は任意のホスト上の任意のユーザーとして任意のプログラムを実行できます。

これを試すために、その行をコメントアウトし、root として sudo なしで chown を実行してみました。それは実際にうまくいきました。本当に驚きました。次に、sudo を使用して chown を実行すると、「root は sudoers ファイルに存在しないため、このイベントが報告されます」というメッセージが表示されて失敗します。これは、root は sudo コマンドを使用するときには root としてすべてを実行できないことを意味します。これにより、root ユーザーが他のユーザーとして sudo コマンドを実行できなくなりますが、root がこの制限を回避する方法は多数あります。

以下のコードは、myprog へのアクセスを制御するために追加したものです。これは、sudoers ファイルの先頭で定義されているように、オーディオ グループにリストされているユーザーが、1 つのホスト (つまり guest 1) 上の 1 つのプログラム (myprog) にのみアクセスできることを指定します。

AUDIO guest1=usrlocalbinmyprog

オーディオ グループのユーザーがホスト user1 上の myprog にアクセスできるようにします。

上記の行の構文では、このアクセスが許可されるホストとプログラムのみが指定されていることに注意してください。ユーザーが他のユーザーとしてプログラムを実行できることは指定しません。

パスワードをバイパス

NOPASSWORD を使用すると、グループ audio で指定されたユーザーがパスワードを入力せずに myprog を実行できるようにすることもできます。方法は次のとおりです。

AUDIO guest1=NOPASSWORD : usrlocalbinmyprog

オーディオ グループのユーザーがホスト user1 上の myprog にアクセスできるようにします。

私のプログラムではそうしませんでした。sudo アクセス権を持つユーザーは立ち止まって自分が何をしているのか考える必要があり、それが役に立つかもしれないと思ったからです。例として、アプレットのエントリを使用します。

車輪

sudoers ファイルのコマンド セクションの wheel 指定 (下の画像を参照) により、「wheel」グループ内のすべてのユーザーが任意のホストですべてのコマンドを実行できるようになります。 wheel グループは /etc/group ファイルで定義されており、これを機能させるにはユーザーをグループに追加する必要があります。グループ名の前の % 記号は、sudo を /etc/group ファイルに含める必要があることを意味します。

wheel ALL = ALL ALL

/etc/group ファイルに指定されている「wheel」グループのメンバーであるすべてのユーザーが、任意のホストですべてのコマンドを実行できるようにします。

これは、ルート パスワードを入力することなく、複数のユーザーに完全なルート アクセスを委任できる優れた方法です。ユーザーを wheel グループに追加するだけで、完全なルート権限が付与されます。また、作成するログ エントリを通じてアクティビティを監視する方法も提供します。一部のディストリビューション (Ubuntu など) では、ユーザー ID を /etc/group に追加して、すべての特権コマンドに対して sudo コマンドを使用できるようにします。

最後に

ここで sudo を使用するのは、1 人または 2 人のユーザーに単一のコマンドへのアクセスを提供するという非常に限定された目的のためです。私はこれを 2 行で実現します (私のコメントを無視すれば)。特定のタスクを実行する権限をルート アクセスのないユーザーに委任するのは簡単で、システム管理者として多くの時間を節約できます。また、問題の検出に役立つログ エントリも生成します。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Linux が Sudo 権限昇格の脆弱性を公開、どのユーザーでも root コマンドを実行可能
  • Linux でパスワードを入力せずに sudo コマンドを実行する方法
  • sudo、su、su の違いのまとめ - Linux のコマンド
  • Linux システムの sudo コマンドに関する 10 のヒントのまとめ
  • Linux で sudo su を使用して一般ユーザーにルート権限を追加する方法
  • Linux における sudo の詳細な設定とその設定ファイル /etc/sudoers の詳細な説明
  • Linuxシステムのsudoコマンドの詳細な説明
  • Linux環境でユーザーにsudo権限を追加する方法

<<:  シンプルな商品スクリーニング機能を実現するjs

>>:  MySQL スロークエリ pt-query-digest スロークエリログの分析

推薦する

メモリ構成が過剰でMySQLが起動できない問題の解決方法

問題の説明MySQL の起動時にエラーが報告されます。エラー ログを確認してください。 [エラー] ...

Docker-compose を使用して GitLab をデプロイする方法

Docker-compose は GitLab をデプロイします1. Dockerをインストールする...

nginxのシンプル転送リクエストのサーバーとロケーション設定の詳しい説明

nginx のサーバーと場所の構成を簡単に整理してみましょう。たとえば、URL: www.mask_...

Centos7 で MySQL マスター スレーブ サーバーを構築する方法 (グラフィック チュートリアル)

この記事では主に CentOS 上で MySQL マスタースレーブサーバーを構築する方法を紹介します...

Linux curl フォームのログインまたは送信と Cookie の使用に関する詳細な説明

序文この記事では主に、curl を介してフォーム送信ログインを実装する方法について説明します。単一の...

MybatisはSQLクエリのインターセプションと変更の詳細を実装します

序文インターセプターの機能の 1 つは、特定のメソッドの呼び出しをインターセプトできることです。イン...

vite を使用して vue3 アプリケーションを構築する方法

1. インストールヒント: 現在、VUE3.0 の公式翻訳ドキュメントはありません。しかし、すでに誰...

HTML テーブルタグチュートリアル (46): テーブルフッタータグ

<tfoot> タグは、テーブル フッターのスタイルを定義するために使用されます。基本構...

MySQL から Excel にテーブルデータをエクスポートする際の日時形式に関する簡単な説明

最近、MySQL を使用してテーブル データを Excel ファイルにエクスポートしました。MySQ...

MySQLストアドプロシージャにおけるカーソル(DECLARE)の原理と使い方の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャにおけるカーソル (DECLARE) ...

JavaScriptの擬似配列と配列の使い方と違い

擬似配列と配列JavaScript では、5 つのプリミティブ データ型を除き、関数を含め、その他す...

MySqlエスケープの詳細な使用例

MySQL エスケープエスケープとは、エスケープ文字の本来の意味を意味します。エスケープ文字の目的は...

Linuxルートの初期値を設定する方法の簡単な分析

Ubuntu ではデフォルトで root ログインが許可されていないため、初期の root アカウン...

Vue3 Vue イベント処理ガイド

目次1. 基本的なイベント処理2. 親コンポーネントにカスタムイベントを送信するマウス修飾子4. キ...