Browse Month: September 2011

sudo するときに sbin にパスを設定する方法

CentOS 5.x で、次のように sudo コマンドを実行すると、次のようなエラーがでますよね。


$ sudo service httpd restart
sudo: service: command not found

これは、当然ながら /sbin にパスが通っていないからです。
PATH を見てみると、次のような感じになっています。ちなみに sudo する前の通常ユーザ naoya のシェルは bash で .bashrc などはデフォルトのまま何も変更していません。


$ sudo sh -c 'echo $PATH'
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/naoya/bin

この PATH に、/sbin や /usr/sbin を追加するには、/etc/sudoers に次の内容を追加します。


$ sudo /usr/sbin/visudo
--- sudoers-org 2011-05-09 00:19:09.000000000 +0900
+++ sudoers 2011-09-27 22:50:50.000000000 +0900
@@ -48,6 +48,7 @@
Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification
+Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

#
# Disable "ssh hostname sudo ", because it will show the password in clear.
@@ -61,6 +62,7 @@
LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
+ PATH \
_XKB_CHARSET XAUTHORITY"

## Next comes the main part: which users can run what software on

この設定を追加したあと、再度確認すると /sbin と /usr/sbin が追加されることが分かると思います。

$ sudo sh -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin

@komagata さんの話によると、Debian ではデフォルトで sbin 系がパスに追加されている様子なので、CentOS だといささか不便だったようです。

これで、また一つ sudo を利用できますね!

Special Thanks to @komagata!

CentOS 5 / Scientific Linux 5 のセキュリティアップデートの早さを比較してみました

Linux のディストリビューションを比較するとき、セキュリティアップデートの早さも一つの選択肢にになると思っています。
そこで、RHEL 5 がベースとなっている二つのディストリビューション CentOS 5 / Scientific Linux 5 のセキュリティアップデート間隔の早さを調査してみました。

まずは、RHEL 5 のセキュリティアップデート情報は、Red Hat Enterprise Linux (v.5 server) Security Advisories に公開されています。
9/25 の執筆時点で、最新のセキュリティアップデートの 5 件は、次のようになっています。

そして、比較対象の CentOS 5 / Scientific Linux 5 のセキュリティアップデートが、 RHEL5 からのセキュリティアップデートと比較して、どのくらいあとにリリースされたのか調べてみます。
まずは、CentOS 5。CentOS 5 のセキュリティアップデート情報は、centos-announce から調べてみました。なお、ここでは CentOS 5.7 のリリースは含まれていません。
CentOS 5 では、FASTTRACK というアップデートで、いっきにまとめてセキュリティアップデートが行われているようでした。
また、ご存じのとおり CentOS 5.7 がリリースされるまでの間、Continuous Release (CR) repository (AdditionalResources/Repositories/CR – CentOS Wiki) が用意されて、そのリポジトリでセキュリティアップデートが提供される体制になっていました。これについては、CentOS の次のリリースの間際のために用意されたリポジトリのようです。
例えば、httpd のアップデートタイミングは、次のようになっています。
次に、Scientific Linux 5 のセキュリティアップデート情報をチェックしてみます。Scientific Linux 5 のセキュリティアップデート情報は、Archives of SCIENTIFIC-LINUX-ERRATA@LISTSERV.FNAL.GOV のメーリングリストから確認することができます。
同じく 9/25 の執筆時点で、最新のセキュリティアップデートの 5 件は、次のようになっています。
CentOS 5 / Scientific Linux 5 のセキュリティアップデートを比較すると、圧倒的に Scientific Linux の方がセキュリティアップデートが提供されるのが早いということになりますね。

yum でパッケージをダウングレードする方法

すこし前まで yum でパッケージをダウングレードしたい場合、yum allogdowngrade というプラグインをインストールする必要がありました。

しかし、今日現在の yum では、downgrade サブコマンドが定義されています。

CentOS 5.6 x86_64 yum 3.2.22 では、次のようにするだけでパッケージをダウングレードすることができます。


# yum downgrade < パッケージ名>

パッケージ名には、必ずバージョン番号を含めるようにします。例えば、カーネルをダウングレードしたい場合は、次のようにします。

# yum downgrade kernel-2.6.18-238.9.1

yum を使えると、とても簡単にパッケージをダウングレードできるので、パッケージをアップデートしたあとまれに問題が起こることもあるので、とても便利ですね。

cpanm を使って perl の環境を整えてみた

OSX Lion には、perl v5.12.3 がすでにインストールされているので perl モジュールをインストールする環境で cpanm を使ってみたという話です。
基本的には、方針は、次のとおりです。

  • /usr ディレクトリにはインストールしない
  • 自分の $HOME ディレクトリ以下にインストールして、perl は OSX Lion 付属のものを使いたい(将来的に perl のバージョンが混在する可能性があるときは perlbrew を使いたい)

まず、cpanm をインストールします。

$ brew install cpanminus

次に、$HOME ディレクトリに perl モジュールをインストールディレクトリを作ります。

$ mkdir $HOME/.perl-extlib

.zshrc に、次の設定をします。

export PERL_CPANM_OPT="--local-lib=$HOME/.perl-extlib"
export PERL5LIB="$HOME/.perl-extlib/lib/perl5:$PERL5LIB"

この状態で、cpanm < モジュール> とすれば、$HOME.perl-extlib 以下にインストールされて、かつ使えるようになります。
これで毎回 root 権限で perl モジュールをインストールしなくても使える環境になって、とてもかなり便利になりました。

僕は、実際には $HOME 以下は FileVault で暗号化しているため、$HOME 以下にはあまりファイルを置かないようにしていて、/Users/Shared 以下において $HOME 上から symlink を張って利用しています。

どんなツールでも、いつでもすぐに手軽に使える環境を整えておくのは、重要なことだと思います。