sudo をインストール
まずは、sudo をインストールします。
$ yum install sudo
Loaded plugins: fastestmirror, priorities
...
Total download size: 414 k
Is this ok [y/N]: y
...
Complete!
|
インストールは、これだけです。
デフォルトの設定では、root以外は、sudo を実行しても許可されません。
以下は、その例です。
$ su -l hoge
[hoge]$ less /var/log/secure
/var/log/secure: 許可がありません
[hoge]$ sudo less /var/log/secure
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for hoge:
hoge is not in the sudoers file. This incident will be reported.
|
/var/log/secure は、root権限がないと参照できません。そのため、まず、
less /var/log/secure
でエラーが出力されます。
次に、sudo を使ってみます。
これも、エラーです。
hoge is not in the sudoers file.
(hogeさんは、sudoersファイルに設定されてませんから、使えません。の意味)
また、root宛てに同時に以下のようなメールも配信されます。
To: root@hogehost.example.com
From: hoge@hogehost.example.com
Auto-Submitted: auto-generated
Subject: *** SECURITY information for hogehost.example.com ***
Message-Id: <20120216080813.B5629E1412@hogehost.example.com>
Date: Thu, 16 Feb 2012 17:08:13 +0900 (JST)
hogehost.example.com : 2月 16 17:08:13 : hoge : user NOT in sudoers ; TTY=pts/0 ; PWD=
/home/hoge ; USER=root ; COMMAND=/usr/bin/less /var/log/secure
|
sudo の基本設定
sudo の設定は、/etc/sudoers を編集することで行います。ただし、/etc/sudoersは、rootでも書き込めないようになっています。
通常、sudoers 編集用コマンド visudo を使って編集します。
visudoは、デフォルトでは、
vi による編集になります。また、環境変数のEDITORにテキストエディターが設定されている場合は、そちらが優先されます。
$ export EDITOR='/usr/bin/vim'
|
上記のように設定すると vim で編集できるようになります。
sudo の基本的な考え方から、/etc/sudoers は、
- sudo を利用できるユーザを登録できる。
- sudo を利用できるホストを登録できる。
- sudo を利用できるコマンドを登録できる。
をメインに設定できるようになっています。
構文
ユーザ ホスト=(実行ユーザ) コマンド
(実行ユーザ) は、省略可です。
また、全てを意味する ALL を指定することもできます。
$ visudo
...
hoge localhost=/usr/bin/less /var/log/secure
...
|
これを保存して、先に試してエラー出力されて less コマンドを実行してみましょう。
ちゃんと表示できるようになったと思います。
$ su -l hoge
[hoge]$ sudo less /var/log/secure
[sudo] password for hoge:
Feb 16 17:07:20 db su: pam_unix(su:session): session closed for user root
...
|
使い方
ユーザを限定してsudoを許可する
複数のユーザを登録したい場合などは、
User_Alias が便利です。
User_Alias USERGROUP = hoge , taro , hanako
USERGROUP ALL=(ALL) ALL
|
上記のように指定すると hoge , taro , hanako でsudoを利用できるようになります。
ホストを限定してsudoを許可する
- 全てのホストでsudo でshutdown を許可する
- あるホストだけでsudo でshutdown を許可する
hoge 192.168.1.100=/sbin/shutdown
|
ここでは、IPアドレスを指定していますが、ホスト名でも可です。
hoge hosthoge=/sbin/shutdown
|
更には、ネットワークで指定することもできます。
hoge 192.168.1.0/24=/sbin/shutdown
|
複数のホストを登録したい場合などは、
Host_Alias が便利です。
Host_Alias HOSTGROUP = 192.168.1.100 , hosthoge , 192.168.2.0/24
hoge HOSTGROUP=/sbin/shutdown
|
上記のように指定すると 192.168.1.100 , hosthoge , 192.168.2.0/24 でsudoを利用できるようになります。
OSによっては、
localhostを使えないことがあります。
IPアドレスや、/etc/hostsなどで設定しているホスト名を用いることをおすすめします。
また、IPアドレス指定の場合、以下のようにネットワーク指定もでいます。
ホストの指定は、何のためにあるのか?
よく指定したホストからのアクセスの場合、sudoの規制をかけるため・・・のニュアンスで記載されていることがあります。
でも、実際に、sshやrshなどで sudo を実行してもクライアント側のIPアドレスやホスト名から sudo の規制がかかることはありません。
ここで指定する
ホストは、実際に色々と試した結果からすると単純に
sudoを実行するホストのようです。
例1)
A : [ 192.168.1.100 ]
B : [ 192.168.1.200 ]
$ rsh 192.168.1.100 -l hoge "sudo -l"
[sudo] password for hoge: *******
Sorry, user hoge may not run sudo on db.
|
例2)
A : [ 192.168.1.100 ]
B : [ 192.168.1.200 ]
$ rsh 192.168.1.100 -l hoge "sudo -l"
[sudo] password for hoge: *******
Matching Defaults entries for hoge on this host:
!requiretty, visiblepw, always_set_home, env_reset, env_keep="COLORS
DISPLAY HOSTNAME HISTSIZE INPUTRC 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,
logfile=/var/log/sudo_local.log
User hoge may run the following commands on this host:
(ALL) ALL
|
つまり、上記の例2のAの設定のように、
「hogeさんは、192.168.1.100 で、全てのコマンドをsudoで実行できます。」
という意味のようです。
そうすると、ホストの指定って必要か・・・という話になりますね。Googleさんに聞くと、どうも sudo の設定をネットワークで共有することができるようで、そのときには、このホストの設定が便利なのだそうです?
少なくとも1台で、ごにょごにゅ設定している分には、ALLで十分ということのようです。
コマンドを限定してsudoを許可する
- 全てのコマンドを sudo で許可する
- あるコマンドだけをsudo で許可する
hoge hosthoge=/sbin/shutdown
|
複数のコマンドを登録したい場合などは、
Cmnd_Alias が便利です。
Cmnd_Alias CMNDGROUP = /sbin/shutdown,/usr/bin/kill
hoge hosthoge=CMNDGROUP
|
上記のように指定すると shutdown , kill がsudoで実行できるようになります。
sudo のロギング設定
sudo の一番の長所は、ロギングの機能でしょう。
サーバーの設定を変更するような重要なコマンドを使用した場合、そのロギングは、非常に役立つでしょう。
そのロギングの設定は、先の基本設定と同じように /etc/sudoers を編集することで行います。ただし、/etc/sudoersは、rootでも書き込めないようになっています。
通常、sudoers 編集用コマンド visudo を使って編集します。
また、sudo のロギングの機能には、2つあります。
- syslog を使ってロギングを行う場合
- sudo 独自でロギングを行う場合
ここでは、それぞれのやり方を簡単に解説します。
syslog を使ってロギングを行う場合
syslog (rsyslogも同様に使えます) を使ってロギングを行うには、以下の手順で行います。
- /etc/sudoers にsyslogのファシリティを設定する。
$ visudo
...
Defaults syslog = local2
...
|
ここでは、syslog のファシリティを
local2と設定しています。
これは、sudo がデフォルトで使うファシリティということなので、ここではそれを使っています。
sudo として受け付けるファシリティは、
auth, daemon, user, local0,local1, local2, local3, local4, local5, local6, local7
です。
また、ユーザ認証時のロギングに対してsyslogの優先順位を指定することができます。
- syslog_badpri : ユーザが認証に失敗したときに使用する syslog の優先順位
- syslog_goodpri : ユーザが認証に成功したときに使用する syslog の優先順位
$ visudo
...
Defaults syslog_badpri = alert
Defaults syslog_goodpri = notice
...
|
sudo として受け付けるsyslog の優先順は、
alert, crit, debug, emerg, err, info, notice, warning
です。
- /etc/syslog.conf にファシリティ対応のロギングファイル名を指定する。
$ vi /etc/syslog.conf
...
local2.* /var/log/sudo.log
...
|
/var/log/messagesへの出力を停止する場合は、以下の変更も行います。
# replace for not output sudo log
# *.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none;local2.none /var/log/messages
|
/var/log/messagesへの出力条件に、local2.noneを追加しているだけです。
( none : 出力しないの意味になります。)
rsyslog を使っている場合は、/etc/rsyslog.conf を同じように編集します。
また、*.debug でロギングファイルを指定している方もおられるようです。
確かにロギングは出力されるでしょう。ただ、このdebugは、優先順位でしかないので、ちょっと意味合いが違うかなと思います。
また、*.debug とすることで、他のアプリケーションのdebug情報まで出力されるかもしれませんので、注意しましょう。
- syslog を再読み込み(or 再起動)する。
$ /etc/init.d/syslog restart
...
|
rsyslog を使っている場合は、以下のようにします。以下の例は、再読み込みしています。
$ /etc/init.d/rsyslog reload
...
|
- ロギングファイルを確認する。
まずは、hogeの 権限のない/var/log/secure を sudo を使って参照してみましょう。
$ su -l hoge
[hoge]$ less /var/log/secure
/var/log/secure: 許可がありません
[hoge]$ sudo less /var/log/secure
[sudo] password for hoge:
...
|
root で、/var/log/sudo.log を 確認してみましょう。
$ tail /var/log/sudo.log
...
Feb 16 20:51:23 hogehost sudo: hoge : TTY=pts/0 ; PWD=/var/log ; USER=root ; COMMAND=/usr/bin/less /var/log/secure
...
|
このようにロギング情報が出力されればOKです。
sudo 独自でロギングを行う場合
sudo 独自のロギング機能をを使ってロギングを行うには、以下の手順で行います。
- /etc/sudoers にロギングファイルのパスを指定する。
$ visudo
...
Defaults logfile = /var/log/sudo_local.log
...
|
設定はこれだけです。
ログの1行も文字数を変更したい場合は、以下のように変更することもできます。
$ visudo
...
Defaults loglinelen = 120
...
|
デフォルト80文字ですが、ここでは、120文字へ変更しています。
- ロギングファイルを確認する。
まずは、hogeの 権限のない/var/log/secure を sudo を使って参照してみましょう。
$ su -l hoge
[hoge]$ less /var/log/secure
/var/log/secure: 許可がありません
[hoge]$ sudo less /var/log/secure
[sudo] password for hoge:
...
|
root で、/var/log/sudo_local.log を 確認してみましょう。
$ tail /var/log/sudo.log
...
2月 16 21:04:55 : hoge : TTY=pts/0 ; PWD=/var/log ; USER=root ;
COMMAND=/usr/bin/less /var/log/secure
...
|
このようにロギング情報が出力されればOKです。
sudo のその他の設定
ここでは、上記のsudo の基本設定 で説明していない環境設定の各情報について簡単に解説しておきます。
Defaults で設定する情報
Defaults は、sudoで用いるパラメータの設定(環境設定)を行います。
例えば、visudo 用いて /etc/sudoers を以下のように設定し、使います。
上記の例は、requiretty というフラグをonにしています。
つまり、以下の説明にもあるように
「sudoをtty接続時のみ有効とする」・・・という意味になります。cron や cgi では、利用できないような設定になります。
以下は、man sudoers で出力される各パラメータの内容を転記したものです。
フラグ :
on/off で設定される情報です。offを設定する場合は、パラメータ名の前に “!”を付加します。
# on/off の設定例
# requiretty = on
Defaults requiretty
# requiretty = off
Defaults !requiretty
|
always_set_home :
これをセットすると、sudo は環境変数 HOME を変身対象ユーザのホームディレクトリに設定する (-u オプションが使用されないかぎり、
それは root である)。事実上、暗黙のうちに sudo に -H オプションが常に指定されることになるわけだ。
このフラグはデフォルトでは off である。
authenticate :
これをセットすると、ユーザはコマンドの実行を許可される前に、パスワードで (あるいは、ほかの認証方法で) 認証をしなければならない。
このデフォルト値は PASSWD や NOPASSWD タグで変更できる。
このフラグはデフォルトでは on である。
closefrom_override :
これをセットすると、ユーザが sudo の -C オプションを使 用できるようになる。
-C オプションというのは、sudo が開 いたファイルを閉じていくとき、どのファイル・ディスクリ プタからクローズしていくかというデフォルトの始点を変更 するものだ。
このフラグはデフォルトでは off である。
env_editor :
これをセットすると、visudo はデフォルトのエディタ・リストを利用する前に、環境変数 EDITOR や VISUAL の値を使用 するようになる。
これがセキュリティホールになりかねない ことに注意してほしい。
ユーザが root として任意のコマン ドをログに記録されることなく実行できるようになるからだ。
こうした環境変数を利用するときの、 env_editor を有効 にするよりも安全な方法は、 sudoers ファイルの editor オ プションにコロンで区切ったエディタのリストを書いておくことだ。
そうすれば、 visudo が EDITOR や VISUAL を使う のは、それが editor オプションに指定した値とマッチした ときだけになる。
このフラグはデフォルトでは off である。
env_reset :
これをセットすると、sudo は環境を以下の変数のみを含むように設定し直す。すなわち、LOGNAME, SHELL, USER, USERNAME それに SUDO_* である。
その後でさらに、sudo を 起動するユーザの環境にある変数のうち、 env_keep や env_check のリストにマッチするものが追加される。
env_keep や env_check のリストにデフォルトでどんな変数 が含まれているかは、root ユーザが sudo を -V オプション 付きで実行すれば、見ることができる。
なお、sudoers ファ イルの secure_path オプションが設定されているときは、そ の値が環境変数 PATH として使用されることになる。
このフラグはデフォルトでは on である。
fqdn :
sudoers ファイルで完全修飾ホスト名を使用したかったら、 このフラグをセットするとよい。すなわち、myhost ではなく 、 myhost.mydomain.edu を使いたい場合だ。
そのときでも、 そうしたければ、短縮形も使える (両方を混ぜて使うことだ ってできる)。
気を付けてほしいのは、fqdn を 有効にすると 、sudo は DNS へ問い合わせをしなければならないので、DNS サービスが稼働していない場合、sudo が使えなくなるかもし れないということだ (たとえば、マシンがネットワークに接 続していない場合)。
もう一つ気を付けるべきことがある。 DNS が知っているホストの正式名を使わなければならないということだ。
言い換えれば、ホストのエイリアス (CNAME の エントリ) を使ってはいけない。
パフォーマンスの問題もあるし、DNS からエイリアスをすべて取得する方法はないからでもある。
マシンのホスト名が (hostname コマンドで返って くるものが) すでに完全修飾名になっているならば、fqdn を セットする必要はないだろう。
このフラグはデフォルトでは off である。
ignore_dot :
これをセットすると、環境変数 PATH 中に ’.’ や ’’ (カレントディレクトリ) があっても、sudo はそれを無視する。
PATH そのものは変更されない。
このフラグはデフォルトでは off である。
ignore_local_sudoers :
LDAP の方でこのフラグをセットすると、/etc/sudoers の解 析がスキップされる。
このフラグは、ローカルにある sudoers ファイルの使用を禁じて、LDAP のみを使うようにし たい企業のためにある。
たちの悪いオペレータが /etc/sudoers に手を加えて自分の権限を増やそうとしても、 そうした悪だくみは阻止されるわけだ。
このオプションが設 定されているときは、/etc/sudoers ファイルは存在する必要 すらない。このオプションは、マッチする LDAP の具体的な エントリが一つもなかったときに、
どう振舞うべきかを sudo に指示するものだから、これを指定した sudoOption は cn=defaults のセクションになければ意味がない。
このフラ グはデフォルトでは off である。
insults :
これをセットすると、不正なパスワードが入力されたとき、 sudo がユーザに悪態をつく。
このフラグはデフォルトでは off である。
log_host :
これをセットすると、ホスト名が (syslog 経由ではない) sudo のログファイルに記録されることになる。
このフラグは デフォルトでは off である。
log_year :
これをセットすると、四桁の年が (syslog 経由ではない) sudo のログファイルに記入されることになる。
このフラグは デフォルトでは off である。
long_otp_prompt :
S/Key や OPIE のような One Time Password (OTP) スキーム を採用しているときにこれを有効にすると、
チャレンジをロ ーカルウィンドウにカット・アンド・ペーストしやすいよう に、二行のプロンプトが使用される。
デフォルトのプロンプ トほど見栄えはよくないが、こちらの方が便利だと思う人もいる。
デフォルトではこのフラグは off である。
mail_always :
ユーザが sudo を実行するたびに、mailto ユーザにメールを送る。
このフラグはデフォルトでは off である。
mail_badpass :
sudo を実行するユーザが正しいパスワードを入力しないと、 mailto ユーザにメールを送る。
このフラグはデフォルトでは off である。
mail_no_host :
これをセットすると、sudo を起動したユーザが sudoers ファイルに存在するものの、使用中のホストでコマンドの実行を許可されていない場合、 mailto ユーザにメールを送付する。
このフラグはデフォルトでは off である。
mail_no_perms :
これをセットすると、sudo を起動したユーザが sudo の使用を許可されているが、実行しようとしているコマンドが sudoers ファイルのそのユーザのエントリに登録されていないか、
明示的に禁止されている場合、 mailto ユーザにメー ルを送付する。
このフラグはデフォルトでは off である。
mail_no_user :
これをセットすると、sudo を起動したユーザが sudoers ファイルに記載されていない場合、mailto ユーザにメールを送付する。
このフラグはデフォルトでは on である。
noexec :
これをセットすると、sudo を通して実行されるすべてのコマンドが、 EXEC タグで無効にされないかぎり、あたかも NOEXEC タグが設定されているかのごとく振舞うようになる。
上述の「NOEXEC と EXEC」の説明、および、このマニュアル の終わりの方にある「シェル・エスケープを防止する」とい うセクションを参照してほしい。
このフラグはデフォルトで は off である。
path_info :
通常 sudo は、環境変数 PATH 中にコマンドが見付からないと、ユーザにそのことを知らせる。これを利用すれば、一般 ユーザにアクセス権のない実行ファイルのありかについて情報を収集できるという理由から、
この動作を無効にしたいサ イトもあるかもしれない。
その場合の欠点は、実行ファイル が単にユーザの PATH 中になかっただけの場合でも、実行の 許可がないと sudo がユーザに告げることになって、実情が わかりにくいかもしれないことである。
このフラグはデフォ ルトでは on である。
passprompt_override :
通常、passprompt オプションによって指定されたパスワード プロンプトが使用されるのは、PAM のようなシステムが用意 しているパスワードプロンプトが “Password:” という文字列 にマッチしているときだけである。
passprompt_override を セットすると、 passprompt が無条件で使われることになる。
このフラグはデフォルトでは off である。
preserve_groups :
デフォルトでは、sudo は所属グループの初期値として、変身 対象ユーザが所属しているグループのリストを設定する。
preserve_groups をセットすると、sudo を実行するユーザの 所属グループのリストが、変更されずにそのまま維持される。
とは言え、実グループ ID や実効グループ ID が変身対象 ユーザのそれに設定されることに変わりはない。
このフラグ はデフォルトでは off である。
pwfeedback :
ほかのたいていの Unix プログラムと同様、sudo はパスワードを読み込むとき、デフォルトでは、ユーザが Return (また は Enter) キーを押すまで、エコーを off にする。
この動作 にとまどうユーザが存在する。
彼らには sudo が急に反応し なくなったように見えるのだ。
pwfeedback をセットすると 、ユーザがキーを押すたびに、sudo が目に見える反応を返す ようになる。
これには、セキュリティ上の問題があることに 注意してほしい。
横で見ている人が、打ち込まれたパスワー ドの文字数を特定することができるかもしれないのだ。
このフラグはデフォルトでは off である。
requiretty :
これをセットすると、sudo が実行されるのは、ユーザが実際の tty にログインしたときだけになる。
すなわち、sudo を 実行できるのは、ログイン・セッションからだけであって、 cron(8) や cgi-bin スクリプトといった、ほかの方法を介し て実行することはできないということだ。
このフラグは、デフォルトでは off である。
root_sudo :
これをセットすると、root も sudo を実行できるようになる。
このフラグを無効にすると、ユーザがたとえば “sudo sudo /bin/sh” といったように sudo コマンドを連鎖的に使って、 ルートシェルを獲得することができなくなる。
ところで、 root_sudo が off だと、root が sudoedit まで実行できな くなることに注意してほしい。
root_sudo を無効にしても、 セキュリティが実際に向上するわけではない。このフラグが 存在しているのは、もっぱら歴史的な理由からなのだ。
この フラグはデフォルトでは on である。
rootpw :
これをセットすると、sudo はプロンプトで、起動したユーザ のパスワードではなく、root のパスワードを要求するようになる。
このフラグはデフォルトでは off である。
runaspw :
これをセットすると、sudo はプロンプトで、起動したユーザ のパスワードではなく、sudoers ファイルの runas_default オプションが定義しているユーザーの (デフォルトでは root である) パスワードを要求する。
このフラグはデフォルトで は off である。
set_home :
これがセットされているとき、sudo を -s オプション付きで 起動すると、環境変数 HOME が変身対象ユーザの (-u オプシ ョンが使用されないかぎり、それは root である) ホームディレクトリに設定される。
すなわち、 -s オプションが -H オプションを事実上兼ねることになるわけだ。
このフラグは デフォルトでは off である。
set_logname :
通常 sudo は環境変数 LOGNAME, USER, USERNAME を変身対象 ユーザの名前 (-u オプションが指定されていない場合、普通 は root) にセットする。
しかし、プログラムによっては (た とえば、 RCS リビジョンコントロールシステムがその一つだ が) ユーザが実際には誰であるかを判定するのに LOGNAME を 使用していることがあるので、
この振舞いを変更することが 望ましい場合もある。
set_logname オプションに ’!’ を付 けて否定することで、それができる。
なお env_reset オプシ ョンを無効にしていない場合、 env_keep リストの項目が set_logname による値を上書きすることになるので、注意してほしい。
このフラグはデフォルトでは on である。
setenv :
これをセットすると、ユーザがコマンドラインから env_reset オプションを無効にできるようになる。
さらに、 コマンドラインから設定する環境変数が env_check, env_delete, env_keep による制限を受けなくなる。
それ故、 そのようなやり方で変数を設定することを許可するのは、信 用できるユーザのみに限るべきだ。
このフラグはデフォルト では off である。
shell_noargs :
これがセットされているとき、sudo を引き数なしで起動すると、 sudo は -s オプションが指定されたかのように振舞う。
すなわち、root ユーザとしてシェルを実行するわけだ (シェルは、環境変数 SHELL がセットされていれば、それによっ て決まるし、セットされていなければ、sudo を起動したユー ザの /etc/passwd エントリに登録されたものになる)。
この フラグはデフォルトでは off である。
fast_glob :
通常 sudo はパス名のマッチングをするとき、glob(3) 関数 を使用して、シェル・スタイルのワイルドカード展開 (glob) を行う。
しかし、 glob(3) はファイルシステムにアクセスす るので、指定パターンによっては、作業を完了するまでに時 間がかかることがある。
必要な時にマウントするようになっ ている (つまりオートマウントの) ネットワーク・ファイル ・システムを参照するときは、とりわけ時間がかかる。
fast_glob オプションを指定すると、sudo が fnmatch(3) 関 数を使うようになるが、こちらの関数はマッチングの際にフ ァイルシステムにアクセスしない。fast_glob の欠点は、 ./ls や ../bin/ls のような相対パスに対するマッチができないことである。
このフラグはデフォルトでは off である。
stay_setuid :
通常 sudo がコマンドを実行するとき、実 UID と実効 UID は変身対象ユーザ (デフォルトでは root) のものにセットされる。
このオプションはその振舞いを変更して、sudo を起動 したユーザの UID が、そのまま実 UID として残るようにする。
言い換えると、sudo が setuid ラッパーとして動作するようになるわけだ。
プログラムを setuid で動かすと、危険 をもたらしかねないという理由から、ある種の機能を使えな いようにしているシステムでは、このオプションが役に立つかもしれない。
このオプションは、 setreuid() 関数なり setresuid() 関数なりを持っているシステムでのみ有効である。
このフラグはデフォルトでは off である。
targetpw :
これをセットすると、sudo はプロンプトで、起動したユーザ のパスワードではなく、-u オプションで指定されたユーザ ( デフォルトでは root) のパスワードを要求する。
この設定を すると、-u オプションの引き数として、 passwd データベー スに登録されていない uid が使えなくなることに注意してほしい。
このフラグはデフォルトでは off である。
tty_tickets :
これをセットすると、ユーザは tty ごとに認証をしなければならなくなる。
sudo は通常、チケットディレクトリ (訳注 :たとえば /var/run/sudo) にある、sudo を実行しているユ ーザと同じ名前のディレクトリを認証に使用する。
しかし、 このフラグが有効になっている場合は、そのディレクトリに ある、ユーザがログインしている tty に対応する名前のファイルを使用することになるのだ。
このフラグはデフォルトで は off である。
umask_override :
これをセットすると、sudo は umask を sudoers の umask オプションで指定されたとおりの値に、変更を加えることなく設定する。
このことによって、ユーザ自身の umask 値より もっと緩やかな umask 値を sudoers で指定することが可能 になる。sudo の昔の動作と同じになるわけだ。
umask_override をセットしない場合、現在の sudo は umask を、ユーザの umask 値と sudoers で指定した umask 値との ビット和に設定することになっている。
このフラグはデフォ ルトでは off である。
visiblepw :
デフォルトでは、ユーザがパスワードを入力しなければならないときに、使用しているターミナルでエコーの抑制ができなかったら、 sudo は実行を拒否するようになっている。
これに対し、 visiblepw フラグが設定されていると、パスワー ドがスクリーンに表示されてしまう場合でも、sudo はプロン プトを出して、パスワードを求める。
この動作によって、 rsh(1) は tty を割り当てないにもかかわらず、 “rsh somehost sudo ls” といった操作の実行が可能になるわけだ 。
このフラグはデフォルトでは off である。
整数 :
数値 で設定される情報です。
# 数値 の設定例
# パスワード入力失敗は3回までです。
Defaults passwd_tries = 3
|
closefrom :
sudo はコマンドを実行する前に、標準入力、標準出力、標準エラー (すなわち、ファイルディスクリプタ 0-2 である) を 除いて、オープンしたすべてのファイル・ディスクリプタを クローズする。
closefrom オプションを使用すると、0-2 以 外のどのファイル・ディスクリプタからクローズして行くか を指定することができる。
デフォルトは 3 である。
passwd_tries :
sudo が「失敗」をログに記録して終了する前に、ユーザがパスワードを入力できる回数。
デフォルトは 3。
真偽値としても使用できる整数 :
真偽値 (on/off) でも 数値でも設定される情報です。
# 真偽値 (on/off) でも 数値でも設定できる例
# パスワード入力までの時間は、30秒です。
Defaults passwd_timeout = 30
# パスワード入力までの時間切れはなくなります。
Defaults passwd_timeout = 0
# or
Defaults !passwd_timeout
|
loglinelen :
sudo 用ログファイルの一行あたりの文字数。この値は、ログファイルを見やすくするために改行する位置を決めるのに使 用される。
この値は、 syslog 経由のログファイルには影響 せず、直接ファイルにログを書き出すときのみ効果がある。
デフォルトは 80 である (改行をしないようにするには、値 を 0 にするか、頭に ’!’ を付けて、このオプションを否定 する)。
passwd_timeout :
sudo のパスワードプロンプトが時間切れになるまでの分単位の時間。
デフォルトは 5 である。これを 0 にセットすると 、パスワードプロンプトが時間切れなしになる。
timestamp_timeout :
sudo がパスワードを再び要求するようになるまでの時間を分 単位で指定する。
デフォルトでは 5 である。これを 0 にセ ットすると、毎回パスワードを要求するようになる。
0 より 小さい値にセットした場合は、ユーザのタイムスタンプが期 限切れになることがない。
ユーザが sudo -v と sudo -k を 実行することによって、タイムスタンプを自分で作ったり、 消したりできるようにしたかったら、この手を使えばよい。
umask :
コマンドを実行しているときに使用する umask 値。ユーザの umask 値をそのまま使いたかったら、’!’ を頭に付けて、こ のオプションを否定するか、0777 にセットする。
このオプションの値が 0777 以外の場合、実際に使用される umask 値は 、ユーザの umask 値と umask オプションで指定する umask 値とのビット和になる。
そのことによって、sudo がコマンド を実行するときの umask 値が、ユーザの umask 値より低く ならないようになっているわけだ。
なお、umask オプション のデフォルトの値は、0022 である。
PAM を使用しているシ ステムでは、 PAM のデフォルト設定で umask 値を指定する ことができるが、その場合は、それが sudoers で指定した値 を上書きすることに注意してほしい。
文字列 :
文字列 で設定される情報です。
# 文字列 の設定例
# パスワード入力のプロンプト表示を "パスワード:" とします。
Defaults passprompt = "パスワード:"
|
badpass_message :
ユーザが不正なパスワードを入力したときに表示するメッセージ。
insults フラグが有効になっていないかぎり、デフォ ルトは「Sorry, try again.」である。
editor :
visudo で使用できるエディタをコロン (’:’) で区切ったリスト。
visudo は、可能ならば、ユーザの EDITOR 環境変数 と一致したエディタを選択する。
それができないときは、このリストにあるエディタで、実際に存在し、かつ実行可能な 最初のエディタを使用する。
デフォルトは使用システムにお ける vi のパスである。
mailsub :
mailto ユーザに送付するメールの件名。エスケープ文字 %h はマシンのホスト名に展開される。
デフォルトは「*** SECURITY information for %h ***」。
noexec_file :
ライブラリ関数 execv(), execve(), fexecve() のダミー版 (エラーを返すだけの関数) が入っている共有ライブラリのパス。
これは、LD_PRELOAD やそれに相当するものをサポートし ているシステムで noexec 機能を実現するために使用される。
デフォルトでは /usr/local/libexec/sudo_noexec.so になっている。
passprompt :
パスワードを要求するときに使用するデフォルトのプロンプト。
-p オプションや環境変数 SUDO_PROMPT によって変更す ることができる。以下のパーセント (‘%’) エスケープが使用 できる。
- %H : ドメイン名付きのローカルホスト名に展開 (マシンのホスト名が完全修飾名か、 fqdn オプションがセットされている場合に有効)
- %h : ドメイン名なしのローカルホスト名に展開
- %p : パスワードを要求されているユーザ名に展開 (sudoersファイルの rootpw, targetpw, runaspw フラグを尊重する)
- %U : 変身対象ユーザの (デフォルトでは root) ログイン名に展開
- %u : sudo を起動するユーザのログイン名に展開
- %% : 連続した二個の % は、一個の % 文字そのものを意味する
デフォルトの値は「Password:」である。
runas_default :
コマンドラインで -u オプションが指定されていないときの、デフォルトの変身対象ユーザ。
デフォルトでは root になっている。
runas_default をセットするなら、Runas_Alias を指定するよりも前にやらなければならないことに注意する こと。
syslog_badpri :
ユーザが認証に失敗したときに使用する syslog の優先順位(priority)。
デフォルトでは alert になっている。
syslog_goodpri :
ユーザが認証に成功したときに使用する syslog の優先順位(priority)。
デフォルトでは notice になっている。
sudoers_locale :
sudoers ファイルを解析するときに使用するロケール。
ロケールの変更は、 sudoers の解釈に影響があるかもしれないので、注意してほしい。
デフォルトでは “C” になっている。
timestampdir :
sudo がタイムスタンプ・ファイルを置くディレクトリ。
デフォルトは /var/run/sudo である。
timestampowner :
タイムスタンプ・ディレクトリとそこに置かれるタイムスタンプの所有者。
デフォルトは root である。
真偽値としても使用できる文字列 :
真偽値(on/off)としても 文字列 でも設定できる情報です。
# 真偽値 (on/off) でも 文字列でも設定できる例
# sudoを実行したロギングを/var/log/sudo.logへ出力します。(syslogとは別)
Defaults logfile = "/var/log/sudo.log"
# sudoを実行したロギングは出力されません。(syslogとは別)
Defaults !logfile
|
askpass :
askpass で指定するのは、ヘルパー・プログラムの絶対パスである。
このヘルパー・プログラムは、ターミナルを利用できないときに、ユーザのパスワードを読み込むために使用する。
たとえば 、sudo が (テキストベースではなく) グラフィカルなアプリケー ションから実行されるといった場合だ。
askpass で指定されたヘ ルパー・プログラムは、渡された引き数をプロンプトとして表示し、ユーザのパスワードを標準出力に書き出すべきである。
askpass の値は、環境変数 SUDO_ASKPASS で上書きすることができる。
env_file :
env_file オプションでファイルの絶対パスを指定すると、実行するプログラムの環境として設定する変数をそのファイルに格納しておくことができる。
このファイルのエントリは VARIABLE=value か export VARIABLE=value の形でなければならない。
変数の値を シングルクォートやダブルクォートで囲んでもよい。
このファイルに含まれる変数は、env_keep や env_check のような sudo の ほかの環境設定の影響を受ける。
exempt_group :
このグループのユーザはパスワードの入力や secure_path による PATH の限定を免除されている。
このオプションはデフォルトでは セットされていない。
lecture :
sudo はパスワードプロンプトに添えて簡単な訓戒を表示することができる。
このオプションはその訓戒をいつ表示するかを決定する。以下の値が可能である。
- always : いつでも必ず訓戒を表示する
- never : 訓戒を一切表示しない。
- once : ユーザがはじめて sudo を実行したときだけ表示する。
値を指定しないと、once を指定したことになる。
頭に ’!’ を付 けて、このオプションを否定すると、値に never が使用される。
デフォルトの値は once である。
lecture_file :
標準の訓戒の代わりに使用する sudo の訓戒を書き込んだファイ ルがあるなら、 lecture_file でそのパスを指定する。
sudo はデ フォルトでは、プログラムに埋め込まれた訓戒を使用する。
listpw :
このオプションは、sudo を -l オプション付きで実行したとき、 ユーザがパスワードを要求されるのは、どんな場合かを決定する 。
以下のような値が可能である。
- all : パスワードを入力しないですむためには、sudoers ファイルの使用中のホストに対する当該ユーザのエントリの すべてに NOPASSWD タグが設定されていなければならない。
- always : ユーザは -l オプションを使用する際に必ずパスワードを入力しなければならない。
- any : パスワードを入力しないですむためには、sudoers ファイルの使用中のホストに対する当該ユーザのエントリの少なくとも一つに NOPASSWD タグが設定されていなければならない。
- never : ユーザは -l オプションを使用する際にパスワードを入力する必要がまったくない。
値を指定しないと、値は any だと見なされる。
’!’ を頭に付けて 、このオプションを否定すると、値に never が使われることになる。
デフォルトは any である。
logfile :
sudo のログファイルのパス (syslog 経由のログファイルではない)。
パスを指定すると、ファイルへのロギングが on になり、 ’!’ を頭に付けて、このオプションを否定すると、off になる。
デフォルトでは、sudo は syslog 経由でログを取る。
mailerflags :
メーラを起動するときに使用するフラグ。
デフォルトは -t になっている。
mailerpath :
警告メールの送信に使うメール・プログラムのパス。デフォルトは configure したときに見つかった sendmail のパス。
mailfrom :
警告メールやエラー・メールを送るとき、差出人として使用する アドレス。
sudo が @ 記号を解釈しないようにするため、アドレ スはダブルクォート (“) で囲むべきである。
デフォルトは、sudo を実行するユーザの名前。
mailto :
警告メールやエラー・メールを送付する宛先のアドレス。
sudo が @ 記号を解釈しないようにするため、アドレスはダブルクォート (“) で囲むべきである。
デフォルトは root になっている。
secure_path :
sudo から実行されるあらゆるコマンドが使用するパス。
sudo を 実行するユーザが、無難な環境変数 PATH を使っているかどうか 確信が持てないなら、このオプションを使用するとよいだろう。
もう一つの使用法は、「root のパス」と「一般ユーザのパス」を 別のものにしておきたい場合だ。
ユーザが exempt_group オプシ ョンで指定したグループに属していると、そのユーザは secure_path の影響を受けない。
このオプションは、デフォルト ではセットされていない。
syslog :
syslog を使ってログを取っている場合の syslog のファシリティ (syslog 経由でログを取らない場合は、’!’ を頭に付けて、この オプションを否定する)。
デフォルトは local2 になっている。
verifypw :
このオプションは、sudo を -v オプション付きで実行したとき、 ユーザがパスワードを要求されるのは、どんな場合かを決定する 。
次のような値が可能である。
- all : パスワードを入力しないですむためには、sudoers ファ イルの使用中のホストに対する当該ユーザのエントリの すべてに NOPASSWD タグが設定されていなければならない。
- always : ユーザは -v オプションを使用する際に必ずパスワードを入力しなければならない。
- any : パスワードを入力しないですむためには、sudoers ファイルの使用中のホストに対する当該ユーザのエントリの 少なくとも一つに NOPASSWD タグが設定されていなけれ ばならない。
- never : ユーザは -v オプションを使用する際にパスワードを入力する必要がまったくない。
値を指定しないと、値は all だと見なされる。’!’ を頭に付けて 、このオプションを否定すると、値に never が使われることになる。
デフォルトは all である。
真偽値としても使用できるリスト:
真偽値(on/off)としても リスト でも設定できる情報です。リストは、間にブランク(空白)を入れて列挙します。
# 真偽値 (on/off) でも リストでも設定できる例
# sudoを実行した時に使用されるユーザの環境変数のリスト
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
# sudoを実行した時にユーザの環境変数は使用されません
Defaults !env_keep
|
env_check :
変数の値に % や / が含まれる場合に、ユーザの環境から取り除かれる環境変数。
この機能は、出来のよくないプログラムに見られる printf 形式のフォーマットの脆弱性に対処するために利用できる。
このオプションの引き数は、ダブルク ォートで囲まれ、スペースで区切られたリストでもよく、ダ ブルクォートなしの単一の値でもよい。
リストは、=, +=, -=, ! 演算子を使って、それぞれ置き換えたり、追加したり 、削除したり、無効にしたりすることができる。
env_check で指定された変数は、 env_reset オプショの有効・無効にか かわらず、上記のチェックにパスすれば、環境に保存されることになる。
チェックされる環境変数のデフォルトのリスト は、root ユーザが sudo に -V オプションを付けて実行した ときに表示される。
env_delete :
env_reset オプションが無効になっているときに、ユーザの環境から取り除かれる環境変数。
このオプションの引き数は 、ダブルクォートで囲まれ、スペースで区切られたリストで もよく、ダブルクォートなしの単一の値でもよい。
リストは 、=, +=, -=, ! 演算子を使って、それぞれ置き換えたり、追 加したり、削除したり、無効にしたりすることができる。
取り除かれる環境変数のデフォルトのリストは、root ユーザが sudo に -V オプションを付けて実行したときに表示される。
留意すべきは、オペレーティングシステムには、危険をもた らしかねない変数をいかなる setuid プロセス (sudo もその 一つ) の環境からも取り除くことにしているものが多いとい うことである。
env_keep :
env_reset オプションが有効になっているときでも、ユーザの環境にそのまま保存される環境変数。
このオプションによ って、sudo から生み出されるプロセスが受け取る環境を、きめ細かく制御することが可能になる。
このオプションの引き 数は、ダブルクォートで囲まれ、スペースで区切られたリス トでもよく、ダブルクォートなしの単一の値でもよい。
リストは、 =, +=, -=, ! 演算子を使って、それぞれ置き換えたり、追加したり、削除したり、無効にしたりすることができる。
保存される変数のデフォルトのリストは、root ユーザが sudo に -V オプションを付けて実行したときに表示される。
どうでしたか?
細かく設定できるようですが、本当に必要なのは、3から5程度のパラメータでしょう。
sudoのメリットを考えたら、基本設定とロギングの設定だけでも十分かもしれませんね。
まずは、できるだけユーザの権限を絞って提供することをおすすめします。
設定によっては、何でも sudo でできるようになります。逆に、使えなくすることも可能です。
結局、sudoのメリットを生かすも殺すも設定しだいです。
コメントを投稿 :