Linux iptables

firewalld

無効

# systemctl stop firewalld.service
# systemctl mask firewalld.service
# systemctl list-unit-files | grep firewalld

iptables

インストール

# yum install iptables-services
# systemctl start iptables-services
# systemctl enable iptables-services

設定

※/etc/sysconfig/iptables

# SSH, HTTP, HTTPS
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 443 -j ACCEPT

Linux 大量のファイルを削除する方法

通常の削除

rm -rf *

ls結果を削除

ファイル数が多すぎる等、rmコマンドが実行できなくなる場合
ls | xargs rm
表示したファイルリストからファイルを削除

ファイル名一覧を読み込んで削除

しかしsakuraの場合ディスクI/Oに制限がある為、lsに失敗する。
ls | head -n 10
数件のみ表示
さえダメな場合

1) ファイルリストをテキストへ出力
ls | head -n 1000 > list.txt

2) ファイルリストを読み込んで削除
cat list.txt | xargs rm

1)~2)を繰り返す

Linux CRON

インストール

yum install crontabs

設定

設定確認

croptab -l

設定ファイル

/etc/crontab

設定コマンド

crontab -e

曜日 コマンド 機能
00 10 * * 4 test.sh 00 10 *
* 4 /~/test.sh
毎週水曜日10:00
*/10 * * * * test.sh */10 * *
* * /~/test.sh
10分毎に実行
0 2 * * * test.sh 0 2 *
* * /~/test.sh
2時に実行
0 2 01 * * test.sh 0 2 01
* * /~/test.sh
毎月1日2時に実行

設定消去

crontab -r

実行ログ

tail -f /var/log/cron

Linux TCPWrappers

TCPWrappersとは

ネットワーク接続制御デーモン
デーモン名:tcpd

各サービスの処理前に接続要求を受け取り、
hosts.allow」と「hosts.deny」を参照して接続可否を判断する
接続を許可する場合は、それぞれのサービスに処理を渡す

設定

書式

daemon_list : host_list


111.222.333.444はFTPアクセス可
vsftpd : 111.222.333.444

全ホストからFTPアクセス可
vsftpd : ALL

全ホストから全サービス可
ALL : ALL

daemon_list

daemon_list 機能
ALL 全デーモン
crond クーロン
httpd Apache
mysqld MySQL
vsftpd FTP

host_list

host_list 機能
ALL 全ホスト
LOCAL 「.」を含まないホスト(例:localhost)
UNKNOWN アクセス元のユーザー名かホスト名のいずれかが不明な場合
KNOWN アクセス元のユーザー名とホスト名が両方ともわかっている場合
PARANOID ホスト名とIPアドレスが異なる場合
EXCEPT 例外
111.222.333.444 IPアドレス
.co.jp ドメイン

/etc/hosts.allow

アクセス許可リスト

/etc/hosts.deny

アクセス拒否リスト

優先順位

hosts.allow 優先


hosts.deny 後回し

ホワイトリスト(許可ホスト)設定方法

※hosts.allow
XXXX : 111.222.333.444

※hosts.deny
XXXX : ALL

Linux ログ

syslog

syslogとは

linuxのログ出力デーモン
Linuxを含めたアプリ毎のログ出力を管理できる

syslog一覧

出力先 機能
/var/log/boot.log システム起動時のログ
/var/log/mail.log メールシステムのログ
/var/log/cron cronのログ
/var/log/secure 認証関連のログ
/var/log/dmesg システム起動時のdmesgの内容
/var/log/lastlog 最終ログイン情報の記録
/var/log/wtmp ログイン情報の記録
/var/log/anaconda.* インストーラのログ
/var/log/messages 上記に含まれないログ
多くのアプリでのデフォルト出力先
syslog設定

/etc/rsyslog.conf
/etc/syslog.conf

ローテーション設定

/etc/logrotated.conf

TOMCATログ

ログファイル名 機能
catalina.log Tomcat webサーバーの管理関係
catalina.out webサーバーの起動・停止、サービスの開始・停止ログ
localhost.log hostに限定したログ
host-manager.log Tomcat host manager web app関係
ログ出力設定

※server.xml
<Context path="/sampleAP" docBase="/home/sample/webapp">
 <Valve className="org.apache.catalina.valves.AccessLogValve"
  directory="/home/sample/log"
  prefix="access-"
  fileDateFormat="yyyy-MM-dd"
  suffix=".log"/>
</Context>

サーバログ出力設定

(Catalina、標準出力、標準エラー出力)
※logging.properties(Tomcat6以降)
handlers =
 catalina.org.apache.juli.FileHandler,(ファイルに出力するログの設定)
 java.util.logging.ConsoleHandler (コンソールに出力するログの設定:標準出力、標準エラー出力)
.handlers =
 catalina.org.apache.juli.FileHandler,
 java.util.logging.ConsoleHandler
# ファイルに出力するログの設定
catalina.org.apache.juli.FileHandler.level = FINE (ログレベル)
catalina.org.apache.juli.FileHandler.directory = /var/log (ログの出力先)
catalina.org.apache.juli.FileHandler.prefix = catalina. (ログファイルの開始文字)
# コンソールに出力するログの設定:標準出力、標準エラー出力
java.util.logging.ConsoleHandler.leverl = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
# 各コンテキストのログの設定も可能
org.apache.catalina.core.ContainerBase.[sever.xmlのEngineタグのname].[server.xmlのHostタグのname].[コンテキスト].level = INFO
org.apache.catalina.core.ContainerBase.[sever.xmlのEngineタグのname].[server.xmlのHostタグのname].[コンテキスト].handlers= catalina.org.apache.juli.FileHandler
# 例
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/sampleAP].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/sampleAP].handlers= 6sample.org.apache.juli.FileHandler

APCHEログ

WEBサーバー:Apache」参照

SSHログ

/var/log/secure

Linux ディレクトリ構成

/ルートディレクトリ
├ /bin 基本コマンド
├ /boot 起動に必要なファイル
├ /dev デバイスファイル
├ /etc 設定ファイル
  ├ /named.conf ドメイン、サーバー定義ファイル
  ├ /httpd
    ├ /conf/httpd.conf Apache設定ファイル
    └ /conf.d/phpmyadmin.conf phpMyAdmin設定ファイル
  ├ /php.ini PHP設定ファイル(RedHat)
  ├ /php5/cli/php.ini PHP設定ファイル(Debian)
  ├ /sysconfig/network ネットワーク情報
  └ /hosts ホスト情報
├ /home ユーザーのホームディレクトリ(オプション)
├ /lib 共有ライブラリ(オプション)
├ /mnt 一時的なマウントポイント
├ /opt 追加アプリケーション
├ /proc プロセス情報など
├ /root root用ホームディレクトリ(オプション)
├ /sbin システム管理用コマンドなど
├ /tmp 一時的なファイル
├ /usr 各種プログラムなど
└ /var 変更されるデータ
  ├ /named/(ドメイン名).zone ドメイン正引きzoneファイル
  ├ /named/(ドメイン名).rev ドメイン逆引きzoneファイル
  └ /www/html Apache公開ディレクトリ(デフォルト)

Linux シェルスクリプト

シェルスクリプトとは

保存して再利用できる様にしたシェル群

シェルスクリプト実行方法

通常

sh test.sh

実行権限付与後に実行

シェルスクリプト:test.shに実行権限を与える

$ chmod +x test.sh
(続けて)実行(カレントディレクトリ指定が必要)

$ ./test.sh

シェルの起動と同時に実行

$ bash test.sh

xargs

シェルを実行できる
ls | xargs rm -rf

シェルスクリプト作成方法

拡張子

「.sh」が一般的(なくても動作可能)

シェルの種類を指定

一行目
#!/bin/bash

変数操作

変数宣言
val="aaa"
宣言時は「$」不要
val:aaa

文字列に変数を埋め込み
fileNm="${val}.txt"
変数使用時は「$」必要
fileNm:aaa.txt

※改行を追記
echo >> $fileNm

※文字列'aaa'を出力
echo $fileNm
→ aaa.txt

変数に格納したファイル名にリダイレクト
echo "aaa" > $fileNm
→ aaa.txtにaaaが出力される

インクリメント

count=$(( count++ ))
count=$(( count + 10 ))

Linuxコマンド実行

`(バッククォート)で囲む
`cat test.txt | ws -l`

eval関数使用
eval "cat ${val}.txt | ws -l"
変数使用時

変数にコマンドを格納して呼び出し
com="cat test.txt | ws -l"
$com

結果を変数に格納
count=`cat test.txt | ws -l`
count:100

Linuxコマンド実行結果をリダイレクト
`cat test.txt | ws -l` > result.txt
`cat test.txt | ws -l > result.txt`はダメ

Linux 環境系

サービス

概要

バックグラウンドで動作するプログラム
≒デーモン

ランレベル
ランレベル 名称 備考
0 halt システムが停止をしている状態
1 Singlle user mode シングルユーザー、ネットワークログインなし、CUI
2 Multiuser without NFS マルチーユーザー、ネットワークログインなし、CUI
3 Multiusr マルチーユーザー、ネットワークログインあり、CUI
4 -(unused) (未使用)
5 Multiuser(with GUI) マルチーユーザー、ネットワークログインあり、GUI
6 reboot 再起動中

サービススクリプト保存場所
/etc/init.d

現在のランレベル
runlevel

ランレベル設定確認
chkconfig –list (サービス名)

ランレベル設定
chkconfig –level 3 (サービス名) on
chkconfig –level 3 (サービス名) of

起動・停止・状態確認
機能 コマンド
サービス起動 service (サービス名) start
サービス停止 service (サービス名) stop
サービス再起動 service (サービス名) restart
サービス状態確認 service (サービス名) status
サービス自動起動開始 chkconfig (サービス名) on
サービス自動起動停止 chkconfig (サービス名) off
サービス自動起動確認 chkconfig –list (サービス名)
サービス一覧 sysv-rc-conf –list
機能 コマンド
サービス起動 systemctl start (サービス名)
サービス停止 systemctl stop (サービス名)
サービス再起動 systemctl restart (サービス名)
サービス自動起動開始 systemctl enable (サービス名)
サービス自動起動停止 systemctl disable (サービス名)
サービス自動起動確認 systemctl is-enabled (サービス名)
サービス一覧 systemctl list-unit-files –type=service
サービス状態確認 systemctl status (サービス名)
サービス状態詳細確認 journalctl -xu (サービス名)
例 journalctl -xu httpd.service

バックグラウンドジョブ表示

jobs

プロセス

シェルのバックグラウンド実行

nohup (シェル) &
例:nohup wget http://~ &

バックグラウンド実行中の結果はnohup.outに出力される

プロセス表示

ps x

~を含むプロセス
ps x | grep ~

プロセス停止

kill (プロセスID)

CPU

cat /proc/cpuinfo
flagsの値群にlmがある→64ビットCPU

カーネル

uname -a
X86_64/amd64→64ビットカーネル

OS

CentOSバージョン

$ cat /etc/redhat-release

その他

history

コマンド履歴の表示

100番目のコマンドを再実行
$ !100

date

現在日付を表示
date

指定フォーマットで現在日付を表示
date “+%Y%m%d %H%M%s”
→ 20190202 101010

指定フォーマットで現在日付のファイル名のファイルを作成
touch aaa`date “+%Y%m%d %H%M%saaaa.txt”`
→ aaa20190202 101010aaa.txt

Linux コマンド:グループ・ユーザー・権限

ファイル、ディレクトリのグループ、権限

ls -l
バッチコマンド(Linux/DOS/PowerShell)」参照

ID

※アカウント、所属グループを表示
$ id

uid=1000(ユーザー名) gid=1000(メイングループ名),1001(サブグループ名1),1002(サブグループ名2),・・・

グループ

メイングループ
ユーザが唯一所属するグループ

サブグループ
ユーザがメイングループの他に所属するグループ。複数〇

コマンド 内容
groups グループを表示
groupadd グループ追加
groupdel グループ削除
groupmod グループ変更

groups

所属グループを表示

グループ名1 グループ名2 ・・・

groupadd

グループ追加
# groupadd (グループ名)

groupdel

グループ削除
# groupdel (グループ名)

groupmod

グループ情報変更
# groupmod (グループ名)

グループ情報(一覧)

/etc/group(テキストファイル)

・グループ名
・グループID(GID)
・メンバーリスト

ユーザー情報(一覧)

/etc/passwd(テキストファイル)

・ユーザ名(ログイン名)
・(暗号化パスワード)
Xと記載される
・ユーザ番号(UID)
・グループ番号(GID)
・コメントフィールド(名前など)
・ホームディレクトリーのパス
・ログイン・シェル

ユーザー

コマンド 内容
users ログインユーザーを表示
useradd ユーザー追加
userdel ユーザー削除
passwd パスワード変更
usermod 所属グループ変更

users

ログインユーザーを表示
# users

useradd

ユーザー追加
# useradd (ユーザー名)

userdel

ユーザー削除
# userdel (ユーザー名)

passwd

パスワード変更
# passwd (ユーザー名)

usermod

所属グループ変更
# usermod [オプション] (ユーザー名)

メイングループ変更
# usermod -g (グループ名) (ユーザー名)

サブグループ変更(置き換え)
# usermod -G (サブグループ名1),(サブグループ名2),(サブグループ名3) (ユーザー名)

サブグループ追加
# usermod -aG (サブグループ名) (ユーザー名)

gpasswd

所属グループ変更

機能 オプション
ユーザ追加 -a $ gpasswd -a (ユーザ名) (グループ名)
ユーザ削除 -d $ gpasswd -d (ユーザ名) (グループ名)
所属ユーザ指定 -M $ gpasswd -M (ユーザ名1),(ユーザ名2),(ユーザ名3),・・・ (グループ名)

VirtualBoxにおける共有フォルダ管理グループへのユーザ追加
# sudo gpasswd -a (ユーザ名) vboxsf

su

ユーザー切り替え
(指定したユーザーでシェルを再起動)
$ su – ユーザー名
※ubuntu専用
初期設定でrootアカウントにはパスワードが設定されていないのでrootにユーザー変更できない
$ su – ($ su – root と同じ)
は×
一時的にrootユーザーに変更
$ sudo su –
$ sudo su – root

sudo

指定したユーザーでコマンドを実行する

$ sudo -u ユーザー名 pwd
ユーザー未指定の場合はrootで実行
$ sudo pwd

管理者のみアクセス可能なディレクトリでの操作
sudo sh -c “cd ~; ls;”
sudo sh -c “cd ~; cat ~;”
-c プロセスを新規に生成する

sudo設定ファイルの編集
visudo

権限

chown

所有者変更
# chown (所有者) (ファイル名)
# chown test test.txt

ディレクトリ内の全ファイルの所有者を変更
# chown -R (所有者) (ディレクトリ名)
# chown -R test test.txt

グループ、所有者を同時に設定
# chown -R (所有者:グループ) (ファイル/ディレクトリ名)
# chown test:test test.txt

chmod

数字による指定

権限変更
# chmod (読取権限)(書込権限)(実行権限) (ファイル名)
# chmod (読取権限)(書込権限)(実行権限) (ディレクトリ名)
# chmod 777 test.txt

 Owner  Group  Other
読/書/実 読/書/実 読/書/実
r/w/x r/w/x r/w/x

読み取り権限/書き込み権限/実行権限の有無を、
4/2/1
の数字の合計で表す。
全て有り=7
読取+実行=5
等。

表示 2進数 設定値
rwxrwxrwx 111111111 chmod 777 ~
r-xr-xr-x 101101101 chmod 666 ~
r-xr-xr-x 100100100 chmod 555 ~
r–r–r– 100100100 chmod 444 ~
-wx-wx-wx 011011011 chmod 333 ~
-r–r–r- 010010010 chmod 222 ~
–x–x–x 001001001 chmod 111 ~
——— 000000000 chmod 000 ~

定数による指定

chmod (対象) (効果) (結果)
chmod [ugoa][+-=][rwx]

【対象】

定数 機能
u 所有者の権限
g グループの権限
o その他のユーザーの権限
a すべての権限

chmod u+r 所有者にr権限を追加
chmod ug+r 所有者、グループにr権限を追加
chmod ugo+r 所有者、グループ、他にr権限を追加
chmod a+r 全対象にr権限を追加

【効果】

定数 機能
+ 後に記述した権限を付加する
後に記述した権限を削除する
= 後に記述した権限にする

chmod u+r 所有者にr権限を追加
chmod u-r 所有者からr権限を削除
chmod u=r 所有者の権限をrのみに設定(-r-)

【結果】

定数 機能
r 読み込み権限
w 書き込み権限
x 実行権限

chmod u+r 所有者にr権限を追加
chmod u+w 所有者にw権限を追加
chmod u+x 所有者にx権限を追加

chgrp

ファイルの所属グループ変更
# chgrp (グループ名) (ファイル名)

セキュリティ

rootでのssh禁止

ssh」参照

設定ファイル
/etc/ssh/sshd_config

#PermitRootLogin yes

PermitRootLogin no

sshポート変更

ssh」参照

設定ファイル
/etc/ssh/sshd_config

#Port 22

Port XXXXX

chroot

ルートディレクトリの変更
現プロセス(子プロセス)

ルートディレクトリ対象
/test
└bin
└lib64
binとlib64は必要

cd /

bin home lib var etc ・・・

chroot test
cd /

bin lib64
ホームディレクトリが/testに変更される

cd ..
上階層に移動
ls
bin lib64
/testより上階層には移動できない

Linux コマンド:コンパイル・インストール・デバッグ

インストール

ソースファイルからインストール

# make install

パッケージ管理ツールからインストール

パッケージ管理ツール種類

Redhat系 Debian系 機能
rpm dpkg 依存パッケージをユーザに通知
yum apt 依存パッケージを自動インストール

PRM(RedHat)系
RedHad社が開発したパッケージシステムを用いる
・Fedora
・CentOS

DEB(Debian)系
・ubuntu
・Debian GNU/Linux

パッケージのインストール

リポジトリーからパッケージをインストール
yum install (パッケージ名)

リポジトリを指定してインストール
yum install --enablerepo=remi (パッケージ名)
yum install --enablerepo=epel (パッケージ名)

パッケージを削除する
yum remove (パッケージ名)

アップデートがあるかチェック
yum check-update

パッケージ全体をアップデートする
yum update

特定のパッケージをアップデートする
yum update (パッケージ名)

質問に対して全て自動的に「YES」で回答する
yum -y ~

パッケージファイルからインストール
rpm -ivh (パス).rpm

パッケージを削除する
rpm -evh (パッケージ名)

特定のパッケージをアップデートする
rpm -Uvh パッケージファイル名

リポジトリーからパッケージをインストール
apt-get install (パッケージ名)

パッケージを削除する
apt-get remove (パッケージ名)
dpkg -r (パッケージ名)

アップデートがあるかチェック
apt-get -s upgrade
apt-get -s dist-upgrade

パッケージ全体をアップデートする
apt-get upgrade
apt-get dist-upgrade

特定のパッケージをアップデートする
apt-get upgrade (パッケージ名)
apt-get dist-upgrade (パッケージ名)

パッケージの情報

パッケージの情報
yum search string

リポジトリのすべてのパッケージを表示
yum list

利用可能なパッケージを表示
yum list available

インストールされたパッケージを表示
yum list installed

パッケージについての情報を表示
yum info (パッケージ名)

特定のファイルを含むパッケージの表示
yum provides filename

インストールされたパッケージを表示
rpm -qa

パッケージについての情報を表示
rpm -qip (パッケージ名).rpm

特定のファイルを含むパッケージの表示
rpm -qf path/filename

インストール済みのパッケージの情報を表示
rpm -qi (パッケージ名)

パッケージに含まれているファイルの表示
rpm -ql (パッケージ名)
rpm -qlp (パッケージ名).rpm

特定のパッケージが依存するパッケージのリスト
rpm -qR (パッケージ名)

特定のパッケージに依存するパッケージのリスト
rpm -q –whatrequires (パッケージ名)

パッケージの情報
apt-cache search string

リポジトリのすべてのパッケージを表示
apt-cache search .

利用可能なパッケージを表示
apt-cache dumpavail

パッケージについての情報を表示
apt-cache show (パッケージ名)

特定のパッケージが依存するパッケージのリスト
apt-cache depends (パッケージ名)

特定のパッケージに依存するパッケージのリスト
apt-cache rdepends (パッケージ名)

パッケージ種類

i386:32ビット用
x86_64:64ビット用

リポジトリ

一覧

リポジトリ一覧
yum repolist all

追加

【外部ファイルを直接】
epelを追加
$ rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

remiを追加
$ rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

【ローカルにダウンロード後】
epelを追加
$ wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ rpm -ivh epel-release-6-8.noarch.rpm

remiを追加
$ wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ rpm -ivh remi-release-6.rpm

リポジトリファイル

/etc/yum.repos.d/~
にリポジトリファイルが作成される

※例:epel.repo
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
有効設定
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

ダウンロード

wget

ファイルのダウンロード
$ wget http://google.com

curl

GET

WEBアクセス方法GET

POST

WEBアクセス方法POST

ファイルのダウンロード

WEBアクセス方法ダウンロード

gem

rubyのパッケージ管理システム
Linuxからはデフォルトで利用可能

vagrantのインストール。この場合バージョンが勝手に決められる
$ gem install vagrant

コンパイル

GCC

GNU Compiler Collection
C/C++、Java等のコンパイラ群
コマンドラインから実行する

makeツール

Makeファイルに従ってコンパイル(GCC利用)、リンク、インストール等を行うツール
≒Ant

Makeファイル

makeコマンド時に参照されるビルド設定ファイル

手順

Makeファイル生成
# ./configure

実行ファイル生成
# make

デバッグ

GDB

GNU DeBuggr
GCCでコンパイルされたプログラムのデバッグツール
Linux上で動作させる

GDB命令一覧

命令 機能
gcc -g -o0 (ソースファイル) デバッグ用コンパイル gcc -g -o0 test.c
gdb (実行ファイル) gdb起動 gdb test.o
break main main関数一でブレーク break main
break (ソースファイル):N 指定行でブレーク break test.o:100
run デバッグ実行開始 run
quit gdb終了 quit
next ステップアウト next
step ステップイン step
list ブレーク位置のソース表示 list
print ブレーク位置の変数表示 print
whatis
ptype
ブレーク位置の変数型表示 whatis
ptype