6つの超実用的なsudoコマンドスキル

sudoは「superuserdo」の略で、認証されたユーザーが他のユーザーと同じようにコマンドを実行できるようにします他のユーザーは、通常のユーザーまたはスーパーユーザーです。

6つの超実用的なsudoコマンドの使用スキル6つの超実用的なsudoコマンドの使用スキル

sudoは「superuserdo」の略で、認証されたユーザーが他のユーザーと同じようにコマンドを実行できるようにします他のユーザーは、通常のユーザーまたはスーパーユーザーです。ただし、ほとんどの場合、rootユーザーの操作を直接使用するのではなく、コマンドを実行するための特権を昇格させるために使用します。sudoコマンドはセキュリティポリシーと組み合わせて使用​​され、セキュリティポリシーはファイル/ etc / sudoersを介して構成できます。そのセキュリティ戦略は非常にスケーラブルであり、プラグイン拡張機能をサポートしています。デフォルトでは、/ etc / sudoersの権限は440であるため、誰も直接編集することはできません。書き込み権限を付与してから編集することもできますが、visudoコマンドを使用してファイルを編集することをお勧めします。

1.作業モードの理解

その作業プロセスと構成ファイルの構成について簡単に説明してください。

[1] sudoコマンドのワークフローを理解する

sudoは、/ etc / sudoersファイルを読み取って解析し、コマンドを呼び出したユーザーとそのアクセス許可を見つけます。

次に、コマンドを呼び出したユーザーにパスワードの入力を求めるプロンプトが表示されます。または、NOPASSWDフラグを使用してパスワードの確認をスキップできます。

その後、sudoは子プロセスを作成し、setuid()を呼び出してターゲットユーザーに切り替えます。

できれば、上記のサブプロセスのパラメータで指定されたシェル またはコマンドを実行し ます

[2] sudoコマンド認証構成を理解する

USER / GROUP HOST =(USER [:GROUP])[NOPASSWD:]コマンド

USER / GROUP:許可が必要なユーザーまたはグループを示します。グループの場合は、%で開始する必要があり

ます。HOST:どのホストユーザーを示しますか。 sudoコマンドの実行が許可されます。ALLは、任意の端末またはマシンからのアクセスを許可することを意味します

(USER [:GROUP]):sudoで切り替えることができるユーザーまたはグループを意味し、グループは指定しないままにすることができます。ALLは、できるすべてのユーザーを意味します。システムに切り替える

NOPASSWD:指定されている場合、このユーザーまたはグループはsudoを使用するときにパスワードを入力する必要はありません。

コマンド:指定されたコマンドを実行することを意味します。ALLはすべてのコマンドの実行を許可することを意味します

#sudoグループの実行を許可しますすべてのコマンド

%sudo ALL =(ALL:ALL)ALL 

#ユーザーが入力なしですべてのコマンドを実行できるようにするパスワード

エスケープALL =(ALL)NOPASSWD:ALL 

#ユーザーにエコーの実行のみを許可する、lsコマンド

エスケープALL =(ALL)NOPASSWD: / bin / echo / bin / ls 

#マシンを実行しているユーザーがshutdownコマンドを実行します

escape localhost = / sbin / shutdown -h now 

#usersユーザーグループのユーザーがrootユーザーのようにmount、unmount、およびchromコマンドを使用できるようにします

%users ALL = / sbin / mount / mnt / cdrom、/ sbin / umount / mnt / cdrom

[3]デフォルトオプションを設定する

#ユーザーがパスワードの入力を試行する回数を指定します。デフォルト値は3です。

デフォルトpasswd_tries = 5 

#パスワードのタイムアウト時間を設定します。デフォルトは5分です。

デフォルトpasswd_timeout = 2

デフォルトのsudoはユーザーに自分のパスワードを要求します。 targetpwまたはrootpw構成を追加すると、sudoにルートパスワードを要求させることができます。

デフォルトtargetpw 

#カスタムログファイルを指定します。

デフォルトlogfile = "/ var / log / sudo.log" 

#ホスト名と4桁の年をカスタムログファイルに記録します。 、log_hostおよびlog_yearパラメーターを追加できます。

デフォルトlog_host、log_year、logfile = "/ var / log / sudo.log" 

#現在のユーザーの環境変数を保持します。

デフォルトenv_keep + = "LANG LC_ADDRESS LC_CTYPE COLORS DISPLAY HOSTNAMEEDITOR"

デフォルトenv_keep + = "ftp_proxy http_proxy https_proxy no_proxy" 

#安全なPATH環境変数を配置

デフォルトsecure_path = "/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin"

2.使用スキルの概要

主にsudo関連のコマンドを使用するための使用スキルと問題解決方法を紹介します!

[1] visudoエディターをnanoからvimに変更するにはどうすればよいですか?

visudoコマンドを使用すると、常にnanoエディターを使用して開きます。viまたはvimの使用に慣れているユーザーにとっては、少し扱いに​​くく、操作が簡単ではないようです。したがって、visudoエディターをnanoからvimに変更する方法が非常に重要になります。

最善の解決策は、コマンドを呼び出して、ターミナルのエディターをvimエディターに完全に置き換えることです。次のコマンドを実行し、必要なエディターのシリアル番号を入力して、Enterキーを押すだけです。次にvisudoコマンドを実行すると、vimエディターを使用してファイルが開きます。

#因是/ etc / sudoers普通用户¸法打開和使用

$ sudo update-alternatives --config editor代替エディター

には4つの選択肢があります(/ usr / bin / editorを提供)。

選択パスの優先ステータス

---------------------------------------------- -------------- 

* 0 / bin / 
nano40自動モード

1 / bin / ed-100手動モード

2 / bin / 
nano40手動モード3 / usr / bin / vim.basic 30手動モード

4 / usr / bin / vim.tiny 10手動モードEnterキーを

押して現在の選択を保持する[*]、または選択番号を入力します:3

2番目の解決策は、環境変数を使用して現在の端末のデフォルトエディターを変更することです。

#.zshrcまたは.profileファイル内

$ export EDITOR = vim; #visudoで

有効にするために実行したい

$ sudo EDITOR = vim visudo 

#または/ etc / sudoersファイルの

デフォルトエディターを変更デフォルトeditor = / usr / bin / vim

[2] Vimはどのようにして読み取り専用ファイルを強制的に保存しますか?

vimを使用している場合、rootユーザーのみが通常のユーザーとして操作する権限を持っているファイルを開くと、編集後に保存すると、ファイルに変更する権限がないことがわかります。最終的にファイルを編集したが保存できなかったので、あきらめて終了し、root権限で開いて、再編集する必要がありました。これは面倒です。この問題を解決する良い方法はありますか?咳咳咳、いくつかあるに違いありません。

#Vimコマンドモードでの実行は強制的に保存できます#w 

:ファイルを保存することを意味します

#!:外部コマンドを実行することを意味します

#tee:データを特定のファイルと画面にリダイレクトすることを意味します

#%:外部コマンドを実行するとき、 %は現在のファイル名に展開されます

:w!sudo tee%

上記の方法は、読み取り専用ファイルを保存できないという問題を完全に解決しますが、結局のところ、コマンドはまだ少し長いです。毎回コマンドの長いリスト、あなたはそれを単純なものにマップすることができますコマンドは.vimrcに追加されます。このように、:w !!を実行するだけで、コマンドの後半部分> / dev / nullを使用して、標準出力の内容を明示的に破棄します。

"sudoを使用してvimを起動するのを忘れた場合は、ファイルをsudoとして保存できるようにします

。cmapw!! w!sudo tee> / dev / null%

[3]ファイルをより安全に編集する方法

Sudoeditは、ユーザーがファイルを安全に編集できるようにする組み込みコマンドです。sudoのマニュアルページによると、sudoeditは、-eコマンドラインオプションを指定してsudoを実行するのと同じです。

したがって、このコマンドは何をするのでしょうか。最初に、編集するファイルの一時的なコピーを作成します。次に、コマンドはSUDO_EDITOR、VISUAL、およびEDITOR環境変数を(この順序で)検索して、作成したばかりの一時コピーを開くために呼び出す必要のあるエディターを判別します。ユーザーが変更作業を完了すると、変更は元のファイルにコピーされます。

#Sudoコマンド手册页

-e、-edit

コマンドを実行する代わりに、1つ以上のファイルを編集します。

セキュリティポリシーを参照するときは、パス名の代わりに文字列「sudoedit」が使用されます。ユーザー

がポリシーによって許可されている場合、次の手順が実行されます

。1。

所有者を呼び出し元ユーザーに設定して、編集するファイルの一時的なコピーが作成されます。

2.ポリシーで指定されたエディターを実行して、

一時ファイルを編集します。sudoersポリシーは、

SUDO_EDITOR、VISUAL、およびEDITOR環境変数を(

この順序で)使用します。SUDO_EDITOR、VISUAL、またはEDITORの

いずれも設定されていない場合、エディターの

sudoers(5)オプションにリストされている最初のプログラムが使用されます。

3.変更されている場合、一時ファイルは次のようになります。

元の場所にコピーして戻し、一時

バージョンは削除されます。

指定したファイルが存在しない場合は作成されます。

sudoによって実行されるほとんどのコマンドとは異なり、エディターは呼び出し元のユーザーが環境を

変更せずに実行されることに注意してください何らかの理由で、sudoが編集された

バージョンでファイルを更新できない場合、ユーザーは警告を受け取り、編集されたコピーは

一時ファイルに残ります。

[4] sudoセッション時間を好きなように作る方法は?

sudoコマンドは、権限を委任するためのコマンドであり、実稼働環境で非常に一般的に使用されます。デフォルトでは、sudoコマンドのセッション時間は15分です。sudoパスワードのタイムアウト値を設定するには、passwd_timeoutパラメーターを使用して設定する必要があります。

必要な時間に数分で設定でき、タイムアウトするまで待機します。実行されたsudoコマンドごとにパスワードプロンプトをポップアップする場合は、時間を0に設定するか、値-1を設定してパスワードプロンプトを完全に無効にすることもできます。

#タイムアウト時間を設定する

#sudoパスワードプロンプトは、ユーザーが20分間使用すると期限切れになることを意味します

デフォルトenv_reset、timestamp_timeout = 20

[5]サーバーのアクセス許可をより安全に承認するにはどうすればよいですか?

当社が管理するサーバーに関しては、開発者またはその他の担当者がサーバーにログインして、環境をデバッグしたり、問題を再現したりする必要があります。このとき、対応するユーザーのログインアクセス許可を有効にする必要があります。ただし、/ etc / sudoersファイルを直接編集する場合は、相手が使用を終了した後で手動でクリーンアップする必要があります。忘れてしまうと、開発者や他の人がいつでもサーバーにログインできるようになり、ある程度のセキュリティ上の問題が発生します。

残念ながら、一時的な認証の場合、/ etc / sudoersファイルに対応する構成はなく、ユーザーまたはユーザーグループは指定された期間認証できます。ユーザーが指定された時点に達すると、ユーザーは再ログインを拒否されます。この状況に対応して、crontabタイミングタスクと/etc/sudoers.dディレクトリのメカニズムを通じて上記の問題を完全に解決できます。

/etc/sudoers.d/ディレクトリ内のユーザーまたはユーザーグループの認証構成ファイルを、時限タスクの時限実行ディレクトリを介して定期的にフラッシュします。たとえば、今日一時的に許可されているユーザーを定期的にフラッシュする必要がある場合は、rm -rfコマンドを作成して、/ etc /cron.dailyディレクトリの下の/etc/sudoers.d/ディレクトリを削除できます。その後、決まった時間に自動的に削除されます。許可されたユーザーの場合、/ etc / sudoersファイルを直接変更する代わりに、/ etc / sudoers.d /ディレクトリに別の構成ファイルを作成します。

#Crontabには複数のタイミングメカニズムがあります
#以下はそれぞれ、毎日、
毎時、毎月、毎週のスケジュールされた実行を示します$ ls -dl /etc/cron.* | grep -v cron.d $ 

drwxr-xr-x 2 root root 4096 May 15 06:18 /etc/cron.daily 

drwxr-xr-x2ルートルート4096 2019年2月14日/etc/cron.hourlydrwxr-xr-x2

ルートルート4096 2019年2月14日/etc/cron.monthlydrwxr- 

xr-x 2 root root 4096 Jun 18 09:57 /etc/cron.weekly#

個別の認証構成ファイルを作成

$ ls -lh /etc/sudoers.d/ 

-r--r ----- 1 root root 666 2017年10月6日lisi 

-r--r ----- 1 root root 958 2018年1月18日zhangsan 

#認証構成ファイルの内容を表示

$ cat /etc/sudoers.d/zhangsan 

ALL ALL =(root)NOPASSWD:zhangsan

[6] sudoコマンドが環境変数を見つけられないという問題を解決するにはどうすればよいですか?

毎日sudoコマンドを使用すると、ユーザーを切り替えた後、以前に設定した環境変数が欠落していることに気付くことがよくあります。これは、sudoコマンドの実行後にユーザーを切り替えるためです。環境変数を保持すると、特定のセキュリティ問題が発生します。システムは、デフォルトで環境変数を安全な環境変数にリセットします。以前に設定された変数は無効になり、構成ファイルで指定されたいくつかの環境変数のみを保存できます。

sudo構成ファイル/ etc / sudoersを調べて、その理由を調べることができます。次のコマンドを実行すると、次の入力が表示されます(ここにあるものとは異なる場合があります)。その中で、env_resetは、環境変数がデフォルトでリセットされることを意味します。そのため、sudoコマンドの実行後にカスタム変数が無効になり、変数値が正しく取得されません。また、env_keepは、一部の環境変数がリセットされないようにするために使用されることを意味します。保持する必要のある変数は二重引用符で囲み、保持する必要のある変数は単独で追加できます。最後はsecure_path変数であり、その機能は、含まれているパスがsudo環境のPATH変数として使用されることです。sudo環境で一部のコマンドが見つからない場合は、これらのコマンドのパスを構成アイテムに追加できます。

$ sudo sed '/ ^#/ d; / ^ $ / d' / etc / sudoers

デフォルトenv_reset

デフォルトenv_keep = "COLORS IDSPLAY HOSTNAME HISTSIZELS_COLORS"

デフォルトenv_keep + = "MAIL PS1 PS2 QTDIR USERNAME LANGLC_ADDRESS"

デフォルトsecure_path = "/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ snap / bin "

理由がわかったら、sudoコマンドが環境変数を見つけられないという問題を解決するために、さまざまな方法で上記の状況に対処できます。

最初の解決策は、使用時に-Eパラメーターを使用することです。-Eオプションを追加すると、ユーザーはsudoの実行時に現在のユーザーの既存の環境変数を保持でき、sudoによってリセットされることはありません。さらに、ユーザーが指定された環境変数に対する権限を持っていない場合、エラーが報告されます。なお、内部試験機では、安全要件が高くない場合に使用します。

$ sudo sudo -E

2番目の解決策は、sudo構成ファイルを変更することです。/ etc / sudoersファイルのenv_keepおよびsecure_path構成項目を変更して、sudo環境で保持する必要のある環境変数とパスを指定できます。もちろん、構成ファイルから変数!env_resetを削除して、制限がないようにすることもできます。

$ sudo vim / etc / sudoers

デフォルト!env_reset

おすすめ

転載: blog.csdn.net/yaxuan88521/article/details/115176164