Linuxコマンド辞典 sudoコマンド(プロセス管理)

別のユーザーとしてコマンドを実行する「sudo」コマンドの概要と使い方を記載しています。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

参考サイト:Man page of INSTALL

概要・使用方法

書式

$ crontab [オプション] 

管理者や他のユーザ権限でコマンドを実行します。管理者にスィッチするには、管理者パスワードが必要となり、複数のユーザーが管理者にスィッチできる環境だとパスワード変更するたびに全員に伝える必要があり手間がかかります。また、第三者にパスワードが漏れる危険性もあるため、危険性を防止するためにsudoコマンドの利用があります。

sudoでコマンドを実行するためには、sudoを実行するユーザーのパスワードが必要です。一度パスワード認証が行われると、デフォルト15分間はパスワード無しでもsudoを使えます。これはパスワードキャッシュという仕組みがあるためです。

sudo実行時にユーザーを指定しない場合は、rootユーザでコマンドを実行します。sudoで実行しようとしたコマンドは、syslogに記録されてます。sudoの認証設定や、実行できるコマンドの制限などは/etc/sudoersに設定します。/etc/sudoresの変更を行う場合は、visudoを使用します。visudoは/etc/sudoresの編集を行うための専用コマンドです。設定ファイルの編集と、編集完了時にファイルの文法チェックを行います。

/etc/sudoersには、以下のようなエントリがあります。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

「wheel」をsudoコマンドの実行を許可するユーザーを含むグループ名称に書き換えて保存することで、グループに属しているユーザーはsudoコマンドを使用することができます。

特定のユーザーだけに許可するのであれば、「%」を付けずにユーザー名だけ記述します。「%」はグループ名であることを示しています。

以下のように指定すると、コマンド実行時にコマンド実行ユーザのパスワード入力が求められなくなります。

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

オプション

-b指定したコマンドをバックグラウンドで動作させる
-kパスワード保持時間を無効にし、次回起動時にパスワードを問い合わせる
-l許可、拒否されているコマンドをリストする
-s環境変数SHELLが設定されている場合はそのシェルを利用する
-H成り代るユーザの環境変数HOMEを設定する
-S標準入力からパスワードを読み込む
-i、
–login
指定したユーザーでログインシェルを起動する
-s、
–shell
指定したユーザーでシェルを起動する
-p プロンプト指定したプロンプトを利用する
-u ユーザー名/ユーザーID、
–user=ユーザー名
指定したユーザーで実行する

rootユーザーとしてログインする

実行結果

[sunarin@localhost ~]$ sudo -i
[sudo] sunarin のパスワード:
[root@localhost ~]# 

システムを再起動する

実行結果

[sunarin@localhost ~]$ sudo reboot

sudoで利用できるコマンドを一覧する。認定している実行可能なコマンドなどを確認できる。

実行結果

[sunarin@localhost ~]$ sudo -l
[sudo] sunarin のパスワード:
既定値のエントリと照合中 (ユーザー名 sunarin) (ホスト名 localhost):
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,
    env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
    USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
    LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

ユーザー sunarin は localhost 上で コマンドを実行できます
    (ALL) ALL
[sunarin@localhost ~]$ 

ユーザー名を指定して実行する

実行結果

[sunarin@localhost ~]$ sudo -u test cat /home/test/test.txt
test
[sunarin@localhost ~]$ 

リダイレクトするコマンドを実行する

「sudo du -hs > /root/home-du.txt」は「>」移行がsudoの適用コマンド外になってしまうため、権限がないファイルにリダイレクトで出力できません。この場合はサブシェルを作って実行します。sh -cで、「”」でコマンドをまとめることできます。

実行結果

[sunarin@localhost ~]$ sudo sh -c "cd /home; du -hs > /root/home-du.txt"
[sudo] sunarin のパスワード:
[sunarin@localhost ~]$ sudo ls /root
anaconda-ks.cfg  home-du.txt  initial-setup-ks.cfg
[sunarin@localhost ~]$