\r\n\r\n
sudoコマンドは、Linux上でrootなどの他人のようにコマンドを実行することができます。また、sudoはgranularityを使ってrootにアクセスできる人を制御することができます。ユーザーにフルアクセスを許可するか、少数のコマンドを使用することを許可する。その方法を紹介します。
Linuxではすべてがファイルであるということを(単純化しすぎですが)聞いたことがあります。実際、プロセス、ファイル、ディレクトリ、ソケット、パイプなど、オペレーティングシステムのほとんどすべてが、ファイルディスクリプタを介してカーネルと通信している。したがって、すべてがファイルというわけではありませんが、ほとんどのOSオブジェクトは従来と同じように扱われます。可能な限り、LinuxやUnix系OSの設計はこの原則に従っています。
Linuxでは、「すべてはファイル」という概念が広く浸透しています。Linuxにおけるファイルパーミッションが、いかにユーザーの権限とアクセスの柱の一つであるかは、容易に理解できるだろう。ファイルやディレクトリ(特殊なファイル)を所有すると、その編集、名前の変更、移動、削除など、好きなことができるようになります。また、そのファイルに対して、他のユーザーやユーザーグループが読み取り、変更、実行できるように権限を設定することができます。誰もがこのパーミッションにコントロールされているのです。
スーパーユーザー以外はrootと呼ばれる。rootアカウントは特別な特権を持つアカウントである。オペレーティングシステム内のどのオブジェクトのパーミッションにも縛られることはありません。ルートユーザーは何にでも手を出すことができ、いつでもほとんど何でもできる。
もちろん、rootのパスワードにアクセスできる人であれば、誰でも可能です。悪意を持って、あるいは偶然に、大惨事を引き起こす可能性があるのです。確かに、rootユーザーも一歩間違えれば大変なことになる。絶対に正しいという人はいません。これは危険なことだ。
このため、現在では、ルートユーザーでログインしないことがベストプラクティスとされています。通常のユーザーアカウントでログインし、sudoを使用して短時間だけ権限を昇格させることができます。通常、これはコマンドを発行するだけです。
関連:Linuxにおける「everything is a file」の意味とは?
sudoは、この記事の研究のために、ubuntu 18.04.3, manjaro 18.1.0, fedora 31のコンピュータにインストールされています。sudoは1980年代初頭から存在し、ほとんどすべてのディストリビューションでスーパーユーザー操作の標準手段になっています。
最新のディストリビューションをインストールすると、インストール時に作成されたユーザーがsudoersと呼ばれるユーザーリストに追加されます。これらのユーザーは、sudoコマンドを使用することができます。sudoの機能があるので、それを使って他のユーザーをsudoersのリストに追加することができます。
もちろん、完全なスーパーユーザの地位を無作為に誰にでも、あるいは部分的または特定の必要性のある人にだけ渡すのは無謀です。sudoers list では、異なるユーザに sudo を使用させるコマンドを指定することができます。そうすれば、彼らに王国への鍵を渡さずとも、必要なことはできるようになるのです。
もともとは、スーパーユーザーでできることから「superuser do」と呼ばれていました。その範囲が拡大され、sudo を使って、どのユーザーであるかのようにコマンドを実行することができるようになりました。新機能を反映し、名称を変更しました。現在は "オルタナティヴ・ユーザー・ド "と呼ばれています。
sudoを使って他のユーザーでコマンドを実行するには、-u(ユーザー)オプションを使用する必要があります。ここでは、ユーザーmaryとしてwhoamiコマンドを実行します。sudoコマンドを-uオプションなしで使用すると、rootユーザーとしてコマンドが実行されます。
もちろん、sudoを使用しているので、パスワードの入力を求められます。
sudo -u mary whoamiwhoamiからの応答は、このコマンドを実行しているユーザーアカウントがmaryであることを伝えています。
sudoコマンドを使えば、他のユーザーのパスワードを知らなくても、そのユーザーとしてログインすることができます。自分のパスワードを入力する画面が表示されます。その際、-i(ログイン)オプションを使用する必要があります。
sudo -i -u mary pwd whoami ls -hl exitMaryとしてログインしています。Maryユーザーアカウントの".bashrc", ".bashui alias", ".profile" ファイルを処理します。を、maryユーザーアカウントの所有者が自分でログインするのと全く同じ方法で実行します。
sudoを使用できるユーザーリストにユーザーを追加するには、sudoersファイルを編集する必要があります。visudo は、複数の人が同時に sudoers ファイルを編集しようとするのを防ぎます。また、保存時に構文チェックを行い、ファイルの内容を解析します。
編集がテストに合格しない場合、ファイルはブラインドで保存されません。あなたには選択肢がある。変更内容をキャンセルして破棄したり、もう一度編集し直したり、間違った編集を強制的に保存したりすることができます。最後の選択肢は、マジでヤバい。そんなことは考えないでください。誤って全員がsudoからロックアウトされてしまうという事態に陥ります。
visudoコマンドは編集作業を開始するために使用されますが、visudoはエディターではありません。既存のエディタを呼び出してファイル編集を行うものです。Manjaro と Ubuntu では、visudo コマンドはシンプルなエディタ nano を起動します。Fedora では、visudo はより強力ですが直感的でない vim を導入します。
関連:ViまたはVimエディタを終了する方法
fedoraでnanoを使いたい場合は、簡単にできます。まず、nanoをインストールします。
sudo dnf install nano
Visudoは、次のコマンドで起動する必要があります。
sudo EDITOR=nano visudoこれは仮名の候補として良さそうです。sudoersファイルは、nanoエディタを開くときに読み込まれます。
sudoersファイルを開くにはvisudoを使用します。このコマンドまたは上記のコマンドでお好みのエディタを指定してください。
sudo visudosudoers ファイルをスクロールして、%sudo エントリの定義を確認します。
パーセント記号は、これがユーザー定義ではなく、グループ定義であることを示します。ディストリビューションによっては、%sudoの行の先頭にハッシュが付くものがあります。これにより、セリフはコメントとなります。その場合は、ハッシュを削除して保存してください。
sudoの行は、次のように読みます。
少し書き換えれば、このグループのメンバーは、このコンピューターやこのネットワーク内の他のホスト上で任意のユーザーまたは任意のグループとして任意のコマンドを実行することができます。そこで、誰かにroot権限とsudoの使用権限を与える簡単な方法は、その人をsudoグループに追加することです。
TomとMaryという2人のユーザーがいて、それぞれtomとMaryというユーザーアカウントを持っています。ここでは、usermod コマンドを使用して、ユーザーアカウント tom を sudo グループに追加します。G (groups) オプションは、tom アカウントを追加するグループを指定します。a (append) オプションは、このグループをユーザーアカウント tom がすでに属しているグループのリストに追加します。このオプションを指定しないと、ユーザーアカウントtomは新しいグループに配置されますが、他のグループからは削除されます。
sudo usermod -a -G sudo tomでは、メアリーがどのグループに属しているのか、確認してみましょう。
groupsユーザーアカウントmaryは、maryグループにのみ所属しています。
について、トムに話を聞いてみよう。
groupstomユーザーアカウント、つまりtomは、tomグループとsudoグループに属しています。
sudo権限を必要とすることをMaryにやらせてみましょう。
sudo less /etc/shadowMaryは制限されたファイル"/etc/shadow "の内容を見ることができません。sudoを勝手に使ったと軽い批判を受けた。トムの状況を見てみよう。
sudo less /etc/shadowTomがパスワードを入力するとすぐに、/etc/shadowファイルが表示されます。
彼をsudoチームに加えるだけで、彼はsudoを使える人のエリートクラスに昇格したのです。
Tomはsudoのフル権限を取得。彼は、ルートやsudoチームの誰かができることは何でもできる。それは、あなたが喜んで渡すよりも、彼に力を与えるかもしれません。root権限を必要とする機能を実行するためにユーザが必要な場合もありますが、そのユーザがsudoのフルアクセス権を持つ正当な理由がない場合です。sudoersファイルに追加し、使用できるコマンドをリストアップすることで、このバランスをとることができます。
sudoグループに属しておらず、sudo権限を持っていないHarryユーザーアカウントのオーナーであるHarryを紹介しましょう。
groupsハリーがソフトウェアをインストールできるのは便利ですが、彼に完全なsudo権限を持たせたくはないのです。OK、問題なし。visudo:を起動しましょう。
sudo visudoグループ定義を過ぎるまで、ファイルをスクロールしてください。ハリーのセリフを追加します。これはユーザー定義であり、グループ定義ではないので、パーセント記号で始める必要はありません。
ユーザーアカウントに関する項目は
harry ALL=/usr/bin/apt-get"harry "と "ALL="の間にタブがあることに注意してください。
これは、harryがこのネットワークに接続されているすべてのホストで、リストされたコマンドを使用できることを意味します。コマンドは、"/usr/bin/apt-get "の1つがリストアップされています。コマンドリストに複数のコマンドを追加することで、harryに複数のコマンドへのアクセスを許可することができます(カンマで区切ってください)。
sudoers ファイルに行を追加し、ファイルを保存します。その行が構文的に正しいかどうかをもう一度確認したい場合は、-c (check only) オプションを使って visudo にファイルをスキャンさせ、構文をチェックさせることができます:.
sudo visudo -cこれでハリーは apt get でソフトウェアをインストールできるようになりますが、sudo を必要とする他のコマンドを使おうとすると拒否されるはずです。
sudo apt-get install fingerハリーには適切なsudo権限が付与されており、ソフトウェアをインストールすることができます。
ハリーがsudoを必要とする別のコマンドを使おうとしたらどうなるのでしょうか?
sudo shutdown nowハリーはコマンドの実行を阻止されました。彼に特定の制限されたアクセス権を与えることに成功しました。彼は指定されたコマンドを使うことができ、それ以外のことはできません。
Maryにも同じ権限を与えたい場合は、Harryの場合と全く同じ方法で、Maryというユーザーアカウントのsudoersファイルに行を追加します。また、より簡潔な方法として、ユーザーエイリアスを使用する方法もあります。
sudoersファイルでは、ユーザーエイリアスは、ユーザーアカウント名のリストを含んでいます。そして、ユーザーエイリアスの名前は、これらのすべてのユーザーアカウントを表すために、定義の中で使用することができます。これらのユーザーアカウントの権限を変更する場合、編集できるのは1行のみです。
ユーザーのエイリアスを作成し、sudoers ファイルで使用してみましょう。
sudo visudo Scroll down in the file until you come to the User_Alias specification line.次のように入力して、ユーザーエイリアスを追加します。
User_Alias INSTALLERS = harry, mary各要素はタブではなくスペースで区切られる。論理的な内訳は以下の通り。
ここで、以前ユーザーアカウント用に追加した行を編集します。
harry ALL=/usr/bin/apt-getに置き換えてください。
INSTALLERS ALL=/usr/bin/apt-getつまり、「INSTALLERS」というユーザーエイリアス定義に含まれるすべてのユーザーアカウントが、apt getコマンドを実行できるようになります。これで、Maryさんにテストしてもらい、インストールできるはずです。
sudo apt-get install colordiffMaryは "INSTALLERS "ユーザーであり、そのユーザー㊧にこれらの権限が付与されているため、ソフトウェアをインストールすることができます。
コマンドにsudoを付け忘れた場合は、次のように入力します。
sudo !!最後のコマンドが繰り返され、行頭にsudoが追加されます。
一度sudoを使用してパスワードで認証すると、15分間は他のsudoコマンドでパスワードを使用する必要がありません。認証をすぐに忘れるには、次のようにします。
sudo -ksudoコマンドの失敗をどこで見ることができるのか、気になったことはありませんか?これらは、「/var/log"/authentication log」ファイルに格納されます。以下の方法で見ることができます。
less /var/log/auth.logTTY pts/1 でログインしているユーザーアカウント mary が、ユーザー "root" として shutdown コマンドを実行しようとしたときのエントリーを見ることができます。
...その一部を他のユーザーに委任する機能...これで、他のユーザーに選択的に委任する方法がわかりましたね。