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 スロークエリログの分析

推薦する

Linux usermod コマンドの使用

1. コマンドの紹介usermod (ユーザー変更) コマンドは、ユーザー アカウントを変更するため...

vue3 を使用してカウント関数コンポーネントのカプセル化例を実装する

目次序文1. カプセル化の重要性2. どのようにカプセル化しますか? 1. アイデア2. 準備2. ...

Vue で動的に読み込まれたローカル画像を処理する方法

問題を見つける今日は、vue ファイルにローカル画像を導入する際に問題が発生したので、この記事を書き...

Linuxでawkを使用する方法の詳細な説明

awk を学ぶ前に、sed、grep、tr、cut などのコマンドを学んでおく必要があります。これら...

ubuntu16.04でNFSサービスを構築する方法

NFS の紹介NFS (ネットワーク ファイル システム) は、FreeBSD でサポートされている...

JavaScript 操作要素の例

操作要素の詳細については、前回の記事を参照してください。JavaScript WebAPI、DOM、...

MySQL 5.6.22 のインストールと設定方法のグラフィックチュートリアル

このチュートリアルでは、MySQL5.6.22のインストールと設定方法の具体的なコードを参考までに共...

ウェブページからテキスト透かしを削除する2つの簡単な方法

<br /> 特定の Web サイトを閲覧して、優れた Web ページを見つけた場合、そ...

Vue でデータが変更された後にビューを同期的に更新する方法

序文少し前に、興味深い問題を目にしました。Vue のデータが変更された後に、ビューを同期的に更新する...

Vue フロントエンド開発における階層的にネストされたコンポーネント間の通信の詳細な説明

目次序文例まとめ序文Vue の親子コンポーネントは、props を通じて親コンポーネントの値を子コン...

Google ブラウザのラベルと入力間のスペースに関する小さな問題

最初にコード、次にテキストコードをコピーコードは次のとおりです。 <!DOCTYPE html...

表内のコンテンツオーバーフローのレイアウト方法について

コンテンツオーバーフローとは何ですか?実際、テキストが大量にある場合、コンテンツ領域がそれだけの長さ...

JS上級編ES6の6つの継承方法

目次1. プロトタイプチェーン継承2. コンストラクタによる継承3. 組み合わせ継承4. プロトタイ...

nginxを使用して取得したIPアドレスが127.0.0.1である問題を解決する

IPツールを取得 lombok.extern.slf4j.Slf4j をインポートします。 org....

MySQL無料インストールバージョンの設定チュートリアル

この記事では、参考までにMySQLの無料インストール構成チュートリアルを紹介します。具体的な内容は次...