20210122のLinuxに関する記事は7件です。

terminals database is inaccessibleを解決した時のメモ

問題の概要

とあるDockerコンテナ内でclearコマンドを使ったら

terminals database is inaccessible

が出ました。コンテナはDebianベースの環境です。

解決法

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

$ apt install ncurses-term

次に、~/.profileにterminfo関連の環境変数を設定します。

~/.profile
export TERMINFO=/usr/share/terminfo
export TERM=xterm+256color

編集後はsource ~/.profileで変更を適用します。

TERMINFOにはterminfoファイルのあるパスを、TERMにはその中にあるterminfoファイルを指定します。指定すべき値は環境によって異なる場合があると思います。上記の例ではxterm+256colorのパスは/usr/share/terminfo/x/xterm+256colorになります。

原因

エラーが出ている状態でinfocmpコマンドを実行すると、下記に示すterminfoが見つからないというようなエラーが出ます。

$ infocmp
infocmp: couldn't open terminfo file xterm-256color.

これが原因です。つまり、terminfoを見つけらるようにすれば解決するということです。

参考文献

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxって?

はじめに

Linuxの知識が乏しかったので自分用にまとめました。後半でパーミッション(権限)に関して詳しく書いています。

Linuxとは

コンピューターを動かすのに必要なソフトウェア(OS)。Linus Torvalds氏によって開発されたPC-UNIXの一種。Linux自体はオープンソースだが、実際は企業や団体が独自のツールやサポートなどのサービスを付け加えて、パッケージを作っている。これをディストリビューション(配布形態)という。有名なDebian系のUbuntu、RedHat系のCentOSなどがある。

系統図.png
※代表的なOSのみ記載。

参考:https://eng-entrance.com/unix_linux

Linuxの主なコマンド

リダイレクト

標準入出力の入出力先を変更する機能

コマンド > sample.txt

>・・・ 上書き保存
>>・・・ 追加保存

パイプ

複数のコマンドを組み合わせる機能。コマンドとコマンドをパイプ|で繋ぐ。

入力

ls / | grep sr

grep srは引き渡された内容の中からsrという文字を含むディレクトリを検索する。

出力

srv
usr

エイリアス

//エイリアス作成
alias <エイリアス名> = '<実際のコマンド>'
alias la ='ls -a'   //例

//エイリアス削除
unalias la          //上記の例の場合

リンクを作成

lnコマンド(Link)コマンドは、ファイルやディレクトリに対するリンク(リンクファイル)を作る。リンクにはシンボリックリンクとハードリンクの2種類がある。

ln -s /home/shiori/sample.txt sample

-s ・・・シンボリックリンク
なし ・・・ハードリンク

シンボリックリンク → ファイルへの参照

・リンクを削除しても元のファイルには影響がない
・本体を削除するとリンクが切れる

ハードリンク → ファイルの実態への参照

・通常のファイルの実態とその名前が1:1の関係
・ハードリンクを作ると1つのファイルを2つの名前で参照できる

コマンドの種類を調べる

type <コマンド名>

cdコマンドの場合

[○○○○○@localhost ~]$type cd
cdはシェル組み込み関数です

touchコマンドの場合

[○○○○○@localhost ~]$type touch
touchはハッシュされています

aliasで指定していた場合

[○○○○○@localhost ~]$type la
la は 'ls -a'のエイリアスです

パーミッション(権限)

ファイルやディレクトリに対してユーザーやグループが持つ権利のこと。保護モード、許可属性、アクセス権限という。パーミッションには読み込み、書き込み、実行3つの属性がある。それぞれに可か不可を設定する。(ディレクトリの移動や検索なども含む)

入力

[○○○○○@localhost ~]$ls -l

出力
permission.png

出力結果の詳細(ファイルの種類とパーミッション)
許可.png
左端のブロックの
・最初の1文字がファイル種類
・残りの9文字がパーミッション
・数字がハードリンクの数
を示している。
青枠部分の先頭行を例にとるとrwxrwxr-xは更に3文字づつ分けられ、
・1~3文字目までのrwxはUserの設定
・4~6文字目までのrwxはGroupの設定
・7~9文字目までのr-xはOtherの設定
を示している。この場合、「UserとGroupは読み込み権限・書き込み権限・実行権限があり、Otherは読み込み権限と実行権限はあるが読み込み権限がない」。各記号の意味を下記に示す。

「ファイルの種類」の意味

種類 意味
- 通常のファイル
d ディレクトリ
l シンボリックリンク
c キャラクタ型デバイスファイル*
d ブロック型デバイスファイル*

*周辺機器にアクセスするためのファイル。データの使い方で2種類に分かれる。

「パーミッション」の意味

パーミッション 意味
r 読み込み許可
(Readable)
w 書き込み許可
(Writable)
x 実行許可
(eXecutable)
- 不許可

パーミッションの設定を変更

chmod <ユーザーカテゴリ> '+'or'-' <パーミッションカテゴリ> <ファイル名>
chmod u+r sample.txt //例

スクリーンショット 2021-01-22 13.17.52.png

数値による設定

パーミッションは数値で設定することも可能で、次の表のように数値が決められている。

パーミッション 数値
r (読み込み許可) 4
w (書き込み許可) 2
x (実行許可) 1
- (不許可) 0

使用例:UserとGroupは全ての権限をもつが、Otherは書き込み権限のみ持たない場合
permission.png

現在稼働中のプロセスをID番号付きで一覧表示

入力

ps

出力
ps.png
・PID(プロセスID) ー プロセス固有の番号
・TTY ー 使用している端末の番号
・TIME ー CPUの消費時間
・CMD ー コマンド名

プロセスの終了

kill <プロセスID>

最後に

次回はもう少し深掘りします。
(もしこの記事に誤りがありましたらご教授いただけると幸いです。)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

extundeleteで削除したファイルを復元する

はじめに

Ubuntuでファイルを削除してしまった!Windowsであれば、ごみ箱から復元したらいいだけなのだが、Linuxではこのような仕組みにはなっていません。しかも、mvするつもりが、rmをしてしまったという経験はありませんでしょうか?そこで、ファイルを思わず削除してしまっても、復元する手順は予め知っておいた方がいいでしょう。という事で記事を書きました。復元するには、いくつかの方法があるようですが、今回は、extundeleteというツールを使って復元しました。デフォルトではプレインストールされていないコマンドなので、コマンドがない環境の方は、個別にインストールして下さい。

参考URL
https://ameblo.jp/itboy/entry-11249111402.html

環境

Vagrant + Ubuntu 16.04.5 LTS

やったこと

パーティションの情報を表示して、Mounted on/ になっているディレクトリのファイルシステムを調べます。自分の環境では、Vagrantで動かしているため、 /dev/mapper/vagrant--vg-root になっています。因みにファイルシステムはext4です。

$df -hT

/home/vagrantにある、aa.txtを削除した後、復元してみます。

$rm aa.txt

extundeleteコマンドを実行する。

$sudo extundelete --restore-file /home/vagrant/aa.txt /dev/mapper/vagrant--vg-root

すると、カレントディレクトリに、RECOVERED_FILESという名のディレクトリが作成されます。

$ls -l

このディレクトリの中を見ると、削除したaa.txtが復元されています。

$ls -l RECOVERED_FILES/home/vagrant/

復元されたファイルをカレントディレクトリに持ってきます。

$cp RECOVERED_FILES/home/vagrant/aa.txt ./

復元されたディレクトリは削除しておきます。

$sudo rm -r RECOVERED_FILES/

状態が戻った事を確認してOK。

$ls -l
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ubuntu20.10でapt-mirrorに失敗する為debmirrorを使うことにする

Dockerを使ってdebmirrorを構築します。

ミラーサーバの構築

Dockerのインストール

sudo apt update
sudo apt install docker.io -y
sudo apt install docker-compose -y

githubから取得

↓こちらのdockerfileを利用させてもらいました。
https://github.com/flavienbwk/debmirror

git clone https://github.com/flavienbwk/debmirror.git 
cd debmirror

mirrorbuild.shを変更

Ubuntu20.10の日本語環境に動作する設定に変更します。
変更箇所は4箇所

#arch=i386,amd64 → arch=i386,amd64
arch=amd64 → #arch=amd64

release=bionic,bionic-security,bionic-updates,bionic-backports
↓
release=focal,focal-security,focal-updates,focal-backports

debmirrorの引数に--i18n を追加

変更後のファイル

#### Start script to automate building of Ubuntu mirror #####
## THE NEXT LINE IS NEEDED THE REST OF THE LINES STARTING WITH A # CAN BE DELETED

#!/bin/bash

## Setting variables with explanations.

#
# Don't touch the user's keyring, have our own instead
#
export GNUPGHOME=/mirrorkeyring

# Arch=         -a      # Architecture. For Ubuntu can be i386, powerpc or amd64.
# sparc, only starts in dapper, it is only the later models of sparc.
#
arch=i386,amd64
#arch=amd64

# Minimum Ubuntu system requires main, restricted
# Section=      -s      # Section (One of the following - main/restricted/universe/multiverse).
# You can add extra file with $Section/debian-installer. ex: main/debian-installer,universe/debian-installer,multiverse/debian-installer,restricted/debian-installer
#
section=main,restricted,universe,multiverse

# Release=      -d      # Release of the system (...Hardy, Intrepid... Lucid, Precise, Quantal, Saucy, Trusty ), and the -updates and -security ( -backports can be added if desired)
# List of updated releases in: https://wiki.ubuntu.com/Releases
#

release=focal,focal-security,focal-updates,focal-backports

# Server=       -h      # Server name, minus the protocol and the path at the end
# CHANGE "*" to equal the mirror you want to create your mirror from. au. in Australia  ca. in Canada.
# This can be found in your own /etc/apt/sources.list file, assuming you have Ubuntu installed.
#
server=archive.ubuntu.com

# Dir=          -r      # Path from the main server, so http://my.web.server/$dir, Server dependant
#
inPath=/ubuntu

# Proto=        --method=       # Protocol to use for transfer (http, ftp, hftp, rsync)
# Choose one - http is most usual the service, and the service must be available on the server you point at.
#
proto=http

# Outpath=              # Directory to store the mirror in
# Make this a full path to where you want to mirror the material.
#
outPath=/mirror/mirror/$server/ubuntu

# The --nosource option only downloads debs and not deb-src's
# The --progress option shows files as they are downloaded
# --source \ in the place of --no-source \ if you want sources also.
# --nocleanup  Do not clean up the local mirror after mirroring is complete. Use this option to keep older repository
# Start script
#
debmirror       -a $arch \
                --no-source \
                -s $section \
                -h $server \
                -d $release \
                -r $inPath \
                --progress \
                --method=$proto \
                --i18n \
                $outPath

#### End script to automate building of Ubuntu mirror ####

docker-composeでbuild

sudo docker-compose build

debmirrorを実行

docker-compose up mirror

私の環境では12時間ぐらいかかりました。
mirrorディレクトリが作成され100GB以上の容量があります。

Webサーバを実行

docker-compose up mirror

これでmirrorサーバの構築は完了です。

クライアントの設定

/etc/hostsを管理者権限で変更

例 構築したミラーサーバのipアドレスが192.168.22.1の場合
下記を追加

192.168.22.1    apt

/etc/apt/sources.listを管理者権限で変更

deb http://から始まるURLを
http://apt:8080/archive.ubuntu.com/ubuntu/に置き換えます。

#deb cdrom:[Ubuntu 20.10 _Groovy Gorilla_ - Release amd64 (20201022)]/ groovy main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://apt:8080/archive.ubuntu.com/ubuntu/ groovy main restricted
# deb-src http://apt:8080/archive.ubuntu.com/ubuntu/ groovy main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://apt:8080/archive.ubuntu.com/ubuntu/ groovy-updates main restricted
# deb-src http://apt:8080/archive.ubuntu.com/ubuntu/ groovy-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://apt:8080/archive.ubuntu.com/ubuntu/ groovy universe
# deb-src http://apt:8080/archive.ubuntu.com/ubuntu/ groovy universe
deb http://apt:8080/archive.ubuntu.com/ubuntu/ groovy-updates universe
# deb-src http://apt:8080/archive.ubuntu.com/ubuntu/ groovy-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu 
## team, and may not be under a free licence. Please satisfy yourself as to 
## your rights to use the software. Also, please note that software in 
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://apt:8080/archive.ubuntu.com/ubuntu/ groovy multiverse
# deb-src http://apt:8080.archive.ubuntu.com/ubuntu/ groovy multiverse
deb http://apt:8080/archive.ubuntu.com/ubuntu/ groovy-updates multiverse
# deb-src http://apt:8080/archive.ubuntu.com/ubuntu/ groovy-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://apt:8080/archive.ubuntu.com/ubuntu/ groovy-backports main restricted universe multiverse
# deb-src http://apt:8080/archive.ubuntu.com/ubuntu/ groovy-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu groovy partner
# deb-src http://apt:8080/ubuntu groovy partner

deb http://apt:8080/archive.ubuntu.com/ubuntu groovy-security main restricted
# deb-src http://security.ubuntu.com/ubuntu groovy-security main restricted
deb http://apt:8080/archive.ubuntu.com/ubuntu groovy-security universe
# deb-src http://security.ubuntu.com/ubuntu groovy-security universe
deb http://apt:8080/archive.ubuntu.com/ubuntu groovy-security multiverse
# deb-src http://security.ubuntu.com/ubuntu groovy-security multiverse

# This system was installed using small removable media
# (e.g. netinst, live or single CD). The matching "deb cdrom"
# entries were disabled at the end of the installation process.
# For information about how to configure apt package sources,
# see the sources.list(5) manual.

設定はこれで完了です。

今まで通り、 sudo apt update を実行しエラーが出なければ成功です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Snort NIDSを使用したLinuxサーバの保護とUbuntu 16.04でのSnort NIDSの設定

このチュートリアルでは、Alibaba Cloud ECS Ubuntu 16.04インスタンスSnort NIDSをインストールして設定する方法を学びます。

Alibaba Cloud Tech Share 執筆、Hitesh Jethva。Tech Shareは、クラウドコミュニティ内で技術的な知識やベストプラクティスを共有することを奨励するAlibaba Cloudのインセンティブプログラムです。

Snortは、特定のネットワークインターフェースを介して送受信されるパッケージデータを監視する、フリーでオープンソースの、最も一般的に使用されている署名ベースのネットワーク侵入検知システム(NIDS)の1つです。Snortは、インターネットプロトコル(IP)ネットワーク上でプロトコル分析、コンテンツの検索とマッチング、リアルタイムのトラフィック分析、パケットロギングを実行します。Snortを使用して、最新の攻撃、マルウェア感染、感染したシステム、コミュニティ・ポリシー違反を判断することができます。Snortには、バッファオーバーフローの検出、ステルスポートスキャン、CGI攻撃、その他数千ものワームや脆弱性の攻撃などの強力な機能が搭載されています。Snortは軽量なので、最小のクラウドサーバーインスタンスに簡単にインストールできます。

前提条件

1、Ubuntu 16.04サーバをインストールしたばかりのAlibabaクラウドインスタンス。
2、インスタンスに静的IPアドレス192.168.0.103が構成されています。
3、サーバーにルートパスワードが設定されています。

Alibaba Cloud ECSインスタンスを起動する

まず、Alibaba Cloud ECS Consoleにログインします。オペレーティングシステムとしてUbuntu 16.04を使用し、2GB以上のRAMを搭載した新しいECSインスタンスを作成します。ECSインスタンスに接続し、rootユーザーとしてログインします。

Ubuntu 16.04インスタンスにログインしたら、以下のコマンドを実行して、ベースシステムを最新の利用可能なパッケージで更新します。

apt-get update -y

必要なパッケージのインストール

次に、以下のコマンドでSnortのインストールに必要な依存関係をすべてインストールします。

apt-get install openssh-server ethtool build-essential libpcap-dev libpcre3-dev libdumbnet-dev bison flex zlib1g-dev liblzma-dev openssl libssl-dev -y

次に、DAQ(データ収集パッケージ)をシステムにインストールする必要もあります。まず、以下のコマンドで最新版のDAQをダウンロードします。

wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz

DAQ がダウンロードできたら、以下のコマンドでダウンロードしたファイルを解凍します。

tar -xvzf daq-2.0.6.6.tar.gz

次に、ディレクトリをdaq-2.0.6に変更し、以下のコマンドを実行してDAQをコンパイルしてインストールします。

cd daq-2.0.6
./configure
make
make install

DAQをインストールしたら、Snortのインストールに進みます。

Snortのインストール

デフォルトでは、最新版のSnortはUbuntu 16.04のリポジトリにはありません。そのため、Snortのソースをダウンロードしてコンパイルする必要があります。

まず、以下のコマンドでSnortのソースコードをダウンロードします。

wget https://www.snort.org/downloads/snort/snort-2.9.11.1.tar.gz

次に、以下のコマンドでダウンロードしたファイルを解凍します。

tar -xvzf snort-2.9.11.1.tar.gz

次に、ディレクトリをsnort-2.9.11.1に変更し、以下のコマンドでコンパイルします。

cd snort-2.9.11.1
./configure --enable-sourcefire
make
make install

次に、以下のコマンドで共有ライブラリを更新します。

ldconfig

次に、以下のコマンドでSnortバイナリのシンボリックリンクを作成します。

ln -s /usr/local/bin/snort /usr/sbin/snort

最後に、以下のコマンドでSnortを確認します。

snort -V

問題がなければ、以下のような出力が表示されるはずです。

,,_     -*> Snort! <*-
  o"  )~   Version 2.9.11.1 GRE (Build 268) 
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
           Copyright (C) 2014-2017 Cisco and/or its affiliates. All rights reserved.
           Copyright (C) 1998-2013 Sourcefire, Inc., et al.
           Using libpcap version 1.7.4
           Using PCRE version: 8.38 2015-11-23
           Using ZLIB version: 1.2.8

Snortの設定

Snortは3つのモードで設定できます。

Snifferモード:このモードでは、出力はターミナルにダンプされます。ライブモードでは連続した流れのパケットを見ることができます。

Packet Loggerモード:このモードでは、出力はディスクに保存されます。後から監視することができます。

Network IDSモード:このモードでは、ネットワークをスキャンしている間にsnortが定義されたパラメータにマッチするようにいくつかのパラメータを設定します。

このチュートリアルでは、ネットワークIDS(NIDS)モード用にSnortを設定します。

まず、Snort用のディレクトリ構造を作成する必要があります。これは、以下のコマンドを実行することで行うことができます。

mkdir /etc/snort /etc/snort/preproc_rules /etc/snort/rules /var/log/snort /usr/local/lib/snort_dynamicrules
touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules /etc/snort/rules/local.rules

次に、すべてのディレクトリに適切な権限を与えます。

chmod -R 5775 /etc/snort/ /var/log/snort/ /usr/local/lib/snort /usr/local/lib/snort_dynamicrules/ /usr/local/bin/snort

次に、Snortのソースからすべての設定ファイルをコピーします。

cd /root/snort-2.9.11.1/etc
cp -avr .conf .map .dtd .config /etc/snort/
cp -avr /root/snort-2.9.11.1/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/* /usr/local/lib/snort_dynamicpreprocessor/

次に、以下のコマンドですべてのルールセットをコメントアウトします。

sed -i "s/include &dollar;RULE_PATH/#include \$RULE_PATH/" /etc/snort/snort.conf

次に、Snortの設定ファイルを設定する必要があります。これは以下のコマンドを使用して行うことができます。

nano /etc/snort/snort.conf

以下の変更を行います。

完了したら、ファイルを保存して閉じます。次に、次のコマンドで設定ファイルを検証します。

snort -T -i eth0 -c /etc/snort/snort.conf

以下のような出力が表示されるはずです。

Snort successfully validated the configuration!
Snort exiting

Snortのテスト

Snortのインストールと設定が完了したので、Snortをテストしてみましょう。

まず、(FTP, ICMP, Web, SSH) Snort用のルールを作成します。このルールは、誰かがPing, SSH, FTP, Web接続を試みようとしたときにアラートを発生させます。これは以下のファイルを編集することで行うことができます。

nano /etc/snort/rules/local.rules

以下の行を追加します。

alert tcp any any -> $HOME_NET 21 (msg:"FTP connection attempt"; sid:1000001; rev:1;)
 alert icmp any any -> $HOME_NET any (msg:"ICMP connection attempt"; sid:1000002; rev:1;)
 alert tcp any any -> $HOME_NET 80 (msg:"Web connection attempt"; sid:1000003; rev:1;)
 alert tcp any any -> $HOME_NET 22 (msg:"SSH connection attempt"; sid:1000004; rev:1;) 

保存して、終了したらファイルを閉じます。

ターミナルからネットワークIDSモードでSnortデーモンを起動し、任意のアラートをコンソールに出力するように指示します。

snort -A console -q -c /etc/snort/snort.conf -i eth0
Snort is now up and listening on interface eth0.

次に、リモートマシンから 以下のコマンドでSSH、FTP、ICMP、Web接続を試みます。

ssh 192.168.0.103
ping 192.168.0.103
telnet 192.168.0.103 21

注: 192.168.0.103はSnortサーバーのIPアドレスです。

Snort サーバでは、以下のような出力が表示されるはずです。

05/15-21:26:43.359463  [] [1:1000004:1] SSH connection attempt [] [Priority: 0] {TCP} 192.168.0.105:59099 -> 192.168.0.103:22
05/15-21:30:07.863475  [] [1:1000001:1] FTP connection attempt [] [Priority: 0] {TCP} 192.168.0.105:35850 -> 192.168.0.103:21
05/15-21:27:59.090364  [] [1:1000002:1] ICMP connection attempt [] [Priority: 0] {ICMP} 192.168.0.105 -> 192.168.0.103

キーボードからCtrl+Cを押すことで、いつでもSnortを停止することができます。

Snort Upstartスクリプトの作成

また、起動時にSnortを起動するために、Snort用のUpstartスクリプトを作成する必要があります。以下のファイルを作成します。

nano /lib/systemd/system/snort.service

以下の行を追加します。

[Unit]
   Description=Snort NIDS Daemon
   After=syslog.target network.target
 [Service]
   Type=simple
   ExecStart=/usr/local/bin/snort -q -c /etc/snort/snort.conf -i eth0
 [Install]
  WantedBy=multi-user.target

ファイルを保存し、終了したらSnortサービスを起動し、以下のコマンドで起動時に起動できるようにします。

systemctl start snort
systemctl enable snort

以下のコマンドでSnortの状態を確認することができます。

systemctl status snort

以下のような出力が表示されるはずです。

snort.service - Snort NIDS Daemon
   Loaded: loaded (/lib/systemd/system/snort.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-05-15 21:31:31 IST; 8s ago
 Main PID: 29884 (snort)
   CGroup: /system.slice/snort.service
           └─29884 /usr/local/bin/snort -q -c /etc/snort/snort.conf -i eth0

May 15 21:31:31 Node1 systemd[1]: Started Snort NIDS Daemon. 

また、Snortサーバ上での接続試行は、以下のコマンドで後で確認することができます。

tcpdump -r /var/log/snort/snort.log*

出力:

21:42:56.618502 IP 192.168.0.105.58491 > 192.168.0.103.ssh: Flags [P.], seq 5800:5856, ack 221657, win 1444, options [nop,nop,TS val 1074792 ecr 968798], length 56
21:42:56.621801 IP 192.168.0.105.58491 > 192.168.0.103.ssh: Flags [.], ack 221745, win 1444, options [nop,nop,TS val 1074792 ecr 969065], length 0
21:47:11.333431 IP 192.168.0.105.35886 > 192.168.0.103.ftp: Flags [.], ack 35, win 229, options [nop,nop,TS val 1138471 ecr 1032743], length 0
21:47:11.335842 IP 192.168.0.105.35886 > 192.168.0.103.ftp: Flags [F.], seq 0, ack 36, win 229, options [nop,nop,TS val 1138471 ecr 1032744], length 0

おめでとうございます。これで、Ubuntu 16.04サーバにSnort NIDSが正常にインストールされ、設定されました。これで、サーバーへの接続を監視できるようになりました。

関連するアリババクラウド製品

Alibaba Cloud Anti-DDoS Basicは、Alibaba Cloud ECSインスタンスと統合してDDoS攻撃からデータやアプリケーションを保護するクラウドベースのセキュリティサービスで、セキュリティ対策の可視性と制御性を向上させます。

アリババクラウドのグローバルサービスとして、Anti-DDoS Basicを利用することで、投資をすることなくクラウドホスティングアーキテクチャの厳しいセキュリティ要件を満たすことができます。本サービスは、すべてのAlibaba Cloudユーザーが無料でご利用いただけます。

Alibaba Cloud Server Guardは、クラウド脅威情報連携機能を提供する軽量エージェントをサーバーにインストールすることで、様々な悪意ある攻撃からサーバーを保護します。また、不審なログインがあった場合にはリアルタイムでアラートを提供し、Webサイトのバックドア攻撃からサーバーを保護します。

本製品は使い方や設定が簡単で、Webサイトやシステムの全体像を把握・分析することができます。これにより、ミッションクリティカルなアプリケーションの効率を高めることができます。

CloudMonitorは柔軟なモニタリングサービスで、クラウドの展開を詳細に把握することができます。CloudMonitorは、CPU利用率やレイテンシーなどの重要な指標について高度な分析を提供するだけでなく、ビジネス要件に合わせて指標をカスタマイズすることもできます。

ECS (Elastic Compute Service)、RDS (Relational Database Service)、サーバー・ロードバランサー、ブロック・ストレージ・ボリュームなどのリソースをリアルタイムで詳細に監視し、デプロイメントを微調整してパフォーマンスを最適化し、運用コストを削減することができます。

また、CloudMonitorは、定義したメトリクスに応じて侵入やセキュリティ侵害を検出することができるため、クラウドのデプロイメントにセキュリティの別のレイヤーを追加するソリューションを提供しています。ソーシャルネットワーキングサービス(SNS)、ソーシャルメッセージングサービス(SMS)、インスタントメッセンジャー(Ali Trade Managerのみ)、電子メールを介して設定したアラームを発生させることができます。

本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。

アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

scpコマンドで最新のファイルを転送するワンライナー

送信元にある最新のファイルを別のサーバーに転送したい時があり、以下のようにバッククォートで囲めばコマンドが実行され結果が得られます。

ワンライナーで必要な最新のファイルを取得して、転送することが出来ました。

scp `ls -1t /tmp/data/*.csv|head -n 1` user@hostname:/home/user/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

C言語で作る自作cpコマンド

目的

C言語の学習のために、自作でlinuxのcpコマンド作ってみました。
とはいえ、本実装ではオプションないし、エラー処理等もなしなので、雑な作りになっています。
ただ、案外コピーするくらいなら簡単に実装できたので、他にもファイル処理等オリジナルコマンドが作れるようになったらいいなと思いました。

僕と同様にC言語学習中で何作っていいかわからない人向けです。
学習する上で、初めから作りたいものがあれば話は早いですが、そういうわけではない場合もあったりすると思います。
そんな時はすでにあるものを真似して作ってみるが一番ですよね。

メイン実装1(バグあり)

@fujitanozomu @SaitoAtsushi
お二方にご指摘いただき、下記プログラムだと、コメントでおっしゃってる通り、
ファイル中に0x00のバイト値を含むファイルは同一の内容にコピーされないです。
@fujitanozomu さん、 @SaitoAtsushi さん、ありがとうございます。
この下に、修正版を残しておきます。
ご指摘あれば、コメントください

copy.c
#include <stdio.h>

int main(int argc, char *argv[]) {
  int i;
  char ch[1000];
  FILE *file, *new_file; 

  if (argc < 3) {
    perror(argv[0]);
    return 1;
  }

  file = fopen(argv[1], "r");
  if (!file) {
    return 1;
  }
  new_file = fopen(argv[2], "w");
  if (!new_file) {
    return 1;
  }

  while ((fgets(ch, sizeof(ch), file)) != NULL) {
    if (fputs(ch, new_file) < 0) return 1;
  }

  fclose(file);
  fclose(new_file);

  return 0;
}

メイン実装2(修正版)

fgets => fgetc
fputs => fputc

copy.c
#include <stdio.h>

int main(int argc, char *argv[]) {
  int i, c;
  FILE *file, *new_file; 

  if (argc < 3) {
    perror(argv[0]);
    return 1;
  }

  file = fopen(argv[1], "r");
  if (!file) {
    return 1;
  }
  new_file = fopen(argv[2], "w");
  if (!new_file) {
    return 1;
  }

  while ((c = fgetc(file)) != EOF) {
    if (fputc(c, new_file) == EOF) return 1;
  }

  fclose(file);
  fclose(new_file);

  return 0;
}

軽く解説

詳細説明とは多少異なります。自分なりの理解のもとでなるべくわかりやすく記述しています。
間違っている場合はご指摘ください。

fopen

  • 第1引数 = ファイルパス
  • 第2引数 = mode = ストリームの性質(書き込み専用・読み込み専用etc)
  • 返り値 = オープンしたストリームを制御するFILEへのポインタ。失敗した場合NULL

指定された読み込みファイル(コピー元)のオープン、
書き込みするためのファイル(コピー先)のオープンを行う。

fgets

  • 第1引数 = バッファ変数(配列)
  • 第2引数 = バッファのサイズ
  • 第3引数 = ストリーム(ファイル)
  • 返り値 = バッファ。失敗した場合・最後の行まで読み込んだ場合NULL

指定したストリーム(ファイル)から1行分の文字列を読み取り、バッファへ格納

fputs

  • 第1引数 = 任意の文字列()
  • 第2引数 = ストリーム(書き込み先ファイル)
  • 返り値 = 成功は0以上の正の値、失敗はEOF

任意の文字列を指定したストリームに書き込む
今回んプログラムの場合、バッファに格納した文字列を書き込むようにしている。

fclose

  • 第1引数 = ストリーム(open下もファイル)
  • 返り値 = 成功は0、失敗はEOF
  • オープンしたファイルを閉じる

----- 以下修正版で利用 -----

fgetc

  • 第1引数 = ストリーム(ファイル)
  • 返り値 = ストリームから1文字読み込んで、その文字をint型として返す。失敗した場合・最後の行まで読み込んだ場合EOF

fputc

  • 第1引数 = 書き込みたい文字(int)(fgetcで取得したバイトをそのまま扱える)
  • 第2引数 = ストリーム(ファイル)
  • 返り値 = 書き込んだ文字。失敗した場合EOF
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む