- 投稿日:2021-01-22T18:09:28+09:00
terminals database is inaccessibleを解決した時のメモ
問題の概要
とあるDockerコンテナ内で
clear
コマンドを使ったらterminals database is inaccessibleが出ました。コンテナはDebianベースの環境です。
解決法
まずterminfoをインストールします。
$ apt install ncurses-term次に、
~/.profile
にterminfo関連の環境変数を設定します。~/.profileexport 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を見つけらるようにすれば解決するということです。
参考文献
- 投稿日:2021-01-22T17:53:53+09:00
Linuxって?
はじめに
Linuxの知識が乏しかったので自分用にまとめました。後半でパーミッション(権限)に関して詳しく書いています。
Linuxとは
コンピューターを動かすのに必要なソフトウェア(OS)。Linus Torvalds氏によって開発されたPC-UNIXの一種。Linux自体はオープンソースだが、実際は企業や団体が独自のツールやサポートなどのサービスを付け加えて、パッケージを作っている。これをディストリビューション(配布形態)という。有名なDebian系のUbuntu、RedHat系のCentOSなどがある。
参考: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出力結果の詳細(ファイルの種類とパーミッション)
左端のブロックの
・最初の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 //例数値による設定
パーミッションは数値で設定することも可能で、次の表のように数値が決められている。
パーミッション 数値 r (読み込み許可) 4 w (書き込み許可) 2 x (実行許可) 1 - (不許可) 0 使用例:UserとGroupは全ての権限をもつが、Otherは書き込み権限のみ持たない場合
現在稼働中のプロセスをID番号付きで一覧表示
入力
ps出力
・PID(プロセスID) ー プロセス固有の番号
・TTY ー 使用している端末の番号
・TIME ー CPUの消費時間
・CMD ー コマンド名プロセスの終了
kill <プロセスID>最後に
次回はもう少し深掘りします。
(もしこの記事に誤りがありましたらご教授いただけると幸いです。)
- 投稿日:2021-01-22T13:06:58+09:00
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.txtextundeleteコマンドを実行する。
$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
- 投稿日:2021-01-22T10:28:45+09:00
Ubuntu20.10でapt-mirrorに失敗する為debmirrorを使うことにする
Dockerを使ってdebmirrorを構築します。
ミラーサーバの構築
Dockerのインストール
sudo apt update sudo apt install docker.io -y sudo apt install docker-compose -ygithubから取得
↓こちらのdockerfileを利用させてもらいました。
https://github.com/flavienbwk/debmirrorgit clone https://github.com/flavienbwk/debmirror.git cd debmirrormirrorbuild.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 builddebmirrorを実行
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 を実行しエラーが出なければ成功です。
- 投稿日:2021-01-22T10:16:24+09:00
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.gzDAQ がダウンロードできたら、以下のコマンドでダウンロードしたファイルを解凍します。
tar -xvzf daq-2.0.6.6.tar.gz次に、ディレクトリをdaq-2.0.6に変更し、以下のコマンドを実行してDAQをコンパイルしてインストールします。
cd daq-2.0.6 ./configure make make installDAQをインストールしたら、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.8Snortの設定
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 $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 exitingSnortのテスト
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ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ
- 投稿日:2021-01-22T09:05:01+09:00
scpコマンドで最新のファイルを転送するワンライナー
送信元にある最新のファイルを別のサーバーに転送したい時があり、以下のようにバッククォートで囲めばコマンドが実行され結果が得られます。
ワンライナーで必要な最新のファイルを取得して、転送することが出来ました。
scp `ls -1t /tmp/data/*.csv|head -n 1` user@hostname:/home/user/
- 投稿日:2021-01-22T02:58:35+09:00
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 => fputccopy.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