前回の記事「実際のシステム管理者は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スクリプトのシステム管理者ガイド。 ]