linux OS別のコマンドなどメモ ubuntu centos debian

うろ覚えが多いのでメモ、きちんとやると書き切れないのですが、ざっくりと、、、

#ユーザ作成、SSH設定
##ユーザ作成　パスワード指定

```command.
add user [user name]
passwd [uer name]
```

##sudoの登録

```command.
visudo
```

```/etc/sudoers.
#user host=(権限) command
[user] ALL=(ALL) ALL
#パスワードなしで実行できるようにするときは下記の記述
[user] ALL=NOPASSWD: ALL
```
ユーザが所属しているグループにsudoなどがあるとパスワードが求められるので確認をする
```
goups [user]
```
##sshの設定

```command.
vim /etc/ssh/sshd_config 
```

```/etc/ssh/sshd_config.
#rootログインの拒否をしてユーザでのパスワードログインであれば下記の設定
PermitRootLogin no
#もしくは
PermitRootLogin without-password


#秘密鍵での認証を設定する場合下記の設定を行う

#RSA認証の許可(デフォルトでされてるはず)
RSAAuthentication yes

#パスワード認証の拒否
PasswordAuthentication no

#チャレンジレスポンス認証の拒否
ChallengeResponseAuthentication no

#公開鍵の保存場所の指定(コメントアウトがされてれば外す)
AuthorizedKeysFile	%h/.ssh/authorized_keys
```

##ssh公開鍵、秘密鍵の作成配置

公開鍵と秘密鍵の作成
```command.
ssh-keygen -t rsa
```

接続先のマシンに作成された公開鍵`[ファイル名].pub`を安全な方法で`/home/(ログインするユーザ)/.ssh`ディレクトリへ入れる
下記コマンドでファイル名を変更し、権限などの設定を行う

```command.
#ファイル名の変更
mv [ファイル名].pub authorized_keys
#所有者をユーザへ変更
chown [user] authorized_keys
#グループをユーザグループへ変更
chgrp [user] authorized_keys
#権限を変更
chmod 600 authorized_keys
#ディレクトリの権限変更
chmod 700 .ssh
```

接続元のマシンの設定(Linux)

```command.
#作成された秘密鍵を`id_rsa`(任意の名前で可)へリネームし`/home/[user]/.ssh/`ディレクトリへ移動
mv [ファイル名] /home/[user]/.ssh/id_rsa

#/.ssh/configを編集
vim /.ssh/config
```

```/.ssh/config.
#秘密鍵を追加
IdentityFile ~/.ssh/id_rsa
```

sshdの再起動

```command.
#centOS系
/etc/init.d/sshd restart
#もしくは
systemctl restart sshd
service ssh restart

#ubuntu debian系
/etc/init.d/sshd restart
#もしくは
service ssh restart
```

#サービス自動起動設定ツール

##chkconfig
| コマンド       | 説明　　　　　      |
|:-----------------|:------------------|
| chkconfig --list [service]|  サービスの自動起動状態 |
| chkconfig --list |  全サービスの自動起動状態|
| chkconfig [--level levels(2345 2 etc...)]　[service] on |  サービスの自動起動を有効にする |
| chkconfig [service] off |  サービスの状態起動を無効にする |
| chkconfig --add [service] |  サービスを登録する |
| chkconfig --del [service] |  サービスの登録を削除 |

##sysv-rc-conf
|コマンド|説明|
|:-------------|:--------|
|sysv-rc-conf [service] on|自動起動の設定|
|sysv-rc-conf [service] off|自動起動の設定解除|
|sysv-rc-conf|TUIを使用して自動起動の設定|
|sysv-rc-conf --list [service]|サービスの自動起動状態|

#SElinux
`getenforce`で確認
`/etc/selinux/config`を編集
`SELINUX=disabled`として無効化、サーバ再起動が必要

#centos

##パッケージ管理

| コマンド       | 説明　　　　　      |
|:-----------------|:------------------|
| yum check-update |    アップデート可能なパッケージ一覧|
| yum update        |  全パッケージのアップデート |
| yum upgrade          | update --obsoletesと同等 |
| yum install [package]|    パッケージのインストール |
| yum remove [package]|   パッケージの削除 |
| yum seach keyword  |    キーワードでパッケージを検索 |
| yum list installed  |  インストール済みパッケージ一覧 |

update時にカーネルを除外

```/etc/yum.conf
[main]
exclude=kernel* #この行がなければ追加
```

##サービス関連


##~centos6
| コマンド       | 説明　　　　　      |
|:-----------------|:------------------|
| service [service] status |    サービスの状態|
| service --status-all   |  全サービスの状態 |
| service [service] [start stop restart] | サービスの起動、停止、再起動 |
| /etc/init.d/[service] [start stop restart]| サービスの起動、停止、再起動 |


###自動起動ファイルの作成(System V Init系)
下記のようなファイルを作成し実行権限を付与して/etc/init.d配下に置く

```test.
#!/bin/bash
#
#chkconfigで使用するランレベルの登録
#2345はランレベルの指定
#85は`ls /etc/rc.d/rc3.d/`で見た時のS**の番号を表し、起動する番号
#15、停止する番号
# chkconfig: 2345 75 35　
#
#chkconfigで使用する名前
# description: example　
#
#プロセス名
# processname: example

case "$1" in
  start)
        /usr/bin/example
        echo "Start"
        ;;
  stop)
        killall example
        echo "Stop"
        ;;
  *)
        echo $"Usage:start|stop|restart"
esac
exit 0

```


###iptable関連

下記コマンドにて設定ファイルの編集

```command.
# vi /etc/sysconfig/iptables
```

```iptables.
*filter

:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

#pingの許可する
-A INPUT -p icmp -j ACCEPT

#接続済みの通信許可
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#ループバックアドレスへの通信許可
-A INPUT -i lo -j ACCEPT

#外への通信はすべて許可する
-A　OUTPUT -p tcp --dport -j ACCEPT

#外からの通信でtcp特定ポート宛ての通信許可
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

#特定のIPからの通信のみ許可する場合
-A INPUT -m state --state NEW -p tcp -s 192.168.12.0/24 --dport 20:21 -j ACCEPT

#ログの取得"iptables:"はログ出力時の識別子
-A INPUT -j LOG --log-prefix "iptables:" --log-level=error

COMMIT
```

サービスの再起動

```
/etc/init.d/iptables start

```

##centos7~
|コマンド|説明|
|:-----------|:-----------|
|systemctl list-unit-files -t service|サービス一覧|
|systemctl status [service].service|サービスのステータス確認|
|systemctl enable [service].service|サービスの自動起動|
|systemctl disable [service].service|サービスの自動起動解除|
|systemctl start|stop|restart [service].service|サービスの起動、停止、再起動|


###自動起動ファイルの作成(systemd系)
`/etc/systemd/system/[service].service`

```[service].service
[Unit]
#サービス名
Description = [service]

[Service]
#起動コマンド
ExecStart = [command]
#停止コマンド
ExecStop = [command]
#リロードコマンド
ExecReload = [command]

#ExecStartPre 実行前に実行
#ExecStartPost　実行後に実行

#繰り返し起動の設定
Restart = always
#フォアグラウウンドで実行
Type = simple
#フォークならType=forking

[Install]
#通常起動
WantedBy = multi-user.target
#GUIならWantedBy =　graphical.targetと記述
```

###firewalld(INPUT制御に特化している)
|コマンド|説明|
|:-------------|:--------|
|firewall-cmd --get-services|定義されているサービス一覧|
|firewall-cmd --get-services|許可サービス|
|firewall-cmd --list-all|設定確認|
|firewall-cmd --reload|リロード|
|firewall-cmd --list-services --zone=public|public(INPUT制御)の設定確認|
|firewall-cmd --permanent　--add-service=[service] --zone=public|サービスをpublicへ追加(--permanentがないと再起動後にリセットされるがその場合はrestartもしくはreloadが必要)|
|firewall-cmd --permanent　--remove-service=[service] --zone=public|サービスをpublicから削除(--permanentがないと再起動後にリセットされるがその場合はrestartもしくはreloadが必要)|
|firewall-cmd --permanent --add-port=[port]/[protocol]|サービス名ではなくポート、プロトコル指定で設定|
|firewall-cmd --query-service=[service] --zone=public|サービスがpublicで許可されているか確認|

```/usr/lib/firewalld/services/[service].xml
<?xml version="1.0" encoding="utf-8"?>
<service>
 <short>submission</short>
 <description> [service]
 </description>
 <port protocol="[prptocol]" port="port"/>
</service>
```

#ubuntu debian

##パッケージ管理

| コマンド       | 説明　　　　　      |
|:-----------------|:------------------|
| yum check-update |    アップデート可能なパッケージ一覧|
| apt-get update    |  パッケージリストの更新 |
| apt-get upgrade  | パッケージの更新 |
|apt-get dist-upgrade| パッケージの構成変更を行う、更新を行う(カーネルも含む)|
|dpkg -l [package]|パッケージ一覧|
| apt-get install [package]|    パッケージのインストール |
| apt-cache search [package] |   パッケージを検索 |
| apt-get remove [package]|   パッケージの削除 |
| apt-get purge [package]  |  設定ファイルも含めて削除 |
|apt-get autoremove|不要パッケージの削除|
|apt-get --purge --force-yes remove [package]|パッケージの強制削除|

##サービス関連
`init`デーモンの調べ方

```command.
dpkg -S /sbin/init

upstart: /sbin/init
#もしくは
systemd-sysv: /sbin/init
```

###upstart系サービスコマンド
|コマンド|説明|
|:-----------|:-----------|
|initctl start stop restart [job]|ジョブの起動、停止、再起動|
|initctl status|ジョブの状態確認|
|initctl reload|リロード|
|initctl list|ジョブのリスト表示
|initctl reload-configuration|設定の読み込み|

####upstart系サービス登録
`/etc/init/[job].conf `を編集

```/[job].conf
#説明
description "job"

#著者
author  "ototo"

#スタートランレベルの設定
start on runlevel [2345]

#停止ランレベルの設定
stop on runlevel [016]

#作業ディレクトリの設定
chdir [dir]

#起動させるコマンド
exec [command]

#繰り返し起動の指定
respawn

#ジョブ前後の処理(書かなくてもOK)
#pre-start ジョブ開始前
#post-start　ジョブ開始後
#pre-stop　ジョブ停止前
#post-stop　ジョブ停止後
pre-start script
　　[command or check]
end script
```

編集後設定の再読みこみ実施

```command.
initctl reload-configuration
```

###systemd-sysv系サービスコマンド
|コマンド|説明|
|:-----------|:-----------|
|systemctl list-unit-files -t service|サービス一覧|
|systemctl status [service].service|サービスのステータス確認|
|systemctl enable [service].service|サービスの自動起動|
|systemctl disable [service].service|サービスの自動起動解除|
|systemctl start stop restart [service].service|サービスの起動、停止、再起動|

###自動起動ファイルの作成(systemd系)
`/etc/systemd/system/[service].service`

```[service].service
[Unit]
#サービス名
Description = [service]

[Service]
#起動コマンド
ExecStart = [command]
#停止コマンド
ExecStop = [command]
#リロードコマンド
ExecReload = [command]

#ExecStartPre 実行前に実行
#ExecStartPost　実行後に実行

#繰り返し起動の設定
Restart = always
#フォアグラウウンドで実行
Type = simple
#フォークならType=forking

[Install]
#通常起動
WantedBy = multi-user.target
#GUIならWantedBy =　graphical.targetと記述
```

###update-rc.d関連
|コマンド|説明|
|:-------------|:--------|
|update-rc.d [servise] defaults|自動起動の登録|
|update-rc.d -f [service] remove|自動起動の登録解除|
|sudo update-rc.d [service] enable 2 3 4 5| 自動起動設定(ランレベルの指定は無くても可)|
|sudo update-rc.d [service] disable 2 3 4 5|自動起動設定解除(ランレベルの指定は無くても可)
|ls -l /etc/rc*.d/*[service]|サービスの設定状態確認|

###insserv関連(debian6~ Ubuntu 12~ 推奨)
|コマンド|説明|
|:-------------|:--------|
|insserv -d [service]|自動起動の登録|
|insserv -r [service]|自動起動の登録解除|
|insserv [service],start=2,3,4,5| 自動起動設定(ランレベルの指定は無くても可)|
|insserv [service],stop=2,3,4,5|自動起動設定解除(ランレベルの指定は無くても可)|
|ls -l /etc/rc*.d/*[service]|サービスの設定状態確認|


###autostart(ウィンドウマネージャでデスクトップアプリを自動起動したい時など)

`~/.config/lxsession/LXDE/autostart`ファイルの編集する方法
(ラズパイはLXDEではなくLXDE-pi)

下記のように追記
```~/.config/lxsession/LXDE/autostart
@[command]
```
`~/.config/autostart`に下記のような`.desktop`ファイルを設置する方法

```example.desktop
[Desktop Entry]
Type=Application
#アプリケーション名
Name=[name]
#コマンド名
Exec=[command]
Terminal=false
```

##iptable関連

`iptables-persistent`のインストール

```command.
apt-get install iptables-persistent
```
設定ファイルの編集

```command.
vim /etc/iptables/rules.v4
```
```command.
vim /etc/iptables/rules.v6
```
下記編集例

```/etc/iptables/rules.*
*filter

#ループバックアドレスへの通信許可それ以外は破棄
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

#pingの許可する
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

#接続済みの通信許可
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#外への通信はすべて許可する
-A OUTPUT -j ACCEPT

#外からの通信でtcp特定ポート宛ての通信許可
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

#特定のIPからの通信のみ許可する場合
-A INPUT -m state --state NEW -p tcp -s 192.168.12.0/24 --dport 20:21 -j ACCEPT

#ログの取得"iptables:"はログ出力時の識別子
-A INPUT -j LOG --log-prefix "iptables:" --log-level=error

#条件に一致する物以外のパケットは破棄
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT
```
設定の反映サービスの再起動

```command.
/etc/init.d/iptables-persistent save | restart
＃もしくは
/etc/init.d/netfilter-persistent save | restart
```