ホームページ  >  記事  >  運用・保守  >  Linuxシステムでsudoコマンドを使用する方法

Linuxシステムでsudoコマンドを使用する方法

王林
王林転載
2023-05-14 15:01:205491ブラウズ

例: mount、halt、su などのコマンドを実行するか、/etc/mtab、/etc /samba/smb.conf などのシステム構成ファイルを編集します。これにより、root ユーザーのログイン数と管理時間が削減されるだけでなく、システムのセキュリティも向上します。

1. sudo の特徴

sudo が果たす役割は、セキュリティの点で特に注意する必要があり、そうしないと不正なユーザーが root 権限を奪取することになります。同時に、システム管理者がより効率的かつ便利に使用できるように、使いやすさも考慮する必要があります。 sudo の設計者の目標は、ユーザーに与える権限を最小限に抑えながら、作業を完了できるようにすることでした。したがって、sudo
には次の特性があります。

# 1. sudo は、指定されたユーザーが指定されたホスト上で特定のコマンドを実行することを制限できます。
# 2. sudo はログを提供し、各ユーザーが sudo を使用して行ったことを忠実に記録し、そのログを中央ホストまたはログ サーバーに送信できます。
# 3. sudo はシステム管理者に設定ファイルを提供し、システム管理者がユーザーの権限とホストを集中管理できるようにします。デフォルトの保存場所は /etc/sudoers です。
# 4.sudo はタイムスタンプ ファイルを使用して、「チケット チェック」と同様のシステムを完成させます。ユーザーが sudo を実行してパスワードを入力すると、デフォルトの生存期間が 5 分の「チケット」を取得します (デフォルト値はコンパイル中に変更できます)。タイムアウト後、ユーザーはパスワードを再入力する必要があります。

2. sudo コマンド

sudo プログラム自体は、suid ビットが設定されたバイナリ ファイルです。権限を確認できます。

コードをコピーします。 コードは次のとおりです。


$ls -l /usr/bin/sudo
---s- - x--x 2 root root 106832 02-12 17:41 /usr/bin/sudo

その所有者は root なので、すべてのユーザーが root と同様にプログラムを実行できます。 suid が設定されたプログラムは、実行時にユーザーに所有者の euid を与えることができます。このため、suid を設定するプログラムは慎重に作成する必要があります。ただし、コマンド ファイルの suid の設定と sudo での実行は異なる概念であり、異なる役割を果たします。

Sudo 設定は /etc/sudoers ファイルに記録されます。これについては後で詳しく説明します。構成ファイルは、どのユーザーがどのコマンドを実行できるかを指定します。 sudo を使用するには、ユーザーは特定のユーザー名とパスワードを指定する必要があります。注: sudo では、ターゲット ユーザーのパスワードではなく、sudo を実行するユーザーのパスワードが必要です。 sudoers に属していないユーザーが sudo を介してコマンドを実行すると、sudo はこのイベントを管理者に報告します。ユーザーは sudo -v を使用して、自分が sudoer に属しているかどうかを確認できます。更新されている場合は、「チケット」の時間を更新することもできます。更新されていない場合は、プロンプトが表示されますが、管理者には通知されません。

sudo コマンドの形式は次のとおりです:

コードをコピーします コードは次のとおりです:


sudo -k -l -v -h - k -l -vsudo [ -hpsb] [-a auth_type] [-c class-] [-p プロンプト] [-u username#uid] {-e ファイル [...] -i -s コマンド}

sudo でよく使用されるその他のパラメーターを見てみましょう。

オプション 意味 機能
sudo-hhelp には、使用方法と終了のリストが表示されます。
sudo-vversion はバージョン情報を表示して終了します。
sudo-llist は、現在のユーザーが実行できるコマンドをリストします。 sudoers のユーザーのみがこのオプションを使用できます。
sudo-uusername#uiduser は、指定されたユーザーとしてコマンドを実行します。次のユーザーは root 以外であり、ユーザー名または #uid を使用できます。

sudo-kkill は「入場チケット」の時間をクリアし、次回 sudo を使用するときにパスワードの入力を要求します。

sudo-ksurekill は -k に似ていますが、「エントリ チケット」も破棄します。つまり、タイムスタンプ ファイルを削除します。

sudo-bcommandbackground は、指定されたコマンドをバックグラウンドで実行します。

sudo-ppromptcommandprompt はパスワード プロンプトを変更できます。%u はユーザー アカウント名に置き換えられ、%h はホスト名を表示します。非常にユーザーフレンドリーなデザイン。
sudo-efileedit はコマンドを実行しませんが、ファイルを変更します。これはコマンド sudoedit と同等です。

あまり一般的には使用されないパラメータもいくつかあります。これらはマニュアル ページ sudo(8) にあります。

3. sudo の設定

sudo の設定は /etc/sudoers ファイルを編集して行う必要があり、スーパー ユーザーのみがファイルを変更でき、visudo を使用して編集する必要もあります。 visudo が使用される理由は 2 つあり、1 つは

2 人のユーザーが同時に変更できないようにするため、もう 1 つは限定的な構文チェックも実行できるためです。したがって、あなたが唯一のスーパー ユーザーであっても、構文をチェックするには visudo を使用することをお勧めします。

Visudo のデフォルトでは、構成ファイルを vi で開き、vi を使用してファイルを変更します。このデフォルト項目はコンパイル時に変更できます。 visudo は、構文エラーのある設定ファイルを許可なく保存しません。次のように、問題を提示し、その対処方法を尋ねます:

#コードをコピー コードは次のとおりです:

>>>sudoersfile:syntaxerror,line22<<

この時点では 3 つのオプションがあります: 再編集するには「e」と入力し、「」と入力します。保存せずに終了するには、「x」を入力します。終了して保存するには、「q」を入力します。 q が選択されている場合、エラーが修正されるまで sudo は再度実行されません。

さあ、謎の設定ファイルを見て、その書き方を学びましょう。簡単な例から始めましょう。ユーザー foobar にすべての root 実行可能コマンドを sudo 経由で実行させます。 visudo を root として使用して構成ファイルを開くと、次のような行が表示されます。

#コードをコピーします。 コードは次のとおりです。


#runasaliasspecation
# userprivilegespecationrootall=(all )all

root がすべての権限を持っていることが一目でわかります。既存の root の例に従ってください。以下に行を追加します (タブを空白として使用することをお勧めします) :

コードをコピーします。コードは次のとおりです。


foobarall=(all)all


保存して終了した後、 foob​​ar ユーザーに切り替えて、その ID を使用してコマンドを実行します:

コードをコピーします コードは次のとおりです:


[foobar@localhost~]$ls/root
ls:/root: 権限が不十分です
[foobar@localhost~]$sudols/root
password:
anaconda-ks.cfgdesktopinstall.loginstall.log.syslog

#わかった、foobar の権利を制限しましょう。彼のやりたいようにさせないでください。たとえば、root と同じように ls と ifconfig を使用するだけの場合は、その行を次のように変更します。


コードをコピーします。 コードは次のとおりです。

foobarlocalhost= /sbin/ifconfig、/bin/ls

コマンドを再度実行します。

コードをコピーします。コードは次のとおりです。

[foobar@localhost~]$ sudohead-5/etc/shadow
password:
申し訳ありませんが、userfoabarisnotallowedtoexecute'/usr/bin/head-5/etc/shadow'asrootonlocalhost.localdomain.
[ foob​​ar@localhost~]$sudo/sbin/ ifconfigeth0linkencap:ethernethwaddr00:14:85:ec:e9:9b...

それでは、これら 3 つの意味を見てみましょう。 。最初の all はネットワーク内のホストを指します。後でホスト名に変更しました。これは、
foobar がこのホスト上で後続のコマンドを実行できることを示します。 2 番目の括弧内の all はターゲット ユーザー、つまりコマンドを実行する ID を指します。最後の
all はもちろんコマンド名を指します。たとえば、ユーザー foobar が Linux ホスト上で jimmy または rene として kill コマンドを実行するようにしたい場合は、構成ファイルを次のように記述します:

foobarlinux=(jimmy,rene)/bin/kill

Butまだ質問があります、foobar はジミーとして処刑されるべきですか、それともルネとして処刑されるべきですか?この時点で、まさにこの時点で使用される sudo-u について考えてみましょう。 foob​​ar では sudo-ujimmykillpid や sudo-urenekillpid を使用することもできますが、これは非常に面倒なので、毎回 -u を付ける必要はなく、デフォルトの対象ユーザーとして rene または jimmy を設定するだけで済みます。上に別の行を追加します:

defaults:foobarrunas_default=rene

defaults. 後ろにコロンがある場合は、後続のユーザーのデフォルトになります。コロンがない場合は、すべてのユーザーのデフォルトになります。設定ファイルに付属の行と同じように:

defaultsenv_reset

もう 1 つの問題は、多くの場合、すでにログインしているため、sudo を使用するたびにパスワードを入力するのが面倒であることです。パスワードの入力をやめることはできますか?もちろん、次のように構成ファイルを変更できます:

foobarlocalhost=nopasswd:/bin/cat,/bin/ls

もう一度 sudo してみましょう:

コードをコピーしますコードは次のとおりです。

[foobar@localhost~]$sudols/rootanaconda-ks.cfgdesktopinstall.log

install.log.syslog


# もちろん、! 演算子を使用して「一部のコマンドはユーザー foobar として実行できない」と指定することもできますが、これは良い考えではありません。 ! 演算子を使用してすべてのコマンドから一部のコマンドを「削除」しても、通常は効果がないため、ユーザーはそのコマンドを別の場所にコピーし、名前を変更して実行できます。

4. ログとセキュリティ


sudo はセキュリティに非常に配慮しており、ログを記録するだけでなく、必要に応じてシステム管理者に報告することもできます。ただし、sudo のログ機能は自動ではないため、管理者が有効にする必要があります。これを実行します:


#コードをコピーします。コードは次のとおりです:

#touch/var/log/sudo

#vi/etc/syslog.conf


syslog.conf の最後に行を追加し (タブで区切る必要があります)、保存します:

local2.debug/var/log/sudo

ログ デーモン プロセスを再起動します。 ,


psauxgrepsyslogd

取得した syslogd プロセスの pid (出力の 2 列目が pid) を次のように入力します。


kill–huppid

このように、 sudo はログを書き込むことができます:



コードをコピーします。 コードは次のとおりです:

[foobar@localhost~]$sudols/rootanaconda-ks.cfg


desktopinstall.log

install.log.syslog

$cat/var/log/sudojul2822:52:54localhostsudo:foobar:
tty=pts/1;pwd=/home/foobar;user=root; command=/bin/ls/root


ただし、小さな「欠陥」があり、sudo ログはあまり忠実ではありません:


コードをコピーします。コードは次のとおりです。次のように:

[foobar @localhost~]$sudocat/etc/shadow>/dev/null

[foobar@localhost~]$
cat/var/log/sudo。 ..jul2823:10:24localhostsudo:foobar:tty=pts/ 1;
pwd=/home/foobar;user=root;command=/bin/cat/etc/shadow


リダイレクトはログに記録されません。なぜ?シェルはコマンドが実行される前にリダイレクトを完了しているため、sudo はリダイレクトをまったく認識しません。これには利点もあります。次の方法は成功しません。


コードをコピーします。 コードは次のとおりです。


[foobar@localhost~]$sudols/root>/etc/shadowbash:/etc/shadow: 権限が不十分です


sudo にはセキュリティを保護する独自の方法があります。 root として sudo
-v を実行して、sudo 設定を確認します。セキュリティの問題のため、パス、ホーム、
シェルなどの一部の環境変数は sudo の後にコマンドに渡されないか、チェックされてから渡されます。もちろん、sudoers を使用してこれらの環境変数を設定することもできます。

以上がLinuxシステムでsudoコマンドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。