Sudo (日本語)

Sudo は、システム管理者が権限を委譲して、特定のユーザーまたはユーザー グループに、コマンドとその引数の監査証跡を提供しながら、root または別のユーザーとしてコマンドを実行する能力を与えることができます。

Sudo は、root 権限でコマンドを実行するための su の代替手段です。root シェルを起動し、それ以降のすべてのコマンドに root 権限を付与する su とは異なり、Sudo は単一のコマンドに一時的な権限の昇格を与えます。

Sudo は他のユーザーとしてコマンドを実行するためにも使用できます。さらに、sudo はセキュリティ監査のために、すべてのコマンドと失敗したアクセス試行を記録します。

インストール

sudo パッケージをインストールします。

使用

非特権ユーザーとして sudo を使い始めるには、適切に設定する必要があります。 詳しくは #設定 をご覧ください。

sudo を使うには、コマンドとその引数の前に sudo とスペースを入れるだけです:

$ sudo cmd

例えば pacman を使うには:

$ sudo pacman -Syu

詳細は sudo(8) をご覧ください。

設定

Tango-view-fullscreen.pngTango-view-fullscreen.png

理由。 Defaultsを議論するイントロダクションを作成し、おそらく一般的な設定をリストアップした表を作成する(トークで議論する。

Defaults skeleton

sudoers(5) § SUDOERS OPTIONSは、Defaults/etc/sudoersコマンドで使用できるすべてのオプションを一覧表示します。

オプションのリスト (バージョン 1.8.7 のソース コードから解析されたもの) をご覧ください。

パスワードのタイムアウトの設定などの詳細については、sudoers(5)を参照してください。

現在の設定を見る

sudo -llを実行すると、現在のsudoの設定を印刷することができますし、sudo -lU userを実行すると、特定のユーザーの設定を印刷することができます。 visudoはsudoers/etc/sudoersにコピーする前に構文エラーをチェックします。

  • sudoersには、シンタックスエラーがないことが必須です! エラーがあると sudo が使えなくなります。
  • visudo(8) は、ユーザが選択したエディタの環境変数を尊重するように visudo を設定することは、セキュリティホールになる可能性があると警告しています。なぜなら、visudo の権限を持つユーザが、その変数に別のものを設定するだけで、ログを取らずに root として任意のコマンドを実行できるからです。 sudo パッケージは --with-env-editorSUDO_EDITORVISUALEDITOREDITORVISUALが設定されていると使用されません。

    現在のシェルセッションの間、visudoのエディタとしてnanoを使用するには、EDITOR=nanoをエクスポートします。

    # EDITOR=nano visudo

    別の方法として、/etc/sudoersvisudo -c -f /copy/of/sudoersを使用してチェックすることもできます。

    エディタを恒久的に変更するには、Environment variables#Per userを参照してください。 visudoのためだけにシステム全体で選択するエディタを恒久的に変更するには、以下を/etc/sudoersに追加します(nanoがあなたの好みのエディタであると仮定します)。

    # Reset environment by defaultDefaults env_reset# Set default EDITOR to nano, and do not allow visudo to use EDITOR/VISUAL.Defaults editor=/usr/bin/nano, !env_editor

    サンプル エントリ

    ユーザーがコマンドの前に sudo を付けたときに、完全な root 権限を取得できるようにするには、次の行を追加します。

    USER_NAME ALL=(ALL) ALL

    ユーザーがホスト名 HOST_NAME のマシン上でのみ、すべてのコマンドを任意のユーザーとして実行できるようにするには、次の行を追加します。

    USER_NAME HOST_NAME=(ALL) ALL

    グループ wheel のメンバーに sudo アクセスを許可するには:

    %wheel ALL=(ALL) ALL
    ヒント。 新しい管理者を作成するときには、wheelグループのsudoアクセスを有効にして、ユーザーをそこに追加することが望ましいことがよくあります。なぜなら、Polkitはデフォルトでwheelグループのメンバーを管理者として扱うからです。

    ユーザー USER_NAME へのパスワードの要求を無効にするには:

    警告。 これにより、あなたのユーザー名で実行されているプロセスが、許可を求めずにsudoを使用できるようになります。
    Defaults:USER_NAME !authenticate

    ホスト HOST_NAMEUSER_NAME に対してのみ、明示的に定義されたコマンドを有効にします。

    USER_NAME HOST_NAME=/usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu
    注意: 最もカスタマイズされたオプションは、ファイルの最後に置くべきです。 特に、ユーザーがこのグループに入っている場合は、%wheelの行の後に記述する必要があります。

    パスワードのないホスト HOST_NAMEUSER_NAME に対してのみ、明示的に定義されたコマンドを有効にします。

    USER_NAME HOST_NAME= NOPASSWD: /usr/bin/halt,/usr/bin/poweroff,/usr/bin/reboot,/usr/bin/pacman -Syu

    詳細なsudoers/usr/share/doc/sudo/examples/sudoersにあります。 それ以外の詳しい情報は sudoers(5) を参照してください。

    Sudoers のデフォルトのファイルパーミッション

    sudoers ファイルのオーナーとグループは両方とも 0 でなければなりません。また、ファイルパーミッションは 0440 に設定されていなければなりません。 これらのパーミッションはデフォルトで設定されていますが、誤って変更してしまった場合は、すぐに元に戻さないと sudo が失敗します。

    # chown -c root:root /etc/sudoers# chmod -c 0440 /etc/sudoers

    ヒントとコツ

    パスワード プロンプトのタイムアウトを無効にする

    よくある厄介な問題は、どこかのバックグラウンド ターミナルで実行される、通常のパーミッションで実行され、必要なときだけ昇格する長時間実行されるプロセスです。 これにより、sudo のパスワード プロンプトが表示されますが、気づかれずにタイムアウトしてしまい、その時点でプロセスが終了し、実行した作業が失われるか、せいぜいキャッシュされる程度です。 一般的なアドバイスは、パスワードレス sudo を有効にするか、sudo がパスワードを記憶するタイムアウトを延長することです。 これらはどちらもセキュリティ上、マイナスの意味を持ちます。 プロンプトのタイムアウトは無効にすることもできますが、それは合理的なセキュリティ目的を果たさないので、ここではそれが解決策となります。

    Defaults passwd_timeout=0

    パスワード プロンプトにターミナルのベルを追加する

    バックグラウンド ターミナルで sudo プロンプトに注意を向けるために、ユーザーは単にベル文字をエコーさせることができます。

    Defaults passprompt="^G password for %p: "

    ^G はリテラルのベル文字であることに注意してください。 例)vimでは、Ctrl+vCtrl+gという並びで挿入し、nanoでは、Alt+vCtrl+gという並びで挿入します。

    エイリアスの継承

    エイリアスを多用している方は、sudo を使用する際に、エイリアスが root アカウントに継承されないことにお気づきかもしれません。 しかし、それらを機能させるための簡単な方法があります。 ~/.bashrc/etc/bash.bashrc:

    alias sudo='sudo '

    端末ごとの sudo を無効にする

    警告。 これにより、任意のプロセスがあなたの sudo セッションを使用できるようになります。

    新しいターミナルを開くたびにパスワードを入力しなければならないsudoのデフォルトに悩まされている場合は、timestamp_typeglobalに設定してください。

    Defaults timestamp_type=global

    パスワードを入力する回数を減らす

    5分ごと(デフォルト)にパスワードを再入力しなければならないことに煩わしさを感じる場合は、timestamp_timeoutに長い値(分単位)を設定することで変更できます。

    Defaults timestamp_timeout=10

    一度に多くの sudo コマンドを使用する場合は、timestamp_timeout の値を大きくするよりも、sudo を使用するたびにタイムアウトを更新する方が論理的です。 タイムアウトの更新は sudo -vsudo -K はすぐに失効します)。

    .bashrc:

    alias sudo='sudo -v; sudo '

    また、bashの関数を使用することもできます。

    環境変数

    環境変数がたくさんある場合や、export http_proxy="..."でプロキシ設定をエクスポートしている場合、sudoを使用するときに-Eオプションを付けてsudoを実行しないと、これらの変数はrootアカウントに渡されません。

    $ sudo -E pacman -Syu

    環境変数を保存する推奨された方法は、env_keepに追加することです。

    /etc/sudoers
    Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

    Root パスワード

    ユーザーは、targetpw (ターゲットユーザー。

    /etc/sudoers の Defaults 行に rootpw を追加します。

    Defaults targetpw

    root のパスワードをユーザーに公開しないようにするには、特定のグループに制限することができます:

    Defaults:%wheel targetpw%wheel ALL=(ALL) ALL

    root のログインを無効にする

    ユーザーは root のログインを無効にしたいと思うかもしれません。 root がないと、攻撃者はまず sudoer として設定されたユーザー名とユーザーのパスワードを推測しなければなりません。 例えば、OpenSSH#Denyを参照してください。

    警告。

    • 注意してほしいのは、rootログインを無効にすることで自分自身をロックアウトしてしまう可能性があるということです。 Sudo は自動的にはインストールされず、そのデフォルトの設定では、パスワードなしのルートアクセスも、自分のパスワードでのルートアクセスもできません。 root アカウントを無効にする前に、ユーザーが sudoer として適切に設定されていることを確認してください!
    • rootpw をデフォルトで使用するように sudoers ファイルを変更している場合は、以下のコマンドで root ログインを無効にしないでください!
    • すでにロックアウトされている場合は、パスワード回復を参照してください。

    アカウントのロックは passwd:

    # passwd -l root

    同様のコマンドで root のロックを解除します。

    $ sudo passwd -u root

    別の方法として、/etc/shadowを編集し、ルートの暗号化されたパスワードを「!”:

    root:!:12345::::::

    再びルートのログインを可能にするには:

    $ sudo passwd root
    ヒント:

    kdesu

    kdesuはKDEでroot権限でGUIアプリケーションを起動するために使われることがあります。 kdesuはデフォルトでは、rootアカウントが無効であってもsuを使おうとする可能性があります。 幸いなことに、kdesu に su の代わりに sudo を使うように指示することができます。 ファイル ~/.config/kdesurc:

    super-user-command=sudo

    または以下のコマンドを使用します:

    $ kwriteconfig5 --file kdesurc --group super-user-command --key super-user-command sudo

    代わりに kdesudoAUR をインストールすると、以下のコマンドでタブコンプリートが使えるようになります。

    sudo の例では、Harden を使用します

    例えば、admin、devel、joe の 3 人のユーザーを作成したとしましょう。 admin」はjournalctl、systemctl、mount、kill、iptablesなどの操作を行うユーザー、「devel」はパッケージのインストールや設定ファイルの編集を行うユーザー、「joe」はログインを行うユーザーです。

    /etc/pam.d/su/etc/pam.d/su-l wheelグループに入ることを要求しますが、誰も入れないようにします。

    #%PAM-1.0auth sufficient pam_rootok.so# Uncomment the following line to implicitly trust users in the "wheel" group.#auth sufficient pam_wheel.so trust use_uid# Uncomment the following line to require a user to be in the "wheel" group.auth required pam_wheel.so use_uidauth required pam_unix.soaccount required pam_unix.sosession required pam_unix.so

    SSHのログインを「ssh」グループに限定します。

    groupadd -r sshgpasswd -a joe sshecho 'AllowGroups ssh' >> /etc/ssh/sshd_config

    再起動 sshd.service.

    他のグループにユーザーを追加します。

    for g in power network ;do ;gpasswd -a joe $g ;donefor g in network power storage ;do ;gpasswd -a admin $g ;done

    develが編集できるようにconfigsのパーミッションを設定します。

    chown -R devel:root /etc/{http,openvpn,cups,zsh,vim,screenrc}
    Cmnd_Alias POWER = /usr/bin/shutdown -h now, /usr/bin/halt, /usr/bin/poweroff, /usr/bin/rebootCmnd_Alias STORAGE = /usr/bin/mount -o nosuid\,nodev\,noexec, /usr/bin/umountCmnd_Alias SYSTEMD = /usr/bin/journalctl, /usr/bin/systemctlCmnd_Alias KILL = /usr/bin/kill, /usr/bin/killallCmnd_Alias PKGMAN = /usr/bin/pacmanCmnd_Alias NETWORK = /usr/bin/netctlCmnd_Alias FIREWALL = /usr/bin/iptables, /usr/bin/ip6tablesCmnd_Alias SHELL = /usr/bin/zsh, /usr/bin/bash%power ALL = (root) NOPASSWD: POWER%network ALL = (root) NETWORK%storage ALL = (root) STORAGEroot ALL = (ALL) ALLadmin ALL = (root) SYSTEMD, KILL, FIREWALLdevel ALL = (root) PKGMANjoe ALL = (devel) SHELL, (admin) SHELL 

    この設定では、Rootユーザーとしてログインする必要はほとんどありません。

    「joe」は自宅のWiFiに接続できます。

    sudo netctl start homesudo poweroff

    「joe」は他のユーザーとしてnetctlを使用できません。

    sudo -u admin -- netctl start home

    「joe」がjournalctlを使用したり、逃げたプロセスを殺す必要がある場合、そのユーザーに切り替えることができます。

    sudo -i -u develsudo -i -u admin

    しかし、「joe」はルートユーザーに切り替えることはできません。

    sudo -i -u root

    もし「joe」が admin として gnu-screen セッションを開始したい場合、次のように行うことができます:

    sudo -i -u adminadmin% chown admin:tty `echo $TTY`admin% screen

    /etc/sudoers.d のドロップインファイルを使用して sudo を設定します。d

    sudo は、/etc/sudoers.d//etc/sudoersを編集する代わりに、スタンドアロンのファイルで設定を変更し、そのディレクトリにドロップすることができます。

    • sudoers.pacnewファイルを編集する必要はありません。
    • 新しいエントリに問題がある場合、/etc/sudoersを編集する代わりに、問題のあるファイルを削除することができます (ただし、以下の警告を参照してください)。

    これらのドロップイン ファイルのエントリの形式は、/etc/sudoersvisudo -f /etc/sudoers.d/somefileを使用してください。

    /etc/sudoers.d/.~ を含むファイル名はスキップされます。

    注意: ドロップインファイルのエントリの順序は重要です。ステートメントが自身を上書きしないようにしてください。
    警告。 /etc/sudoers.d//etc/sudoerssudovisudo

    ファイルの編集

    sudo -esudoedit では、自分のユーザーとしてテキスト エディターを実行しながら、他のユーザーとしてファイルを編集することができます。

    この機能は、テキストエディタの権限を上げずに、rootとしてファイルを編集する場合に特に便利です。

    エディタはどんなプログラムでも設定できることに注意してください。例えば、pacnewファイルを管理するためにmeldを使用することができます。

    不正なパスワードを入力すると、Sorry, try again. メッセージがユーモアのある侮辱文に置き換えられます。

    /etc/sudoers
    Defaults insults

    トラブルシューティング

    TTYなしでのSSH問題

    Merge-arrows-2.png この記事やセクションは#Configurationとのマージの候補です。Merge-arrows-2.png

    注意事項:テンプレートの第2引数を使って、より詳細な表示を行ってください。 (Talk:Sudo#で議論)

    SSHはリモートコマンドを実行するとき、デフォルトではttyを割り当てません。 割り当てられたttyがないと、sudoはパスワードが表示されるのを防ぐことができません。 sshの-tオプションを使うことで、強制的にttyを割り当てることができます。

    Defaultsrequirettyでは、ttyを持っている場合にのみsudoを実行することができます。

    # Disable "ssh hostname sudo <cmd>", because it will show the password in clear text. You have to run "ssh -t hostname sudo <cmd>".##Defaults requiretty

    Permissive umask

    Merge-arrows-2.pngMerge-arrows-2.png

    注意事項:テンプレートの第2引数を使って、より詳細な表示をしてください。 (Talk:Sudo#で議論)

    Sudoは、ユーザーのumaskの値を自分のumask(デフォルトは0022)と結合します。 これにより、sudo がユーザーの umask が許可するよりも多くのオープンパーミッションを持つファイルを作成することを防ぎます。 カスタム umask が使用されていない場合、これは正常なデフォルトですが、sudo によって実行されたユーティリティが、root によって直接実行された場合とは異なるパーミッションでファイルを作成するような状況が発生する可能性があります。 これによりエラーが発生した場合は、ユーザが指定したumaskよりも希望するumaskの方がより寛容であっても、sudoはumaskを修正する手段を提供します。

    visudo を使用してこれを追加すると、sudo のデフォルトの動作をオーバーライドします:

    Defaults umask = 0022Defaults umask_override

    これは sudo の umask を root のデフォルト umask (0022) に設定し、デフォルトの動作をオーバーライドします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です