daemon、TCP Warpper、PAM

■以下のページのDebian Squeeze版

 はじめての自宅サーバ構築 - Fedora/CentOS -
 http://kajuhome.com/server_access.shtml

■「サービス|デーモン」チェック
 Redhat系とは若干使い方が異なるようですが、debianにも「System V」系の「service」コマンドがあります。
 ※「chkconfig」や「apt-file」はデフォルトでは入っていません。

$ whereis service
service: /usr/sbin/service /usr/share/man/man8/service.8.gz
$ apropos "^service\$"
service (8)          - run a System V init script
$ apt-file search service | grep '/usr/sbin/service'"\$"
sysvinit-utils: /usr/sbin/service
$ apt-file show chkconfig
chkconfig: /sbin/chkconfig
chkconfig: /usr/share/doc/chkconfig/changelog.Debian.gz
chkconfig: /usr/share/doc/chkconfig/copyright
chkconfig: /usr/share/man/man8/chkconfig.8.gz

$ sudo service --status-all 2>&1 | grep "\[ + \]" | column
 [ + ]  apache2                  [ + ]  postfix
 [ + ]  bind9                    [ + ]  rsyslog
 [ + ]  clamav-daemon            [ + ]  snmpd
 [ + ]  clamav-freshclam         [ + ]  snort
 [ + ]  dbus                     [ + ]  ssh
 [ + ]  ntp                      [ + ]  vmware-tools
 [ + ]  openbsd-inetd

■debianのデフォルトのrunlevelは「2」です。

$ sudo grep "^id" /etc/inittab
id:2:initdefault:
$ sudo runlevel
N 2

$ sudo chkconfig --list | grep "2\:on" | wc -l
33

■postfixが入った際に削除されたexim4を例にOFF/ONします。
 ※必要になった場合は再度、起動時に稼動するよう変更します。
  debianの場合、exim4のインストール時や「dpkg-reconfigure」時に自動で行われるので、通常は変更作業は必要無い。
  インストールが伴わない場合は手動で行う。

$ sudo chkconfig --list exim4
exim4                     0:off  1:off  2:on   3:on   4:on   5:on   6:off
$ dpkg -l | grep exim4-base | sed s/"   *"/","/g
rc,exim4-base,4.72-6+squeeze2,support files for all Exim MTA (v4) packages
$ sudo chkconfig exim4 off
$ sudo chkconfig --list exim4
exim4                     0:off  1:off  2:off  3:off  4:off  5:off  6:off

$ sudo chkconfig exim4 on
$ sudo chkconfig --list exim4
exim4                     0:off  1:off  2:on   3:on   4:on   5:on   6:off

■UDPは「iptables」によってほとんど通らないのでTCPに限定してチェックします。
 ※nmapのインストールが必要。以下では「8022/tcp」がsshdの待ち受けポートの例

$ sudo nmap -sT 192.168.188.188 | grep "^[P0-9]"
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
53/tcp   open  domain
443/tcp  open  http
8022/tcp open  unknown

■「daemon.log」からデーモン名を確認
 ※指定するべきは「krb5-ftpd」では無い点に注意。。。

$ sudo sed s/".*`hostname -s` "//g /var/log/daemon.log | \
  awk -F\: '{print $1}' | sed s/"\[.*\]"//g | sort -u | column
/etc/mysql/debian-start mysqld                  snmpd
ftpd                    mysqld_safe             snmptrapd
inetd                   named                   snort
init                    ntpd

$ dpkg -l | grep ftpd | grep ^ii | awk '{print $2}'
krb5-ftpd
$ whereis ftpd
ftpd: /usr/sbin/ftpd /usr/share/man/man8/ftpd.8.gz
$ apt-file show krb5-ftpd
krb5-ftpd: /usr/sbin/ftpd
krb5-ftpd: /usr/share/doc/krb5-ftpd/changelog.Debian.gz
krb5-ftpd: /usr/share/doc/krb5-ftpd/copyright
krb5-ftpd: /usr/share/man/man8/ftpd.8.gz

■「hosts.deny」の「ALL: ALL」の動作チェック

$ sudo grep . /etc/hosts.[ad]* | sudo grep -v "^#\|^\$" /etc/hosts.[ad]*
/etc/hosts.deny:ALL: ALL
$ ftp localhost
Connected to localhost.
421 Service not available, remote server has closed connection
ftp> bye

■localhostのみ許可

$ sudo grep . /etc/hosts.[ad]* | sudo grep -v "^#\|^\$" /etc/hosts.[ad]*
/etc/hosts.allow:ftpd: 127.0.0.1
/etc/hosts.deny:ALL: ALL

$ ftp localhost
Connected to localhost.
220 vmsqueeze FTP server (Version 5.60) ready.
334 Using authentication type GSSAPI; ADAT must follow
GSSAPI accepted as authentication type
GSSAPI error major: Unspecified GSS failure.  Minor code may provide more information
GSSAPI error minor: Credentials cache file '/tmp/krb5cc_1000' not found
GSSAPI error: initializing context
GSSAPI authentication failed
Name (localhost:labunix): labunix
530 Must perform authentication before identifying USER.
Login failed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221 Goodbye.

$ ftp vmsqueeze
Connected to vmsqueeze.localdomain
421 Service not available, remote server has closed connection
ftp> bye

■ローカルネットの許可の追加
 ※「192.168.188.」からは通しません。

$ sudo grep . /etc/hosts.[ad]* | sudo grep -v "^#\|^\$" /etc/hosts.[ad]*
/etc/hosts.allow:ftpd: 127.0.0.1 192.168.72.
/etc/hosts.deny:ALL: ALL

$ ftp vmsqueeze
Connected to vmsqueeze.localdomain.
220 vmsqueeze FTP server (Version 5.60) ready.
Name (vmsqueeze:labunix): labunix
530 Must perform authentication before identifying USER.
Login failed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> bye
221 Goodbye.

$ /sbin/route -n | grep "72\.0"
192.168.72.0    192.168.188.188    255.255.255.0   UG    0      0        0 eth0
$ nslookup `hostname -f` | grep "^Address\: [0-9]"
Address: 192.168.188.177
$ ftp vmsqueeze
Connected to vmsqueeze.localdomain
421 Service not available, remote server has closed connection
ftp> bye

■「hosts.allow」にsshdの許可を追加

$ sudo grep . /etc/hosts.[ad]* | sudo grep -v "^#\|^\$" /etc/hosts.[ad]*
/etc/hosts.allow:ftpd: 127.0.0.1 192.168.72.
/etc/hosts.allow:sshd: 127.0.0.1 192.168.72. 192.168.188.
/etc/hosts.deny:ALL: ALL

■ログインを許可するユーザの制限
 ※debianでは「pam_access」が使えるよう、設定ファイルにコメントがある。

$ sudo grep "^account\|pam_access.so" /etc/pam.d/sshd
account    required     pam_nologin.so
# account  required     pam_access.so
$ sudo vim /etc/pam.d/sshd
$ sudo grep -B 2 "pam_access.so" /etc/pam.d/sshd
# Uncomment and edit /etc/security/access.conf if you need to set complex
# access limits that are hard to express in sshd_config.
account  required     pam_access.so

■「access.conf」の設定の方法はコメントを読んで下さい。。。
 ※debianではデフォルトでは、wheelグループは無くsudoグループがあります。

$ sudo grep "^sudo\|^wheel\|^`whoami`" /etc/[pg]*[dp] | awk -F\: '{print $1":"$2}'
/etc/group:sudo
/etc/group:labunix
/etc/passwd:labunix
$ sudo grep -v "^#\|^\$" /etc/security/access.conf
-:ALL EXCEPT sudo labunix:ALL

■「login.defs」はマニュアルに従い、変更しない。
 ※「/etc/pam.d/su」にも記載がある。

$ grep -v "^#\|^\$"  /etc/login.defs | grep ^SU
SU_NAME         su
$ grep "SU_WHEEL" /etc/login.defs
#SU_WHEEL_ONLY

$ man login.defs 2>/dev/null | nl | grep "^ *6[0-3]" | sed s/" *6[0-9] *\t *"//g | \
  sed s/"  *"/" "/g | sed s/""/"関連"/
passwd(1), su(1) などのプログラムは、もはや /etc/login.defs を用いない。 対応する PAM
の設定ファイルを調べるようにしてほしい。
関連
login(1), passwd(1), su(1), passwd(5), shadow(5), pam(8)

■デフォルトの設定の確認

$ sudo grep -B 1 "pam_wheel.so\$" /etc/pam.d/su
# (Replaces the `SU_WHEEL_ONLY' option from login.defs)
# auth       required   pam_wheel.so

$ sudo grep "# auth" /etc/pam.d/su
# auth       required   pam_wheel.so
# auth       sufficient pam_wheel.so trust
# auth       required   pam_wheel.so deny group=nosu

$ sudo grep "^auth" /etc/pam.d/su
auth       sufficient pam_rootok.so

■「sudo」か「labunix」グループに所属したユーザのみ「su」出来る。

$ sudo grep ^auth /etc/pam.d/su
auth       sufficient pam_rootok.so group=labunix
auth       required   pam_wheel.so
$ su
パスワード:
$ su postgres
パスワード:
$ su
パスワード:
su: 拒否されたパーミッション

■「labunix」ユーザに「sudo」グループを追加

$ sudo usermod -G sudo labunix
$ id labunix | sed s/"\,"/"\n"/g | grep sudo
27(sudo)

■「su」出来るのは「sudo」グループのみに変更
 ※「sudo su」が出来るのは、「root」が「su」出来る為。

$ sudo grep -v "^#\|^\$" /etc/security/access.conf
-:ALL EXCEPT sudo
$ sudo grep sudo /etc/pam.d/su
auth       required   pam_wheel.so group=sudo
$ su
パスワード:
# exit

■「sudo」グループから抜ける。
 ※「usemod」の際に「-a」オプションが無いと、ほかの権限が無くなるのでご注意を。

$ id -G | sed s/" "/","/g
1000,24,25,29,30,44,46
$ sudo usermod -G sudo labunix
$ id -G | sed s/" "/","/g
1000,27
$ sudo usermod -G "1000,24,25,29,30,44,46" labunix
$ id -G labunix | sed s/" "/","/g
1000,24,25,29,30,44,46
$ sudo usermod -a -G sudo labunix
$ id -G labunix | sed s/" "/","/g
1000,24,25,27,29,30,44,46