GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでsudoを使用して権限を委任する

前回の記事「実際のシステム管理者はsudoを実行しない」で、sudoの本当に恐ろしい誤用について説明しました。 いくつかのディストリビューションによって。この記事は、私の本の第11章「Linuxの使用と管理、ゼロからSysAdmin、第1巻:はじめに」から部分的に抜粋したもので、sudoの有効な使用例をいくつか紹介します。 。

ユースケース1:リモートファイルコピー

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

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

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

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

うまくやれるようにsudoを実行してください

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

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

sudo myprog

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

各コマンドのログをsudoで実行していることがわかりました トレーニングに役立つこと。誰が何をしたのか、実際にコマンドを正しく入力したのかどうかを確認できます。

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

sudoersファイルの構成

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

sudoers全体をコピーしました 図1のファイル あなたのためにそれを分解するために私がそれを使用しているホストから。初めて遭遇したときはとても混乱しました。うまくいけば、私たちが通過するまでに、それはあなたにとってそれほど曖昧ではないでしょう。 Red Hatベースのディストリビューションには、ガイダンスを提供するためのコメントや例がたくさん含まれているデフォルトの構成ファイルがある傾向があるのが好きです。これにより、グーグルの必要性が大幅に減るため、作業が簡単になります。

標準のエディタを使用してsudoersを変更しないでください ファイル。 visudoを使用する これは、ファイルが保存されてエディターを終了するとすぐに変更を有効にするように設計されているためです。 vi以外のエディターを使用することも可能です visudoと同じように 。

最初に、いくつかの種類のエイリアスからこのファイルの分析を始めましょう。

ホストエイリアス

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

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
User_Alias AUDIO = dboth, user

## Command Aliases
## These are groups of related commands...

## Networking
# 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

## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
 
## Processes
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification
#
# Refuse to run if unable to disable echo on the tty.
#
Defaults !visiblepw
Defaults env_reset
Defaults env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

################################################################################
# Added by David Both, 11/04/2017 to provide limited access to myprog #
################################################################################
#
AUDIO guest1=/usr/local/bin/myprog

図1 :変更を太字で示したデフォルトのsudoersファイル。

ユーザーエイリアス

構成サンプルの次のグループは、ユーザーエイリアスです。これにより、rootはユーザーをエイリアスグループに分類できるため、グループ全体に特定のroot機能へのアクセスを提供できます。私が書いた小さなプログラムのために、エイリアスAUDIOを定義する次のエイリアスをこのセクションに追加しました そのエイリアスに2人のユーザーを割り当てます。

User_Alias AUDIO = dboth, ruser

sudoersに記載されているように、それは可能です。 ファイル自体。/etc/groupsで定義されたLinuxグループを使用するだけです。 エイリアスの代わりにファイル。 「オーディオ」など、ニーズを満たすグループがすでに定義されている場合は、そのグループ名の前に%を付けて使用します。 次のように署名します:%audio 後でsudoersでグループが使用できるコマンドを割り当てるとき ファイル。

コマンドエイリアス

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

このセクションには、特定の種類のコマンドへのアクセスを簡単に委任できるようにするためのエイリアスがすでにいくつか設定されています。ユースケースではそれらは必要ありません。

環境のデフォルト

次のセクションでは、いくつかのデフォルトの環境変数を設定します。このセクションで最も興味深い項目は、!visiblepwです。 sudoを防ぐ行 ユーザー環境がパスワードを表示するように設定されている場合は、実行されません。これは、オーバーライドしてはならないセキュリティ上の予防措置です。

コマンドセクション

このセクションは、sudoersの主要部分です。 ファイル。ここに十分なエントリを追加することで、すべてのエイリアスなしで必要なすべてを実行できます。エイリアスは、sudoに通知するためにすでに定義されているエイリアスを使用することで、非常に簡単になります。 誰がどのホストで何をできるか。このセクションの構文を理解すれば、例は自明です。それでは、コマンドセクションにある構文を見てみましょう。 図2 ユーザーruserの一般的なエントリがあります。

ruser ALL=(ALL) ALL

図2 :ruserは、任意のホストで任意のユーザーとして任意のプログラムを実行できることを示す一般的なエントリ。

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

図3に示すように、rootのエントリがあることに注意してください。 。このエントリにより、rootはすべてのホスト上のすべてのコマンドにすべてを網羅してアクセスできるようになります。

root ALL=(ALL) ALL

図3 :tootは、任意のホストで任意のユーザーとして任意のプログラムを実行できるというエントリ。
しかし、もちろん、これを試してみる必要があったので、図3の行をコメントアウトしました。 そして、rootとして、chownを実行しようとしました sudoなし 。それはうまくいきました–驚いたことに。次に、sudo chownを使用しました 「rootはsudoersファイルにありません。この事件は報告されます。」つまり、rootはすべてをrootとして実行できますが、sudoを使用する場合は何も実行できません。 指図。これにより、rootがsudoを介して他のユーザーとしてコマンドを実行できなくなります。 コマンドですが、rootにはその制限を回避する方法がたくさんあります。

図4のエントリ myprogへのアクセスを制御するために追加したものです 。これは、sudoersの上部近くで定義されているように、AUDIOグループにリストされているユーザーを指定します。 ファイル、1つのプログラムmyprogにのみアクセスできます 、1つのホスト、guest1。

AUDIO guest1=/usr/local/bin/myprog

図4 :これは、AUDIOグループの一部であるユーザーがmyprogにアクセスできるようにするために追加したエントリです。 ホストのguest1。

図4の行の構文に注意してください。 このアクセスを許可するホストとプログラムのみを指定します。ユーザーが他のユーザーと同じようにプログラムを実行できることを指定するものではありません。

パスワードのバイパス

図5 NOPASSWORDを使用して、グループAUDIOで指定されたユーザーがmyprogを実行できるようにする方法を示します。 パスワードを入力する必要はありません。

AUDIO guest1=NOPASSWORD : /usr/local/bin/myprog

図5 :この架空のエントリにより、AUDIOグループの一部であるユーザーがmyprogにアクセスできるようになります。 パスワードを入力する必要はありません。

sudoを使用しているユーザーがいると思うので、プログラムではこれを行いませんでした。 アクセスを停止し、彼らが何をしているのかを考える必要があります。これはそれを少し助けるかもしれません。例として、私の小さなプログラムのエントリを使用しました。

ホイール

sudoersのコマンドセクションのホイール仕様 図6に示すファイル Wheelグループのすべてのユーザーが任意のホストですべてのコマンドを実行できるようにします。ホイールグループは/etc/groupで定義されています これを機能させるには、ファイルとユーザーをグループに追加する必要があります。 % グループ名の前の記号は、sudoを意味します /etc/groupでそのグループを探す必要があります ファイル。

%wheel ALL = (ALL) ALL

図6 :このエントリは、/etc/groupで定義されているホイールグループのメンバーであるすべてのユーザーを示しています fileは、任意のホストですべてのコマンドを実行できます。

これは、rootパスワードを指定せずに、複数のユーザーに完全なrootアクセスを委任するための良い方法です。ホイールグループにユーザーを追加するだけで、完全なルートパワーにアクセスできます。また、sudoによって作成されたログエントリを介してアクティビティを監視する手段も提供します。 。 Ubuntuなどの一部のディストリビューションでは、ユーザーのIDが/etc/groupのホイールグループに追加されます。 これにより、sudoを使用できるようになります すべての特権コマンドを使用するコマンド。

ユースケース2:プレゼンテーション

私たちは通常、LibreOffice ImpressまたはPowerPointによって作成された滑らかなスライド、アニメーション化されたトランジション、およびグラフィックスの観点からプレゼンテーションを考えますが、そうである必要はありません。今年の3月3日、サウスカロライナ州コロンビアのオープンソース101で、「Bashの使用と構成」というタイトルの拡張セッションを発表しました。

さて、Bashの使用に関する長いセッションに参加している場合、なぜたくさんの派手なスライドを見たいのでしょうか。個人的には、Bashが使われているのを見たいです。そこで、プレゼンテーションとなるBashスクリプトを作成しました。私は速くて正確なタイピストではないので、これにより、Bashスクリプトにデモンストレーションしたいすべてのコマンドを事前にプログラムできるので、Enterを押すだけで済みます。 キーを押して、テキストを含む次のスライドに移動するか、コマンドを発行します。これは私にとって非常にうまく機能し、Bashスクリプトの非常に優れたユースケースであったため、参加者もそれを気に入っているようでした。

この1500行のBashシェルスクリプトのコマンドの1つだけがルート権限を必要としたため、これは関連性があります。 rootとしてログインし、プログラム全体を実行することは非常に安全ではありません。いくつかの重要なシステムレベルのファイルを削除または破壊するエラーが発生した場合はどうなりますか?システム管理者およびBashプログラマーとして、私は完璧ではなく、エラーが発生します。

したがって、答えは「学生」ユーザーとしてプログラムを実行し、sudoを使用することでした。 特権アクセスを必要とする1つのコマンドのプレフィックスとしてのコマンド。プレゼンテーションの途中でも、学生ユーザーのパスワードを入力するのは簡単でした。 sudoの適切な使用例として、これをプレゼンテーションでも使用しました。 。

このユースケースの設定は前のケースと同じですが、ユーザー名とコマンド名が異なります。

最終的な考え

sudoを使用しました これらの場合、非常に限られた目的のために–1人または2人のユーザーに単一のコマンドへのアクセスを提供します。私自身のコメントを無視すれば、私はこれを2行で達成しました。ルートアクセス権を持たないユーザーに特定のタスクを実行する権限を委任するのは簡単で、システム管理者としてかなりの時間を節約できます。また、必要な場合にのみ特定のコマンドへのアクセスを提供することで、セキュリティを大幅に強化できます。

sudo コマンドは、問題の検出に役立つログエントリも生成します。 sudoers fileは、構成のための多数の機能とオプションを提供します。 manを確認してください sudoのファイル およびsudoers ダウンとダーティの詳細について。

[今すぐダウンロード:Bashスクリプトのシステム管理者ガイド。 ]


Linux
  1. ドキュメントのroot権限を持つLinuxユーザーを追加します

  2. Linux でスーパーユーザーとして cd コマンドを実行する

  3. Android - Linux を使用して Samsung S6 をルート化する方法は?

  1. Podmanでsudoを使用せずにLinuxでコンテナを実行する

  2. ProcDumpを使用してLinuxをデバッグする

  3. Linuxの権限101

  1. Linuxパーミッションのビギナーズガイド

  2. LinuxのUmaskとは

  3. Linux ubuntu で CPAN を使用する場合、root またはデフォルト ユーザーとして sudo / を使用して実行する必要があります。