■以下のページの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
$ sudo vim /etc/pam.d/sshd
$ sudo grep -B 2 "pam_access.so" /etc/pam.d/sshd
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
$ 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
$ sudo grep "# auth" /etc/pam.d/su
$ 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
パスワード:
■「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