ホーム » 「systemd」タグがついた投稿
タグアーカイブ: systemd
fetchmail daemon が勝手に起動
自宅サーバでは、丹南ケーブルの自分宛の spam だらけのメールを捨てるために、夜中に fetchmail を起動するようにしている。
状況
しかし、最近 「別の fetchmail が動いているのでエラー」が発生している。確認をすると、自分の ID の fetchmail が daemon にて動いている。
fetchmail --nodetach --daemon 300
よくよく調べると login 時に、 “systemctl –user start fetchmail.service” にて起動される様子。
対応
システム全体の systemctl –user での起動は、/etc/systemd/user/default.target.wants にて管理されていて、以下のようなリンクが張られている。
fetchmail.service -> /usr/lib/systemd/user/fetchmail.service
ということで、以下のコマンドで勝手に起動される fetchmail を抑止する。
$ cd /etc/systemd/user/default.target.wants $ sudo rm fetchmail.service
正しい systemd での設定方法
今回は、こういう力任せの方法をとったけど、こちらの資料を見ると、以下のやり方が正しい方法っぽいな。試しに、リンクを元に戻して下記コマンドを実行すると、リンクを消してくれていた。
$ sudo systemctl --global disable fetchmail.service
“~/.config/systemd/user/*” にユーザ独自にサービスを登録するのなら、”systemctl –user enable oooo.service” を実行する。
“/etc/systemd/user/default.target.wants” を変更するなら “systemctl –global enable(or disable) oooo.service” を実行する。
ネットワークサービスとポートスキャン
外部からネットワーク接続を受けて、どういった処理を実行するようになっているのかを知るための方法を説明する。
ポート番号
ネットワーク通信では、通信する相手を指定するために IP アドレスが用いられるが、サーバでは、複数のプログラムが動いており、どのプログラムと接続するのかを指定するには、ポート番号を用いる。
IPアドレスを電話番号に例えるならば、ポート番号は内線電話番号に相当する。
特に、サーバではクライアントからの通信を待つために、このサービスならばこのポート番号を使うという標準番号が決まっている。
SSH = 22 # リモート接続(暗号化) TELNET = 23 # リモート接続 SMTP = 25 # メール送信 DNS = 53 # DNSサービス HTTP = 80 # Web サーバ POP = 109,110 # メール受信 IMAP = 143 # メール受信 HTTPS = 443 # Web サービス(暗号化) SMTPS = 465 # メール送信(暗号化) IMAPS = 993 # メール受信(暗号化) POPS = 995 # メール受信(暗号化)
ネットワークサービス
サーバでは、クライアントからの接続の受信を待つために、あらかじめプログラムを起動しておく必要がある。
こういうサーバプログラムは、Linux の世界では デーモン と呼ぶことも多い。
ネットワークサービスを起動する方式には、いくつかの方法がある。
スーパーサーバを使う場合
ネットワーク処理のプログラムは、複雑な処理を行うためそのプログラムを起動しておくと、メモリを大量に使用する。古いコンピュータでは、処理速度の低下となるため、利用頻度の低いサーバは、汎用的なサーバを起動しておき、必要に応じてプログラムを起動する。この方法には、inetd とか xinetd が用いられる。
$ vi /etc/inetd.conf echo stream tcp nowait tsaitoh コマンド名
上記の例では、echo=7番ポート に tcp で接続すると、ユーザ名 tsaitoh の権限で、コマンド名を実行してくれる。
デーモンを起動しておく場合
Linux では ランレベル という状態が決められている。
- シングルユーザモード(S) – 管理者が作業中で他のネットワーク接続とかを受け付けない状態
- システム停止(0) – 他の状態からシステム停止に移るための仮想的なランレベル
- マルチユーザモード(2) – 複数のユーザの接続ができる状態
- GUI環境付きのマルチユーザモード(5) – X11ディスプレイマネージャが動く状態
((( /etc/inittab の中に以下の記載がある ))) $ cat /etc/inittab : # The default runlevel. id:2:initdefault: : $ runlevel # 現在のランレベルを確認する方法 N 5
sysv-rc 方式
Linux では、ランレベルを変更する init コマンド(init 0 を実行すると、システムを停止できる)を実行すると、
- /etc/rc移行元ランレベル.d 配下のKで始まるプログラムをファイル名順に実行する。
- /etc/rc移行先ランレベル.d 配下のSで始まるプログラムをファイル名順に実行する。
$ ls /etc/rc2.d K01aprx S17sudo K01onedrive S17unattended-upgrades README S17uuidd S01lvm2-lvmpolld S18acpid S01pulseaudio-enable-autospawn S18amavis S14nfs-common $ sudo /etc/init.d/apache2 start # apache2のサーバ起動 $ sudo /etc/init.d/apache2 stop # 停止 $ sudo /etc/init.d/apache2 restart # 再起動
systemd 方式
上記の sysv-rc 方式は、プログラムの起動スクリプトが shell で書かれているので、(システムが単純な頃は)メンテナンスが容易だったが、(システムが複雑になると)起動処理に時間がかかるのが問題となった。このため、新しい Linux では、systemd というプログラムでサーバを起動する方式にかわった。
$ ls /etc/systemd journald.conf network pstore.conf sleep.conf system.conf user logind.conf networkd.conf resolved.conf system timesyncd.conf user.conf $ sudo systemctl list-units # systemd のユニット一覧 $ sudo systemctl list-sockets # 使用中のソケット一覧 $ sudo systemctl status apache2 # systemd で起動している特定のサーバの状態確認 $ sudo systemctl start apache2 # systemd でサーバ起動 $ sudo systemctl stop apache2 # systemd でサーバ停止 $ sudo systemctl restart apache2 # systemd でサーバ再起動
起動中のプログラムの確認
システムが通常状態で起動しているプログラムを確認するには、ps ax を用いる。
$ ps ax # a 全プロセス表示 x 端末を持たないプロセスも表示 PID TTY STAT TIME COMMAND 1 ? Ss 2:57 /sbin/init 2 ? S 0:00 [kthreadd] : 2229038 ? S 0:03 /usr/sbin/apache2 -k start :
PIDがプロセス番号、STATは、S:処理待ち状態、R:実行状態、TIME欄は、のべ実行時間を表す。
各プロセスの親プロセスと子プロセスの関係が知りたい場合には、pstree コマンドを用いる。
$ pstree systemd-+-/usr/sbin/amavi---2*[/usr/sbin/amavi] |-/usr/sbin/apach---11*[/usr/sbin/apach] |-ModemManager---2*[{ModemManager}] |-NetworkManager---2*[{NetworkManager}]
ここで、見たことのないプログラムが動いている様なら、システムの進入を受けた可能性を疑わないといけない。
ネットワーク通信で受信待ちのプログラムの確認
Linuxで開いているポートを確認するためには、netstat コマンドを用いる。
$ sudo netstat -ltup4 # -l Listenポート、-t TCP、-u UDP、-p ポートを開いている、-4 IPv4 稼働中のインターネット接続 (サーバのみ) Proto 受信-Q 送信-Q 内部アドレス 外部アドレス 状態 PID/Program name tcp 0 0 localhost:3551 0.0.0.0:* LISTEN 841/apcupsd tcp 0 0 0.0.0.0:imaps 0.0.0.0:* LISTEN 418280/dovecot :
nmap でポートスキャン
netstat コマンドは、対象コンピュータを使っている時には有効だが、他のコンピュータを調べるには、ポートスキャン専用の nmap を使うのが一般的。
ポートスキャンとは、相手のコンピュータに接続するポート番号を変更しながら、通信可能か調べること。
$ sudo nmap localhost Starting Nmap 7.80 ( https://nmap.org ) at 2020-02-17 14:45 JST Nmap scan report for localhost (127.0.0.1) Host is up (0.0000090s latency). Other addresses for localhost (not scanned): ::1 Not shown: 982 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp :
nmap で調べるための様々なオプション
$ sudo nmap -A localhost # OSなどを調べる $ sudo nmap -p 1-1023 localhost # 1〜1023 までのポート番号を調べる $ sudo nmap -sU localhost # UDPのポートスキャン $ sudo nmap -O localhost # OSの検出
攻撃を受けているのであれば、wireshark などのパケットキャプチャを使って、パケットの中身を調べる必要がある。