タグ・アーカイブ: sudo

nullpopopoが動いている使える.netのVPSサーバをアップデートしました。
アップデート後は以下のとおりです。

$ uname -a
Linux hydra.bizcube.info 2.6.9-023stab046.2-smp #1 SMP Mon Dec 10 15:04:55 MSK 2007 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/redhat-release
CentOS release 5.2 (Final)

しかし、カーネルとphpはexcludeしています。

$ grep exclude /etc/yum.conf
exclude=kernel* httpd* php*

とりあえずweb/mail/db/dnsとも正常稼動しているのですが、sudoコマンドを叩くと

$ sudo ls
audit_log_user_command(): Connection refused    ← ココ
anon_ftp  cgi-bin  dat       error_docs   httpdocs              httpsdocs  pd       src         subdomains  web_users
bin       conf     deny.lst  favicon.ico  httpdocs.orig.tar.gz  logs       private  statistics  tmp

というように、「audit_log_user_command」関数でエラーが出てしまったのです。

sudo audit_log_user_command でググってみたらココ

Name        : sudo
Product     : Fedora 8
Version     : 1.6.9p4
Release     : 3.fc8
URL         : http://www.courtesan.com/sudo/
(中略)

--------------------------------------------------------------------------------
ChangeLog:

* Mon Jan  7 2008 Peter Vrabec <[EMAIL PROTECTED]> 1.6.9p4-3
- fix complains about audit_log_user_command(): Connection
  refused (#401201)
--------------------------------------------------------------------------------

と書いてあるので、 RPM Search から sudo-1.6.9p4 で検索し、ココからたどったリンクから sudo-1.6.9p4-6.fc8.i386.rpm をダウンロード。

$ wget ftp://ftp.univie.ac.at/systems/linux/fedora/updates/8/i386/sudo-1.6.9p4-6.fc8.i386.rpm

そしていざインストールをしようとしたら

$ rpm --test -Uvh sudo-1.6.9p4-6.fc8.i386.rpm
警告: sudo-1.6.9p4-6.fc8.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 4f2a6fd2
エラー: 依存性の欠如:
        libcap.so.1 は sudo-1.6.9p4-6.fc8.i386 に必要とされています

依存関係のエラーが出てしまった!

では libcap.so.1 が何のパッケージに含まれているか?そしてそもそも libcap.so.1 は今までインストールされていなかったのか?と思い、調べてみました。

$ locate libcap.so.1
/lib64/libcap.so.1
/lib64/libcap.so.1.10

libcap.so.1 はインストールされています。では、どのパッケージに含まれているかを見てみましょう。

$ rpm -qf /lib64/libcap.so.1
libcap-1.10-26

$ rpm -ql libcap
/lib64/libcap.so.1
/lib64/libcap.so.1.10
/usr/sbin/execcap
/usr/sbin/getpcaps
/usr/sbin/setpcaps
/usr/sbin/sucap
/usr/share/doc/libcap-1.10
/usr/share/doc/libcap-1.10/capability.notes
/usr/share/doc/libcap-1.10/capfaq-0.2.txt

しかし、libcap パッケージに依存するパッケージは山のようにあります。

GConf2 ImageMagick ImageMagick-perl MAKEDEV SSHTerm SysVinit alsa-lib apr apr-devel apr-util apr-util-devel audit-libs-python authconfig autoconf autoconf213 automake automake17 avahi avahi-glib awstats bind bind-libs bind-utils caching-nameserver cairo chkfontpath coreutils courier-imap cpan2rpm cracklib cryptsetup-luks curl curl-devel cvs cyrus-sasl cyrus-sasl-devel dbus dbus-glib dbus-python device-mapper dhclient distcache distcache-devel docbook-dtds docbook-style-xsl drweb-base drweb-daemon drweb-qmail drweb-updater e2fsprogs e2fsprogs-devel e2fsprogs-libs esound fetchmail findutils finger-server fontconfig fontconfig-devel gcc-java gd gd-devel gettext gettext-devel ghostscript ghostscript-fonts gnome-keyring gnome-mount gnome-vfs2 gnupg gtk2 hal hicolor-icon-theme httpd httpd-devel hwdata initscripts kbd krb5-devel krb5-libs libX11-devel libXdmcp-devel libXft libXpm-devel libbonoboui libc-client libgcj libgcj-devel libglade2 libgnome libgnomecanvas libgnomeui libgsf libnotify librsvg2 libselinux libselinux-devel libselinux-python libsemanage libtool libuser libwmf libwnck libxml2-devel libxml2-python libxslt-devel logrotate lsof lynx m2crypto mailman man mcstrans mesa-libGL mesa-libGL-devel mod_perl mod_python mod_ssl module-init-tools munin-node mysql mysql-server net-snmp net-snmp-devel net-snmp-libs net-snmp-utils net-tools newt newt-devel nmap notification-daemon nscd ntp ntsysv openjade openldap openldap-devel opensp openssh openssh-clients openssh-server openssl openssl-devel openssl-perl openssl097a pam pam-devel pango passivetex passwd pciutils perl-Authen-SASL perl-DBD-MySQL perl-GSSAPI perl-IO-Socket-SSL perl-Net-Jabber perl-Net-SSLeay perl-Net-XMPP perl-SOAP-Lite perl-XML-Stream php php-cli php-imap php-mysql php-sqlite2 php5-ioncube-loader pm-utils policycoreutils portmap postgresql-libs psa psa-api psa-api-rpc psa-appvault-advancedpoll psa-appvault-anyinventory psa-appvault-autoindex psa-appvault-b2evolution psa-appvault-bbclone psa-appvault-brim psa-appvault-coppermine psa-appvault-cslh psa-appvault-docfaq psa-appvault-drupal psa-appvault-egroupware psa-appvault-gallery psa-appvault-geeklog psa-appvault-gtchat psa-appvault-joomla psa-appvault-mambo psa-appvault-mantis psa-appvault-mediawiki psa-appvault-merchant psa-appvault-moodle psa-appvault-myorgbook psa-appvault-noahclass psa-appvault-openbiblio psa-appvault-oscommerce psa-appvault-owl psa-appvault-phpads psa-appvault-phpbb psa-appvault-phpbook psa-appvault-phpbugtracker psa-appvault-phpdig psa-appvault-phpmoney psa-appvault-phpmyfamily psa-appvault-phpmyvisites psa-appvault-phpsurveyor psa-appvault-phpwebsite psa-appvault-phpwiki psa-appvault-plog psa-appvault-pmachinefree psa-appvault-postnuke psa-appvault-serendipity psa-appvault-siteframe psa-appvault-smf psa-appvault-tellme psa-appvault-tikiwiki psa-appvault-tutos psa-appvault-typo3 psa-appvault-uebimiau psa-appvault-webcalendar psa-appvault-webshopmanager psa-appvault-wordpress psa-appvault-xoops psa-appvault-xrms psa-autoinstaller psa-awstats-configurator psa-backup-manager psa-backup-manager-vz psa-courier-imap-add psa-fileserver psa-firewall psa-horde psa-hotfix3 psa-hotfix4 psa-imp psa-ingo psa-kav psa-kronolith psa-libpam-plesk psa-locale-ja-JP psa-mailman-configurator psa-manual-custom-skin-guide psa-migration-manager psa-mimp psa-mnemo psa-mod-fcgid-configurator psa-mod_fcgid psa-passwd psa-php5-configurator psa-proftpd psa-proftpd-xinetd psa-qmail psa-qmail-rblsmtpd psa-rubyrails-configurator psa-sbm3 psa-spamassassin psa-turba psa-updates psa-vpn psa-watchdog psmisc python python-devel python-elementtree python-iniparse python-sqlite python-urlgrabber quota rhpl rpm rpm-build rpm-devel rpm-libs rpm-python ruby ruby-actionmailer ruby-actionpack ruby-actionwebservice ruby-activerecord ruby-activesupport ruby-devel ruby-fcgi ruby-irb ruby-libs ruby-mysql ruby-rails ruby-rake samba samba-client samba-common samba-swat sb-publish screen sendmail sendmail-cf sendmail-devel sendmail-doc setuptool sgml-common shadow-utils spamassassin squid stunnel sudo sw-libxml2-python sysklogd sysstat talk-server tar tcpdump tcsh tet
ex tetex-latex tmpwatch udev urw-fonts usermode util-linux vim-enhanced vim-minimal vixie-cron vzdev vzdummy-glibc w3m webalizer wget which xinetd xml-common xmltex xmlto xorg-x11-proto-devel xorg-x11-xfs yum yum-downloadonly yum-fastestmirror yum-metadata-parser yum-utils

というわけで、sudo本体やlibcapをアップデートするよりは、sudoのバージョンを下げるのが懸命といえます。

またまた RPM Search からパッケージを探します。ここでは、元のバージョンより古いsudoのパッケージを持ってきます。今日アップデートしたバージョンのsudoはココで確認します。

$ grep sudo /var/log/yum.log
Jul 01 08:48:45 Updated: sudo.x86_64 1.6.8p12-12.el5

$ wget ftp://ftp.uni-bayreuth.de/pub/redhat.com/fedora/linux/core/updates/3/x86_64/sudo-1.6.7p5-30.3.x86_64.rpm
(nullpopopoが動いているサーバは64bitマシンなのでこのパッケージをもってきました。普通の32bitマシンの場合、i386なパッケージをもってきましょう)

そして、一度sudoをアンインストールしてから、今もってきたバージョンのsudoをインストールします。

$ sudo yum remove sudo
audit_log_user_command(): Connection refused
Loading "downloadonly" plugin
Loading "fastestmirror" plugin
Setting up Remove Process
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
 * addons: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
base                      100% |=========================| 1.1 kB    00:00
updates                   100% |=========================|  951 B    00:00
addons                    100% |=========================|  951 B    00:00
extras                    100% |=========================| 1.1 kB    00:00
Excluding Packages in global exclude list
Finished
Resolving Dependencies
--> Running transaction check
---> Package sudo.x86_64 0:1.6.8p12-12.el5 set to be erased
--> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Removing:
 sudo                    x86_64     1.6.8p12-12.el5  installed         472 k

Transaction Summary
=============================================================================
Install      0 Package(s)
Update       0 Package(s)
Remove       1 Package(s)

Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing   : sudo                         ######################### [1/1]
warning: /etc/sudoers saved as /etc/sudoers.rpmsave

Removed: sudo.x86_64 0:1.6.8p12-12.el5
Complete!

そしてインストールです。

# rpm --test -ivh sudo-1.6.7p5-30.3.x86_64.rpm
warning: sudo-1.6.7p5-30.3.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
Preparing...                ########################################### [100%]

# rpm -ivh sudo-1.6.7p5-30.3.x86_64.rpm
warning: sudo-1.6.7p5-30.3.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
Preparing...                ########################################### [100%]
   1:sudo                   ########################################### [100%]

そして、sudoコマンドでエラーが出ないことを確認します。

$ sudo yum check-update
Loading "downloadonly" plugin
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
 * addons: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
base                      100% |=========================| 1.1 kB    00:00
updates                   100% |=========================|  951 B    00:00
addons                    100% |=========================|  951 B    00:00
extras                    100% |=========================| 1.1 kB    00:00
Excluding Packages in global exclude list
Finished

sudo.x86_64                              1.6.8p12-12.el5        base

また、今後sudoのアップデートがされないように、excludeします。

$ cp -p /etc/yum.conf /etc/yum.conf.20080701
$ sudo vi /etc/yum.conf

ここを
exclude=kernel* httpd* php*

こうする
exclude=kernel* httpd* php* sudo*

再度yum check-updateします。

$ sudo yum check-update
Loading "downloadonly" plugin
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
 * addons: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
base                      100% |=========================| 1.1 kB    00:00
updates                   100% |=========================|  951 B    00:00
addons                    100% |=========================|  951 B    00:00
extras                    100% |=========================| 1.1 kB    00:00
Excluding Packages in global exclude list
Finished

sudoパッケージがexcludeされました。

以上で、sudoパッケージのダウングレードができました。
ね、簡単でしょ?

sudoを使ってると、使うたびに /var/log/messages へ
ログが吐き出されます。これでいいっちゃーいいのですが

1) sudoのログを別にとって、監査証跡にしたい
  (auditでもいい気がするが)

2) 実は /var/log/messages にsudoのログが吐かれるのは生理的にウザい

というわけで、sudoのログを分離することにします。

■■ sudoのログを取る

ここを見て、このとーりにやればできます。ただし、これだけだと、 /var/log/sudo.log にsudoに関するログが出力されるのはいいのですが、 /var/log/messages の出力がなくなるわけではありません。

■■ syslog.conf でsudoのログに関する設定

前の項では、local1でsudo.logをとる設定をしました(お手本サイトではlocal3と書いてありましたが、local0からlocal7まで、あいているものなら何でもよいです)。今度は、syslog.confで

1) /var/log/messagesにlocal1のログを吐かない
2) local1のログを /var/log/sudologとして吐き出す

という設定をします。

■ visudoコマンドでログに関する記述をする

sh-3.00# visudo

### 末尾に以下を追記
Defaults syslog=local1

■ syslog.conf修正

sh-3.00# cd /etc/
sh-3.00# cp -p syslog.conf syslog.conf.orig
sh-3.00# vi syslog.conf

ここを
local7.*                                                /var/log/boot.log

こうする
local1.*                                                /var/log/sudolog
local7.*                                                /var/log/boot.log

ここを
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

こうする
#*.info;mail.none;authpriv.none;cron.none               /var/log/messages
*.info;mail.none;authpriv.none;cron.none;local1.none    /var/log/messages

■■ 反映

sh-3.00# /etc/init.d/syslog restart
Shutting down kernel logger:                              [  OK  ]
Shutting down system logger:                            [  OK  ]
Starting system logger:                                     [  OK  ]
Starting kernel logger:                                       [  OK  ]

■■ 確認

sh-3.00$ sudo tail /var/log/sudolog
Jan  8 23:39:54 intra1 sudo:   shasta : TTY=pts/1 ; PWD=/home/shasta ; USER=root ; COMMAND=/usr/bin/tail /var/log/sudolog

sh-3.00# grep sudo /var/log/messages
※ 何も出力されていないこと

以上で設定は完了です。

※ 余談ですが・・・

以前、誤って syslog.conf で
*.info;mail.none;authpriv.none;cron.none;local1.none    /var/log/messages
とするべきところを
*.info;mail.none;authpriv.none;cron.none;sudo.none    /var/log/messages
としてしまい、一切のsyslog(/var/log/messages)が出力されなかったことがあります。。。その他のアプリケーションでエラーログが出て「あー俺バカだなー。こんな凡ミスしてらー」と気が付くことはあっても、そもそものsyslogが出力されないと、全く気が付く術がありません。この時は、コンソールに流れるメッセージで気が付きましたが、手元にないサーバだったら、きっとハマってたかもです。。。