ファイル検索でよく使われるfindと併用するといいらしい。
1 |
$ find path -name filename -exec rm -fr {} \; |
WindowsのローカルからLinuxのリモートにSCPしたときに、余計な「desktop.ini」が一緒にアップされちゃったときとか。
1 |
$ find /home/user -name desktop.ini -exec rm -fr {} \; |
※管理上の都合により2015年11月以前の記事は削除いたしました
ファイル検索でよく使われるfindと併用するといいらしい。
1 |
$ find path -name filename -exec rm -fr {} \; |
WindowsのローカルからLinuxのリモートにSCPしたときに、余計な「desktop.ini」が一緒にアップされちゃったときとか。
1 |
$ find /home/user -name desktop.ini -exec rm -fr {} \; |
接続元のIP制限を行うとき、一番お手軽なのはやはりTcpWrapperによる制限。
しかしこれだとTCPレベルで一括制限され、ユーザ別の判定はできないので、ユーザ別やグループ別に制限したいときはsshdで制限するのがよろしいかと。
1.sshd_configを編集
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# vi /etc/ssh/sshd_config --------------- #ユーザ名がhogeのみ許可、その他は拒否 AllowUsers hoge # ユーザ名がhogeとfugaのみ許可、その他は拒否 AllowUsers hoge fuga # ユーザ名がhogeで、ホストが192.168.1.2の場合のみ許可、その他は拒否 AllowUsers hoge@192.168.1.2 # ホストが192.168.1.2の場合のみ許可、その他は拒否 AllowUsers *@192.168.1.2 # グループ名がigreksのユーザのみ許可、その他は拒否 AllowGroups igreks --------------- |
2.sshd再起動
1 |
# service sshd restart |
以上。
参考URL)
・環境はCentOS5.5および7.2
1.設定ファイルバックアップ
1 2 |
# cp /etc/hosts.deny /etc/hosts.deny.origin # cp /etc/hosts.allow /etc/hosts.allow.origin |
2.許可する接続元を指定
“hosts.allow”に許可する接続元を指定。”hosts.deny”で全接続を拒否。
1 2 3 4 5 6 7 |
# vi /etc/hosts.allow ----- + sshd : 123.123.123.123 + sshd : 123.123.0.0/16 + sshd : 123.123.0.0/255.255.0.0 + sshd : 192.168.1.0/255.255.255.0 ----- |
1 2 3 4 |
# vi /etc/hosts.deny ----- + sshd : all ----- |
3.許可されていない接続元から接続できないことを確認
1 2 |
$ ssh user@example.jp ssh_exchange_identification: Connection closed by remote host |
OK.
参考URL)
複数のサーバを運用している場合、それぞれのサーバにどこからでも接続できる状態だと、セキュリティやスタッフ管理の面でよろしくないので、プロキシサーバを使用してセキュリティを高める。
1.プロキシ用サーバ作成
まずプロキシ用のバーチャルサーバを立ち上げ、NICや必要なIP(最低限グローバルとローカル1つずつ)を割り当てる。
やり方については各ベンダーでマニュアルなど用意していると思うので割愛する。
なおスペックについては、SSHトンネルするだけなので、最低限のリソースでOKかと思う。
今回はCentOS7.2 Xen 64bitを使用した。
2.ユーザ作成
弊社の場合は某社のクラウドなので最初はVPN接続してログインユーザ作成
1 2 3 4 |
# useradd suzuki # passwd suzuki # exit; |
ちなみにAWSであればec2-userなどで最初からログインできるので上記は不要
3.rootログイン禁止
使いやすいPuttyやPoderosaなどのSSHクライアントで接続
・sshのrootログイン禁止
1 2 3 4 5 |
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.origin # vi /etc/ssh/sshd_config ---- + PermitRootLogin no ---- |
4. ファイアウォールの設定
今回はポート10022(ssh用)だけを許可する。
やり方はこちらを参照。
5. sshのポート番号変更
攻撃回避のためssh用のポートを22から10022に変更する。
やり方はこちらを参照。
6. 不要サービスの停止
・必要最低限のサービスだけで動かしたいので不要なものは停止する。
1 2 3 4 5 6 |
# systemctl disable crond.service # systemctl disable atd.service # systemctl disable auditd.service # systemctl disable postfix.service # systemctl disable rngd.service # systemctl disable wpa_supplicant.service |
判断はこちらとほぼ同じ
違いはcron停止、firewalld残し。
・SELinuxも無効に
1 2 3 4 |
# vi /etc/sysconfig/selinux ---- + SELINUX=disabled ---- |
7. スタティックルーティングの設定
弊社の場合ローカルネットワークのセグメントがもう1つあり、そちらのセグメント(172.18.0.0/16)にも接続できるようにするためスタティックルーティングの設定を行う。
・ローカルネットワークのデフォルトルーティング設定ファイルを無効化(デバイス名をeth1とした場合)
1 2 |
# mv /etc/sysconfig/network-scripts/route-eth1 /etc/sysconfig/network-scripts/route-eth1.origin # mv /etc/sysconfig/network-scripts/rule-eth1 /etc/sysconfig/network-scripts/rule-eth1.origin |
⇒ No such file or directoryとなっても、もともと無いのでそのままでOK
・別セグメント(172.18.0.0/16)へのルート設定追加
1 |
# echo "172.18.0.0/16 via 172.16.255.254 dev eth1" >> /etc/sysconfig/network-scripts/route-eth1 |
・ネットワーク再起動
1 |
# systemctl restart network.service |
(service network restartでも一応いける)
ちなみにCentOS7から採用されたnmcliで行うときは、
1 2 |
# nmcli connection modify eth1(またはeno1) +ipv4.routes "172.18.0.0/16 172.16.255.254" # nmcli connection reload |
のようなコマンドを打つが、ベンダーの仕様の関係なのか、eth1もeno1もnmcliでは認識されていなかった。
ただNetworkManagerは動いてるのでipコマンドは通る。昔の名前(eth**)でデバイス名が認識されていた。
やり方あるのかもしれんがネットワークは疎通してるのでまあいいか。
nmtuiで行う方法もあるらしいが、TUI画面は起動したがなぜかうまく動かなかった、、、。
・ルート確認
1 2 3 4 5 |
ip route : 172.16.0.0/16 dev eth1 proto kernel scope link src 172.16.2.33 172.18.0.0/16 via 172.16.255.254 dev eth1 : |
ちなみにベンダー側のコンソールでネットワークの再構築を行うとどうなるか。
→案の定スタティックルーティングの設定が初期化された
→ネットワーク再構築をしたら、再度スタティックルートの設定を行う必要あり。
・疎通確認
1 2 3 4 |
$ ssh user@172.18.***.*** The authenticity of host '172.18.***.*** (172.18.***.***)' can't be established. RSA key fingerprint is 57:fe:50:d9:58:0d:cb:a0:c2:75:09:dc:22:07:32:45. Are you sure you want to continue connecting (yes/no)? |
OK。
以上で基本的なプロキシ構成は完了。
プロキシを使用するスタッフ数分、useraddしてユーザを作成し、それぞれ接続して使用する。
あとは必要に応じて鍵認証にしたり、IP制限したり、トンネルするときのやり方を社内で決めてあげればOK。
スタッフが辞めた場合は、userdelしてそのスタッフ用のユーザを削除してやればOK。
参考URL)
1.mariaDBの削除
CentOS7にはデフォルトで競合するmariaDBが入っているので削除する
・mariaDBのインストール確認
1 2 |
$ rpm -qa | grep maria mariadb-libs-5.5.52-1.el7.x86_64 |
・mariaDBとデータ削除
1 2 |
$ sudo yum remove mariadb-libs $ sudo rm -rf /var/lib/mysql |
2.MySQL5.7のインストール
・公式リポジトリ追加
本記事執筆時では、mysql57-community-release-el7-11.noarch.rpmが最新 のよう。
1 |
# rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm |
・インストール
1 |
# yum install -y --enablerepo=mysql57-community mysql-community-server |
・確認する
1 2 |
# mysqld --version mysqld Ver 5.7.18 for Linux on x86_64 (MySQL Community Server (GPL)) |
・自動起動設定
1 |
# systemctl enable mysqld.service |
・起動する
1 |
# systemctl start mysqld.service |
3.mysqlに入る
・初期パスワード確認
1 2 |
# grep 'temporary password' /var/log/mysqld.log 2017-08-23T12:11:58.756355Z 1 [Note] A temporary password is generated for root@localhost: ****** |
・******の部分がパスワード。このパスワードを使って入る。
1 2 3 4 5 6 |
$ mysql -uroot -p Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.18 : |
・SQL発行の前に、新しいパスワードを設定する必要があるので設定する。
1 2 |
$ mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'ThisIsNewPasswd!'; Query OK, 0 rows affected (0.00 sec) |
・ちなみにパスワードの強度が低いと怒られて変更できない。
1 2 |
$ mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements |
・SQL発行テスト
1 2 3 4 5 6 7 8 |
$ mysql> select host, user from mysql.user; +-----------+-----------+ | host | user | +-----------+-----------+ | localhost | mysql.sys | | localhost | root | +-----------+-----------+ 2 rows in set (0.00 sec) |
これでOK。
参考URL)
生のSQLで取得する場合は、
1 |
SELECT LAST_INSERT_ID(); |
で取得できます。
DBIを使用している場合は、以下のようにステートメントハンドルから取得できます。
1 2 3 4 5 6 7 8 |
(この辺で接続処理) : $sth->execute(" INSERT INTO `table_name` (campany, pref) VALUES( 'Igreks Inc.', "東京" ) ") || die $sth->errstr(); my $last_insert_id => $sth->{mysql_insertid}; |
参考URL)
1 2 3 4 5 6 7 8 9 10 11 |
# firewall-cmd --list-all ↓ public (default, active) interfaces: eth0 eth1 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules: |
1 2 3 4 |
# vi /etc/ssh/sshd_config ↓ - # Port 22 + Port 10022 |
1 |
# systemctl restart sshd.service |
1 |
# firewall-cmd --remove-service=ssh --zone=public --permanent |
既存のssh.xmlをコピーしてssh-10022.xmlを作成する
1 |
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-10022.xml |
ssh-10022.xmlファイル内のポート番号を22から10022に変更する
1 2 3 4 |
# vi /etc/firewalld/services/ssh-10022.xml ↓ - <port protocol="tcp" port="22"/> + <port protocol="tcp" port="10022"/> |
ファイアウォール設定に追加
1 |
# firewall-cmd --add-service=ssh-10022 --zone=public --permanent |
1 |
# firewall-cmd --reload |
1 2 3 4 5 6 7 8 9 10 11 |
# firewall-cmd --list-all ↓ public (default, active) interfaces: eth0 eth1 sources: services: dhcpv6-client ssh-10022 ports: masquerade: no forward-ports: icmp-blocks: rich rules: |
参考URL)
1 2 3 4 5 |
# systemctl status firewalld.service ↓ ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) |
※”…/firewalld.service; disabled;”になっているので自動起動無効
1 |
# systemctl enable firewalld.service |
1 |
# systemctl start firewalld.service |
1 2 3 |
# firewall-cmd --list-services --zone=public --permanent ↓ dhcpv6-client |
1 |
# firewall-cmd --add-service=ssh --zone=public --permanent |
1 |
# firewall-cmd --add-service=mysql --zone=public --permanent |
1 |
# firewall-cmd --remove-service=ssh --zone=public --permanent |
1 |
# ls -lta /usr/lib/firewalld/services/ |
1 2 3 |
# firewall-cmd --list-services --zone=public --permanent ↓ dhcpv6-client mysql ssh |
※mysqlとsshが追加された
※インストール方法は割愛
※firewalldと併用でないのでiptablesを使う場合はfirewalldは停止する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
INPUT基本方針 # iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT Localhostは許可 # iptables -A INPUT -i lo -j ACCEPT sshを許可 # iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT mysqlを許可 # iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT 上記以外は拒否するポリシーに設定 # iptables -P INPUT DROP |
参考URL)
CentOS6まで
1 |
# chkconfig --list |
CentOS7から
1 |
# systemctl list-unit-files -t service |
enabled →自動起動有効
disabled →自動起動無効
static →単体で自動起動設定ができないサービス
CentOS6まで
1 |
# /etc/rc.d/init.d/"サービス名" status |
CentOS7から
1 |
# systemctl status "サービス名(Unit名)" |
例:sshdの状態確認
1 |
# systemctl status sshd.service |
“…/”Unit名”; eabled;” →自動起動有効
“…/”Unit名”; disabled;” →自動起動無効
Active: active (running) →サービス起動中
Active: inactive (dead) →サービス停止中
CentOS6まで
1 |
# chkconfig "サービス名" on/off |
CentOS7から
1 |
# systemctl enable/disable "サービス名(Unit名)" |
例:sshdの自動起動設定
1 |
# systemctl enable sshd.service |
CentOS6まで
1 |
# /etc/rc.d/init.d/"サービス名" "やりたいこと" |
CentOS7から
1 |
# systemctl "やりたいこと" "サービス名(Unit名)" |
例:sshdを起動するとき
1 |
# systemctl start sshd.service |
参考URL)
http://qiita.com/haisaihiroki/items/c38cb3c0a331db9b6f69
すでにバーチャルホスト無しで動いている環境で、バーチャルホストを追加する場合の設定。すぐ忘れるのでメモ。
以下条件。極力オリジナルのhttpd.confは触らない方針で。
最初にまず、デフォルトのServerNameを無効化。
1 |
vi /etc/httpd/conf/httpd.conf |
1 2 3 |
ServerName www.example.com:80 ↓ #ServerName www.example.com:80 |
バーチャルホスト用の設定ファイルを作る。
1 |
vi /etc/httpd/conf.d/vhost.conf |
以下のように記述。
ポイントは、デフォルトのドメインでアクセスしたときの設定も<VirtualHost>ディレクティブで改めてしなければならないということ。
つまりバーチャルで追加したいFQDNのバーチャルホスト設定をしただけではダメ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# Nameベースのバーチャルホスト利用を宣言 NameVirtualHost *:80 #NameVirtualHost *:443 # SSLの設定もする場合。たいていssl.confで宣言されているので不要 # デフォルトドメインでアクセスされた時の設定ここから ######### <VirtualHost *:80> # もしくは _default_:80 DocumentRoot /var/www/html ServerName origin.com:80 <Directory "/var/www/html"> Options -Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> # SSLの設定はssl.confに準じているので特に不要 # 設定を上書きしたいときはここに書く # デフォルトドメインでアクセスされた時の設定ここまで ######### # ここから本来追加したいバーチャルホストの設定 # バーチャルホスト1つ目の設定ここから ##################### <VirtualHost *:80> DocumentRoot /home/hoge/hoge.com # 備考 #/home/user以下をDocumentRootにしたい場合は、/home/userの #パーミッションが700だと403エラーになるので、755や705にする必要がある。 ServerName hoge.com.com:80 # ログ出力を分けたい場合 ErrorLog logs/hoge.com-error_log CustomLog logs/hoge.com-access_log common <Directory "/home/hoge/hoge.com"> Options -Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> # SSLの設定もする場合 <VirtualHost *:443> DocumentRoot /home/hoge/hoge.com ServerName hoge.com:443 # ログ出力を分けたい場合 ErrorLog logs/hoge.com-ssl_error_log TransferLog logs/hoge.com-ssl_access_log LogLevel warn <Directory "/home/hoge/hoge.com"> Options -Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> SSLEngine on # SSLv2,v3は使わない SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW # サーバ証明書などの場所 SSLCertificateFile /etc/httpd/conf/ssl.crt/hoge.com.cer SSLCertificateKeyFile /etc/httpd/conf/ssl.key/hoge.com.key SSLCertificateChainFile /etc/httpd/conf/ssl.crt/cacert.cer # この辺以下は一緒 <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 # ログ出力を分けたい場合 CustomLog logs/hoge.com-ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> # バーチャルホスト1つ目の設定ここまで #################### # 他にもバーチャルホストを作る場合、上記をコピペしてここに同じように書く |
参考URL)