ここに書いて、Qianfeng Network Security調査の第2ステージが終わりました。Linuxオペレーティングシステムを学習した後、学習効果はあまり良くないと感じます。後期では、Linuxの概要に特化する予定です。結局のところ、セキュリティを強化するために強化しましょう。特に侵入テストは後で学ぶため、Linuxのスキルは高くなります。
ディレクトリ
イントラネットホストのライブインストールステータスを確認する(アップグレード)
イントラネットのメインセンテンスの生存状況を検出する(再アップグレード)
スクリプト
Linuxのスクリプトは、実際にはWindowsシステムで記述したバッチプロセスに似ているので、どうやって彼を学ぶのでしょうか。
ここでは、主にさまざまなシナリオの要件を扱い、対応するスクリプトを記述してプロセスを実現します。スクリプトで記述されたさまざまな文法を段階的に理解します。これらの文法の意味は、以前に学習したプログラミング言語ですでに理解されています。ここでは、主に文法構造を理解して学習しますが、学習は非常に簡単で非常に興味深いことがわかります...
簡単なスクリプト
シーン設定は次のとおりです。
午前9時にeth0ネットワークカードのIPを設定する要求
192.168.1.100/24
192.168.1.254
午後2時のeth0ネットワークカードIPの設定要求
172.16.1.100/24
172.16.1.254
実装プロセス
新しいファイルを作成する
- vim fixip.sh
#!/ bin / bash
cd etc / sysconfig / network-scripts /
echo
echo "DEVICE = eth0"> ifcfg-eth0
echo "TYPE = Ethernet" >> ifcfg-eth0
echo "ONBOOT = yes" >> ifcfg-eth0
echo " BOOTPROTO = static ">> ifcfg-eth0
echo" IPADDR = 192.168.1.100 ">> ifcfg-eth0
echo" NATMASK = 255.255.255.0 ">> ifcfg-eth0
echo" GATEWAY = 192.168.1.254 ">> ifcfg-eth0
ifdown eth0
ifup eth0
ここでは、以下について説明します。
#!bin / bashスクリプト言語を解釈するbashインタープリターを指定します
実行権限を追加する
- chmod + x fixip.sh
実行(現在のディレクトリ)
- ./fixip.sh
会社は変更するためにランダムに異なるIPを割り当てます
最適化スクリプトはインタラクティブスクリプトであり、以下で説明する変数の割り当てにつながります。
変数の割り当て
まず、これらの数行のコマンド、実行後の結果を見てみましょう
Aは、名前が示すように、定義した変数です。変数に値を割り当て、$ Aで表される値(文字列)を呼び出します
変数と組み合わせた読み取り命令により、ユーザーが入力した値を変数に割り当てるプロセスを実現できます。
構造:
read -p ""変数
変数を使用して以前のスクリプトを最適化およびアップグレードし、それを読んで、より実用的でユーザーフレンドリーにする
#!/ bin / bash
read -p "please input ipaddr:" IP
read -p "please input netmask:" MASK
read -p "please input gateway:" WAY
cd etc / sysconfig / network-scripts /
echo
echo "DEVICE = eth0 "> ifcfg-eth0
echo" TYPE = Ethernet ">> ifcfg-eth0
echo" ONBOOT = yes ">> ifcfg-eth0
echo" BOOTPROTO = static ">> ifcfg-eth0
echo" IPADDR = $ IP ">> ifcfg- eth0
echo "NATMASK = $ MASK" >> ifcfg-eth0
echo "GATEWAY = $ WAY" >> ifcfg-eth0
ifdown eth0
ifup eth0
注:変数を追加した後、エコーの後には一重引用符ではなく二重引用符を付ける必要があります
変数の前に$を追加することを忘れないでください
判決文なら
構造
単一分岐構造の場合
if 条件
次にサブステートメントを設定します
されます
二重分岐構造の場合
if 条件
次にサブステートメントを設定します
そうでなければサブステートメントを形成しません
されます
多分岐構造の場合
if 条件
次にサブステートメントを設定します
elif状態
次にサブステートメントを設定します
そうでなければサブステートメントを形成しません
されます
例
次に、単純な単一分岐判定スクリプトを記述します
注: - Linuxはより大きいGT未満-lt等しい-eq
同様に、最初にshファイルを作成します
- vim if.sh
#!/ bin / bash
if [3 -lt 5]
その後、「yes」
fiをエコーします
エンパワーメント
- chmod + x if.sh
マルチブランチの例を見てみましょう
#!/ bin / bash
read -p "please input a num:" NUM
if [$ NUM -lt 5]
then echo "lt"
elif [$ NUM -eq 10]
then echo "eq"
else echo "gt"
fi
イントラネットホストの生存状態を確認する
通常のping操作では、特定の出力表示を変更するように変更できます。
-cは、送信するパケットの数を指定します
-iインターバル時間を送信
-w応答時間待ち
pingステートメントの結果をifの条件として使用できますか?
出力を非表示にしたい
&>ファイルは以前の出力を別の場所にインポートします
- ping -c2 -i0.2 -w2 12.34.56.78&> / dev / null
新しいファイルping.shを作成します。
- vim ping.sh
#!/ bin / bash
「ping -c2 -i0.2 -w2 12.34.56.79&> / dev / null」の場合
次に「はい」をエコーします
それ以外の場合は「いいえ」をエコー
されます
注:この記号をキーボードで再生する方法英語:キーボードの数字キー1の左側
実行する権限もあります
- chmod + x ping.sh
ここでは、事前に次のことを宣言します。pingが実行されたことが判明したIP
最適化:
#!/ bin / bash
read -p "please input ipaddr:" IP
if `ping -c2 -i0.2 -w2 $ IP&> / dev / null`
then echo" $ IP is up "
else echo" $ IP isダウン "
fi
テストは成功しました
制限:
ホストをテストできますが、ネットワークセグメントは機能しません
これはループを使用します。以下では、ループステートメントを紹介します
wileのループステートメント
forとワイプの違い
ループ数に応じたforループ(値リスト)
条件に基づくループをワイル
画面に{1..10}を直接出力すると、次の結果が得られます
フォーマットについて
値リストの変数
行う
サブステートメント
終わった
例えば
単純なループスクリプト
- vim xun.sh
あなたは以前にプログラミング言語に触れたことがあると思いますので、詳細な記述は行わず、直接コードに移動します
#!/ bin / bash
for i in {1..10}
do
echo $ i
done
ワイルフォーマット
状態
行う
サブステートメント
終わった
ながらインスタンス
#!/ binに/ bashの
NUM = 0
[$ NUMは3 -lt]ながら
ん
NUM ++せ
エコー$ NUMが
行われ
注:let NUM ++はlet NUM = NUM +!と同等です。
イントラネットホストのライブインストールステータスを確認する(アップグレード)
以前のホストの生存の検出に戻り続けます。今回は、実際の環境でのLANのホストの生存の検出を実現します。
ブリッジモードにネットワークプロパティを構成する
ネットワークカードの構成を変更する
- vim / etc / sysconfig / network-scripts / ifcfg-eth0
- ifdown eth0
- ifup eth0
- vim ping.sh
実装のために
#!/ bin / bash
NET = 10.0.110。
{1..254}で私はのために
行う
`のping -c2 -i0.2 -w2 $ NET $ IP&>は/ dev / null`なので場合
$ NET $ IPは\ 033 [31mup \ 033 [0メートルで、その後エコー-e」 "
else echo -e" $ NET $ IP is \ 033 [32mdown \ 033 [0m "
fi
done
実装中:
#!/ bin / bash
NET = 10.0.110。
IP = 200
while [$ IP -lt 254]
lxxxet IP = IP + 1
if `ping -c2 -i0.2 -w2 $ NET $ IP&> / dev / null`
then echo -e" $ NET $ IP is \ 033 [31mup \ 033 [0m "
else echo -e" $ NET $ IP is \ 033 [32mdown \ 033 [0m "
fi
done
ケースステートメント
ケース
./case.sh centos
redhat
./case.sh redhat
セント
./case xxxx
使用法case.sh {redhat | centos}
上記のケースを実現するには、caseステートメントを使用します
レッドハットのケース$ 1
)
echo "centos"
;;
centos)
echo "redhat"
;;
*)
echo "Usage $ 0 {redhat | centos}"
esac
エンパワーメント
- chmod + x case.sh
ケースフォーマット
ケース変数
モード1)
サブステートメント
;;
*)
サブステートメント
;;
esac
機能
コードの一部を変数に格納する
Aという名前の関数を設計する
Aを実行すると、画面出力はOKです。
合格できます
エコー$?
関数の戻り値を取得(return)
イントラネットのメインセンテンスの生存状況を検出する(再アップグレード)
前回のホスト生存の検知に戻りましょう今回は、LAN内の全ホストの生存状況検知を実環境で実現したいと思います。
redhat(){
echo cetos
return 0
}
centos(){
echo redhat
return 0
}
case $ 1 in
redhat)
redhat
;;
centos)
centos
;;
*)
echo "Usage $ 0 {redhat | centos}"
esac
Apache自己起動スクリプトの分析
Apache起動関数
Apacheのシャットダウン機能
これらはおなじみのように見えますか、すべて私たちによって書かれています
次に、nginxの自己起動スクリプトを記述します
Nginx自己起動スクリプト
最初に、Nginx起動スクリプトnginxdを/etc/init.d/ディレクトリに書き込む必要があります
#!/ bin / bash
nginx = / usr / local / nginx / sbin / nginx
start(){
echo "nginx starting .... [OK]"
$ nginx
}
start
最適化:
#!/ bin / bash
nginx = / usr / local / nginx / sbin / nginx
start(){
echo "nginx starting .... [OK]"
$ nginx
}
status(){
if `ss -antpl | grep nginx> / dev / null`
その後、「nginx starting ....」
をエコーしますelse else "nginx stoping ...."
fi
}
stop(){
echo "nginx stoping .... [OK]"
$ nginx -sやめる}
case $ 1 in
start)
start
;;
停止)
停止
;;
再スタート
ストップ
スタート
;;
*)
echo "Usage:$ 0 {start | stop | restart}"
esac
次に、永久に開始させます
作成したnginxdスクリプトを開き、次の2行を追加します
chkconfigリストに参加する
- chkconfig-nginxdを追加
デフォルトではオフ
レベル5をオンにします
- chkconfig --nginxdをオンにする
さて、私たちの第5レベルが開かれました
次に、オペレーティングシステムを再起動します。
- リブート
あなたは私たちのnginxが以来始まっていることがわかります
参照:
Qianfeng Cyber Security Video Open Class:https ://www.bilibili.com/video/BV1i7411G7vm?p=158