ホームページ  >  記事  >  システムチュートリアル  >  Linux コマンドラインエラープロンプトを解決する方法: sudo コマンドを使用する

Linux コマンドラインエラープロンプトを解決する方法: sudo コマンドを使用する

WBOY
WBOY転載
2024-01-15 16:42:26542ブラウズ

Linux コマンド ラインを使用しているときに、「権限が拒否されました」というエラー メッセージが表示されたことがありますか? これは、root 権限を必要とする操作を実行しようとしていることが原因である可能性があります。たとえば、以下のスクリーンショットは、バイナリ ファイルをシステム ディレクトリにコピーしようとしたときに発生したエラーを示しています。

Linux コマンドラインエラープロンプトを解決する方法: sudo コマンドを使用する

シェルに対するアクセスが拒否されました

それでは、このエラーを解決するにはどうすればよいでしょうか? それは非常に簡単で、sudo コマンドを使用します。

Linux コマンドラインエラープロンプトを解決する方法: sudo コマンドを使用する

sudo

を使用してコマンドを実行します。

ユーザーは、このコマンドを実行した後、(自分の) ログイン パスワードを入力するよう求められます。正しいパスワードを入力すると、操作は正常に実行されます。

sudo は、Linux でコマンド ラインを使用する人なら誰でも知っておく必要があるコマンドであることは間違いありません。ただし、このコマンドをより責任を持って効果的に使用するには、関連する (そして詳細な) 詳細を知る必要があります。これはまさにこの記事で説明する内容です。

先に進む前に、この記事で説明されているすべてのコマンド手順は、Ubuntu 14.04 LTS の Bash バージョン 4.3.11 でテストされていることを言及しておきます。

sudoとは

ご存知のとおり、sudo は昇格された特権 (通常は root ユーザー) を必要とするコマンドを実行するために使用されます。そのような例の 1 つについては、この記事の前半のセクションで説明しました。ただし、必要に応じて、sudo を使用して別の (非 root) ユーザーとしてコマンドを実行できます。

これは、ツールによって提供される -u コマンド ライン オプションによって実現されます。たとえば、次の例に示すように、私 (himanshu) が別のユーザー (howtoforge) のホーム ディレクトリにあるファイルの名前を変更しようとしましたが、「アクセスが拒否されました」というエラーが発生しました。次に、sudo -u howtoforge を追加し、同じ「mv」コマンドを使用しました。コマンドは正常に実行されました。

Linux コマンドラインエラープロンプトを解決する方法: sudo コマンドを使用する

sudoとは

誰でも sudo を使用できますか? ###いいえ。ユーザーが sudo を使用できるようにするには、ユーザーに関連する情報が /etc/sudoers ファイルに存在する必要があります。 Ubuntu Web サイトからの次の抜粋を参照すると、より明確になります。 /etc/sudoers ファイルは、誰がどのマシンでどのユーザーとしてどのコマンドを実行できるかを制御し、特定のコマンドにパスワードが必要かどうかなどの特殊な状況も制御できます。このファイルは、エイリアス (基本変数) とユーザー仕様 (誰がどのコマンドを実行できるかを制御) で構成されます。

Ubuntu を使用している場合、ユーザーが sudo コマンドを実行できるようにするのは簡単です。アカウントの種類を管理者に変更するだけです。これは、[システム設定] -> [ユーザー アカウント] で直接行うことができます。

Linux コマンドラインエラープロンプトを解決する方法: sudo コマンドを使用するsudo ユーザー

まずウィンドウのロックを解除します:

Linux コマンドラインエラープロンプトを解決する方法: sudo コマンドを使用するウィンドウのロックを解除しています

次に、ユーザー タイプを変更するユーザーを選択し、タイプを「管理者 アドミニストレータ」に変更します。

Linux コマンドラインエラープロンプトを解決する方法: sudo コマンドを使用するsudo アカウントを選択してください

ただし、Ubuntu を使用していない場合、またはディストリビューションがこの機能を提供していない場合は、/etc/sudoers ファイルを手動で編集してこの変更を実装できます。ファイルに次のような行を追加するには: リーリー

言うまでもなく、[user] は sudo 権限を増やしたいユーザーのユーザー名に置き換える必要があります。ここで言及する価値のある重要なことの 1 つは、visudo コマンドを使用してファイルを編集することが公式に推奨されているということです。必要なのは、次のコマンドを実行するだけです:

リーリー

何が起こっているかを説明するために、ここに visudo マニュアルからの抜粋を示します:

visudo 以安全的模式编辑 sudoers 文件。visudo 锁定 sudoers 文件以防多个编辑同时进行,提供基本的检查(sanity checks)和语法错误检查。如果 sudoers 文件现在正在被编辑,你将会收到一个信息提示稍后再试。

关于 visudo 的更多信息,前往这里。

什么是 sudo 会话

如果你经常使用 sudo 命令,你肯定注意到过当你成功输入一次密码后,可以不用输入密码再运行几次 sudo 命令。但是一段时间后,sudo 命令会再次要求你的密码。

这种现象跟运行 sudo 命令数目无关,跟时间有关。是的,sudo 默认在输入一次密码后 15 分钟内不会再次要求密码。15 分钟后,你会再次被要求输入密码。

然而,如果你想的话,你能改变这种现象。用以下命令打开 /etc/sudoers 文件:

sudo visudo

找到这一行:

Defaults env_reset

Linux コマンドラインエラープロンプトを解決する方法: sudo コマンドを使用する

env_reset

然后在这行最后添加以下变量:

Defaults env_reset,timestamp_timeout=[new-value]

[new-value] 为想要 sudo 会话持续的时间数。例如,设数值为 40。

Linux コマンドラインエラープロンプトを解決する方法: sudo コマンドを使用する

sudo timeout value

如果你希望每次使用 sudo 命令时都要求输入密码,你可以把这个变量赋值为 0 。想要 sudo 会话永远不过时,应赋值为 -1。

注意将 timestamp_timeout 的值赋为 “-1” 是强烈不推荐的。

sudo 密码

你可能注意过,当 sudo 要求输入密码然后你开始输入时,不会显示任何东西 —— 甚至连常规的星号都没有。虽然这不是什么大问题,不过一些用户就是希望显示星号。

好消息是那有可能也很容易做到。所有你需要做的就是在 /etc/sudoers 文件里将下述的行:

Defaults env_reset

改成

Defaults env_reset,pwfeedback

然后保存文件。

现在,无论什么时候输入 sudo 密码,星号都会显示。

Linux コマンドラインエラープロンプトを解決する方法: sudo コマンドを使用する

hide the sudo password

一些重要的 sudo 命令行参数

除了 -u 命令行参数(我们已经在这篇教程的开始部分讨论过了),还有其他重要的 sudo 命令行参数值得注意。在这部分,我们将会讨论其中一些。

-k 参数

考虑下这种情况:输入密码后你刚刚运行了几个 sudo 驱动的命令。现在,如你所知,sudo 会话默认保持 15 分钟。假设在这会话期间,你需要让某些人访问你的终端,但你不想让他们可以使用 sudo ,你将会怎么做?

还好,有 -k 命令行参数允许用户取消 sudo 权限。这是 sudo 帮助页面(man page)对此的解释:

-k, --reset-timestamp

不带任何命令使用时,撤销用户缓存的凭据。换句话讲,下一次使用 sudo 将会要求输入密码。使用这个参数不需要密码,也可以放到一个 .logout 文件中来撤销 sudo 权限。

当与一个命令,或者一个可能需要密码的操作一起用时,这个参数将会导致 sudo 忽略用户缓存的凭据。结果是 sudo 要求输入密码(如果这是被安全策略所要求的),而且不会更新用户缓存的凭据。

-s 参数

有时你的工作要求你运行一堆需要 root 权限的命令,你不想每次都输入密码。你也不想通过改变 /etc/sudoers 文件调整 sudo 会话的过期时限。

这种情况下,你可以用 sudo 的 -s 参数。这是 sudo 帮助页面对此的解释:

-s, --shell

SHELL 環境変数が設定されている場合、またはユーザーのパスワード データベースを呼び出してシェルが指定されている場合、シェルが実行されます。コマンドが指定されている場合、そのコマンドはシェルの -c パラメータを介して実行のためにシェルに渡されます。コマンドが指定されていない場合は、対話型シェルが実行されます。

つまり、このコマンド パラメーターの基本的な機能は次のとおりです。

新しいシェルの開始 - どのシェルについては、SHELL 環境変数の割り当てを参照してください。 $SHELL が空の場合、/etc/passwd で定義されたシェルが使用されます。
-s パラメーターを使用してコマンド名を渡す場合 (sudo -s whoami など)、実際に実行されるのは sudo /bin/bash -c whoami です。
他のコマンドを実行しない場合 (つまり、sudo -s のみを実行する場合)、root 権限を持つ対話型シェルが表示されます。

-s コマンド ライン パラメータを使用すると、root 権限を持つシェルが得られますが、これは root 環境ではないことに注意してください。依然として独自の .bashrc を実行しています。たとえば、sudo -s を指定して実行した新しいシェルで whoami コマンドを実行すると、root ではなくユーザー名が返されます。

-i パラメータ

-i パラメーターは、説明した -s パラメーターに似ています。ただし、違いがあります。重要な違いの 1 つは、-i を指定すると root 環境が提供されることです。つまり、(ユーザーの) .bashrc は無視されます。これは、root として明示的にログインせずに root になるのと似ています。さらに、root ユーザーのパスワードを入力する必要もありません。

重要: su コマンドを使用すると、ユーザー (デフォルトは root) を切り替えることもできることに注意してください。このコマンドでは、root パスワードを入力する必要があります。これを回避するには、sudo (sudo su) を使用して実行すると、ログイン パスワードの入力のみが必要になります。ただし、su と sudo su の間には暗黙的な違いがあります。それらについて、および sudo -i との違いについては、ここを参照してください。

要約

これで、少なくとも sudo の基本と、sudo のデフォルトの動作を調整する方法を理解できたと思います。説明したように /etc/sudoers を調整してみてください。 sudo コマンドの詳細については、フォーラムのディスカッションも参照してください。

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

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