tag:crieit.net,2005:https://crieit.net/tags/CentOS7/feed 「CentOS7」の記事 - Crieit Crieitでタグ「CentOS7」に投稿された最近の記事 2022-01-09T23:55:22+09:00 https://crieit.net/tags/CentOS7/feed tag:crieit.net,2005:PublicArticle/17929 2022-01-09T23:55:22+09:00 2022-01-09T23:55:22+09:00 https://crieit.net/posts/centos-cp-interactive-evenif-force-20220109 cp コマンドで強制上書きする際に気を付けること <p>CentOS 系で cp コマンドで強制上書きをする際のメモです。</p> <h2 id="経緯"><a href="#%E7%B5%8C%E7%B7%AF">経緯</a></h2> <p>タイムゾーンを変更するために次のようなコマンドを実行しました。</p> <pre><code class="bash"># cp -pf /usr/share/zoneinfo/Japan /etc/localtime cp: overwrite `/etc/localtime'? </code></pre> <p>すると、 <code>-f</code> オプションで強制上書きするはずなのに上書きするかを聞かれてしまいました。</p> <h2 id="原因"><a href="#%E5%8E%9F%E5%9B%A0">原因</a></h2> <p>これは <code>cp</code> コマンドが <code>cp -i</code> のエイリアスとなっているため。</p> <p>つまり、デフォルトでインタラクティブ(対話式)になっているようです。そのため、仮に <code>-f</code> を付けても <code>-i</code> の方が優先され、上書きするか確認してくる、というわけです。</p> <h2 id="対処"><a href="#%E5%AF%BE%E5%87%A6">対処</a></h2> <p><code>cp</code> コマンドの頭に <code>\</code> を付けるとエイリアスが無効になるため、 <code>-i</code> が外れます。</p> <pre><code class="bash"># \cp -pf /usr/share/zoneinfo/Japan /etc/localtime </code></pre> <p>しばらく気付きませんでした……。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/owlbeck/items/6752a6f1b3fb58d0cb17">CentOSのcpコマンドで強制的にファイルを上書きする - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://dotnsf.blog.jp/archives/2918928.html">Linux の cp コマンドで強制上書き : まだプログラマーですが何か?</a></li> <li><a target="_blank" rel="nofollow noopener" href="http://blog.livedoor.jp/harukisan7/archives/27306085.html">cp コマンドで強制上書きする時に気をつけること。 : リア充キラキラ系のnoteです。@kuromitsu_ka</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/17717 2021-10-20T03:32:37+09:00 2022-08-15T02:03:36+09:00 https://crieit.net/posts/OCI-AWS OCIやAWS上のサーバの環境構築 <h1 id="1.公開鍵認証方式でssh接続"><a href="#1%EF%BC%8E%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC%E6%96%B9%E5%BC%8F%E3%81%A7ssh%E6%8E%A5%E7%B6%9A">1.公開鍵認証方式でssh接続</a></h1> <h2 id="1-1.キーの作成(おまけ)"><a href="#1-1%EF%BC%8E%E3%82%AD%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90%28%E3%81%8A%E3%81%BE%E3%81%91%29">1-1.キーの作成(おまけ)</a></h2> <p>Windowsのコマンドプロンプトで,</p> <pre><code>>ssh-keygen -b 4096 </code></pre> <p>(4096は任意鍵長)と打つと,<code>~/.ssh</code>に公開鍵と秘密鍵が作成される.例えばユーザー名がTanakaさんなら.<code>C:\Users\Tanaka\.ssh</code>に作成される.<br /> 秘密鍵のファイル名が<code>id_rsa</code>で,公開鍵が<code>id_rsa.pub</code>となる.</p> <p>以降の話ではこの節はあまり関係ない.</p> <h2 id="1-2.OCIでインスタンス作成"><a href="#1-2%EF%BC%8EOCI%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E4%BD%9C%E6%88%90">1-2.OCIでインスタンス作成</a></h2> <p>sshキーにスポットをあてて話を進める.<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b15633467219304616f061fd5cf3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b15633467219304616f061fd5cf3.png?mw=700" alt="image.png" /></a></p> <h3 id="1-2-1.キーペアを持っていない場合"><a href="#1-2-1%EF%BC%8E%E3%82%AD%E3%83%BC%E3%83%9A%E3%82%A2%E3%82%92%E6%8C%81%E3%81%A3%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88">1-2-1.キーペアを持っていない場合</a></h3> <p>[ SSHキーの追加 ]欄で,[キー・ペアを自動で生成 ]を選択し,<br /> [公開キーの保存]→[秘密キーの保存]をクリックすることでキーペア取得できる.<br /> この2つのファイルは大切に保管しましょう.(今後も使いまわせるので)</p> <p>保存された2つのファイルは,<br /> 公開鍵が<code>~.key.pub</code><br /> 秘密鍵が<code>~.key</code><br /> となっている.</p> <p>この2つのファイルはどこか好きなディレクトリに格納しとこう.<br /> 例:<code>C:\Users\Tanaka\Documents\Oracle</code></p> <p>インスタンスを作成.</p> <h3 id="1-2-2.キーペアを持っている場合"><a href="#1-2-2%EF%BC%8E%E3%82%AD%E3%83%BC%E3%83%9A%E3%82%A2%E3%82%92%E6%8C%81%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88">1-2-2.キーペアを持っている場合</a></h3> <p>OCIでインスタンスを作成する際,[sshキーの追加]欄がある.<br /> ここで,[公開キー・ファイル(.pub)のアップロード]を選択し,<br /> 自身の公開鍵のファイル(~.key.pub)をドラッグ&ドロップでアップロード.<br /> インスタンスを作成.</p> <h2 id="1-3.ssh接続"><a href="#1-3%EF%BC%8Essh%E6%8E%A5%E7%B6%9A">1-3.ssh接続</a></h2> <p>sshクライアントを起動してssh接続を試みる.</p> <h3 id="1-3-1.TeraTermの場合"><a href="#1-3-1%EF%BC%8ETeraTerm%E3%81%AE%E5%A0%B4%E5%90%88">1-3-1.TeraTermの場合</a></h3> <p>TeraTermを起動させたら[ ホスト(T) ]にIPアドレスを書いて,<br /> その下の[ TCPポート ]欄に「22」と書く※1.<br /> [ ok ]ボタンを押す.</p> <p>[ ユーザ名 ]に指定されたユーザ名を記入.<br /> OCIのCentOSの初期ユーザ名は「opc」※2.</p> <p>[ 認証方式 ]で,[ RSA/DSA/ECDSA/ED25119鍵を使う]を選択し,<br /> 1-1節で作成した秘密鍵のパスを指定.<br /> 例:</p> <pre><code>C:\Users\Tanaka\Documents\Oracle\~.key </code></pre> <p>これで接続できる.</p> <p>※1:sshのデフォルトのport番号が22.これは後で利用できるport番号内で任意番号に変更可能<br /> ※2:AWSのRHEL8の場合は「ec2-user」</p> <h3 id="1-3-2.PowerShellの場合"><a href="#1-3-2%EF%BC%8EPowerShell%E3%81%AE%E5%A0%B4%E5%90%88">1-3-2.PowerShellの場合</a></h3> <p>これだけ.</p> <pre><code>> ssh -i [秘密鍵のパス] [ユーザ名]@[IPアドレス] </code></pre> <p>以上。</p> <h1 id="2. 環境設定"><a href="#%EF%BC%92.+%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A">2. 環境設定</a></h1> <h2 id="2-1.パスワード設定"><a href="#2-1%EF%BC%8E%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E8%A8%AD%E5%AE%9A">2-1.パスワード設定</a></h2> <p>ログインできたら,rootユーザとログインユーザ(今回であればopc)のPassを任意に設定しとく.<br /> まずはroot</p> <pre><code>$sudo passwd root (パスワード聞かれるので適当に打つ) (切り替わるか確かめる) $ su - </code></pre> <p>次は別のユーザ</p> <pre><code>#passwd opc </code></pre> <h2 id="2-2.ssh接続のconfファイル書き換え"><a href="#2-2%EF%BC%8Essh%E6%8E%A5%E7%B6%9A%E3%81%AEconf%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88">2-2.ssh接続のconfファイル書き換え</a></h2> <p>セキュリティの観点から,ssh接続のconfigファイルを書き換える.</p> <pre><code>$ sudo vi /etc/ssh/sshd_config </code></pre> <p>とやるといろいろ書き換えられる.<br /> 英語読めば何の設定なのか想像つくと思うのでてきとーにやっとく.</p> <pre><code>Port 11326 (←port番号を22から変更) PermitRootLogin no (←Rootユーザでログインできないようにする) PubkeyAuthentication yes (←公開鍵認証方式) PasswordAuthentication no (←パスワード認証を無効化) などなど </code></pre> <p>これではまだ反映されないので,reloadしてメモリの設定を読み込ませる.<br /> (restartじゃないよ)</p> <pre><code>$ sudo systemctl reload sshd.service </code></pre> <h2 id="2-3.タイムゾーンを変更"><a href="#2-3%EF%BC%8E%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%BE%E3%83%BC%E3%83%B3%E3%82%92%E5%A4%89%E6%9B%B4">2-3.タイムゾーンを変更</a></h2> <p>タイムゾーンを東京に変更しとく.</p> <pre><code>$ sudo timedatectl set-timezone Asia/Tokyo </code></pre> <h2 id="2-4.変更確かめ"><a href="#2-4%EF%BC%8E%E5%A4%89%E6%9B%B4%E7%A2%BA%E3%81%8B%E3%82%81">2-4.変更確かめ</a></h2> <p>Windows端末のPowerShellでPortして疎通確認.</p> <pre><code>> Test-NetConnection [ IPアドレス ] -Port [ Port番号 ] </code></pre> <h1 id="3.yum"><a href="#3%EF%BC%8Eyum">3.yum</a></h1> <p>参考:https://access.redhat.com/ja/articles/3221791</p> <p>/etc/yum.confと/etc/yum.repos.dの二つの領域に分かれる。<br /> ※rhel8からはyumは廃止されdnfに置き換わっている。使い方はほぼ同じ。<br /> 実際、/etc/をみてみると、</p> <pre><code>[root@publicpc1 etc]# ll|grep yum drwxr-xr-x. 2 root root 57 Mar 24 12:32 yum lrwxrwxrwx. 1 root root 12 Nov 12 00:18 yum.conf -> dnf/dnf.conf drwxr-xr-x. 2 root root 217 Mar 24 12:39 yum.repos.d [root@publicpc1 yum]# pwd /etc/yum [root@publicpc1 yum]# ll total 0 lrwxrwxrwx. 1 root root 14 Nov 12 00:18 pluginconf.d -> ../dnf/plugins lrwxrwxrwx. 1 root root 18 Nov 12 00:18 protected.d -> ../dnf/protected.d lrwxrwxrwx. 1 root root 11 Nov 12 00:18 vars -> ../dnf/vars </code></pre> <p>となっている。</p> <h2 id="3-1. yum.conf(dnf.conf)"><a href="#3-1.+yum.conf%28dnf.conf%29">3-1. yum.conf(dnf.conf)</a></h2> <pre><code>[root@publicpc1 etc]# cat yum.conf [main] gpgcheck=1 installonly_limit=3 clean_requirements_on_remove=True best=True skip_if_unavailable=False </code></pre> <p>[main]はセクション名で、ここに記載されているのはyumのグローバルな設定。</p> <pre><code>gpgcheck </code></pre> <p>は署名チェック。1が有効で、0が無効。</p> <h2 id="3-2. yum.repos.d"><a href="#3-2.+yum.repos.d">3-2. yum.repos.d</a></h2> <pre><code>[root@publicpc1 yum.repos.d]# ll total 32 -rw-r--r--. 1 root root 495 May 5 2021 ksplice-ol8.repo -rw-r--r--. 1 root root 759 Apr 13 2021 mysql-ol8.repo -rw-r--r--. 1 root root 253 Mar 20 2021 oci-included-ol8.repo -rw-r--r--. 1 root root 252 Mar 24 12:39 oracle-epel-ol8.repo -rw-r--r--. 1 root root 694 Mar 24 12:39 oraclelinux-developer-ol8.repo -rw-r--r--. 1 root root 2740 Mar 24 12:39 oracle-linux-ol8.repo -rw-r--r--. 1 root root 470 Mar 11 01:09 uek-ol8.repo -rw-r--r--. 1 root root 243 Mar 11 01:09 virt-ol8.repo </code></pre> <p>oracle-linux-ol8.repoの中身を見てみると、ダウンロードする際に参照するURLが記載されている。<br /> ここが間違っていると適切にインストールできなくなる。<br /> ただ、ここを編集することはなさそう。</p> <p>もし社内にあるレポジトリサーバを利用したい場合、対応は2つある。<br /> 1つは、 yum.repos.d配下に~.repoファイルを追加する。<br /> 2つ目は、<code>yum -y install ~</code>で追加する方法。</p> <p>1つ目の場合</p> <pre><code># vim /etc/ yum.repos.d/test.repo [test] name=test baseurl=http://xxx.xxx/xxx.xxx/xxx gpgcheck=0 </code></pre> <p>など。</p> <h1 id="4.踏み台サーバの準備"><a href="#4%EF%BC%8E%E8%B8%8F%E3%81%BF%E5%8F%B0%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E6%BA%96%E5%82%99">4.踏み台サーバの準備</a></h1> <h2 id="4-1.キーペアの準備"><a href="#4-1%EF%BC%8E%E3%82%AD%E3%83%BC%E3%83%9A%E3%82%A2%E3%81%AE%E6%BA%96%E5%82%99">4-1.キーペアの準備</a></h2> <h2 id="4-2.scpでファイル転送"><a href="#4-2%EF%BC%8Escp%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%BB%A2%E9%80%81">4-2.scpでファイル転送</a></h2> <h2 id="4-3.公開鍵認証の読み込みパス指定"><a href="#4-3%EF%BC%8E%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%83%91%E3%82%B9%E6%8C%87%E5%AE%9A">4-3.公開鍵認証の読み込みパス指定</a></h2> <p><a href="https://crieit.net/posts/OCI-CentOS">https://crieit.net/posts/OCI-CentOS</a></p> <h1 id="5. Port ForwardingでRDP接続"><a href="#5.+Port+Forwarding%E3%81%A7RDP%E6%8E%A5%E7%B6%9A">5. Port ForwardingでRDP接続</a></h1> <h2 id="5.1 sshトンネリング"><a href="#5.1+ssh%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AA%E3%83%B3%E3%82%B0">5.1 sshトンネリング</a></h2> <h1 id="6.Pythonインストール"><a href="#6%EF%BC%8EPython%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">6.Pythonインストール</a></h1> <h1 id="7.OCI CLIの利用方法"><a href="#7%EF%BC%8EOCI+CLI%E3%81%AE%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95">7.OCI CLIの利用方法</a></h1> <p>公式ドキュメントを参考に進めていくとインストールできる。</p> <h2 id="7.1 Oracle Linux8でオンラインインストール"><a href="#7.1+Oracle+Linux8%E3%81%A7%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">7.1 Oracle Linux8でオンラインインストール</a></h2> <p>参考<br /> OCIのクイックインストール:https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm#InstallingCLI__linux_and_unix</p> <h3 id="7.1.1 dnfでインストール"><a href="#7.1.1+dnf%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">7.1.1 dnfでインストール</a></h3> <p>dnfを使用してCLIをインストール</p> <pre><code>$ sudo dnf -y install oraclelinux-developer-release-el8 We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for opc: Ksplice for Oracle Linux 8 (x86_64) 16 MB/s | 1.2 MB 00:00 MySQL 8.0 for Oracle Linux 8 (x86_64) 9.1 MB/s | 2.4 MB 00:00 MySQL 8.0 Tools Community for Oracle Linux 8 (x86_64) 5.2 MB/s | 308 kB 00:00 MySQL 8.0 Connectors Community for Oracle Linux 8 (x86_64) 214 kB/s | 23 kB 00:00 Oracle Software for OCI users on Oracle Linux 8 (x86_64) 38 MB/s | 46 MB 00:01 Oracle Linux 8 BaseOS Latest (x86_64) 62 MB/s | 49 MB 00:00 Oracle Linux 8 Application Stream (x86_64) 48 MB/s | 37 MB 00:00 Oracle Linux 8 Addons (x86_64) 21 MB/s | 4.9 MB 00:00 Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linu 63 MB/s | 53 MB 00:00 Package oraclelinux-developer-release-el8-1.0-7.el8.x86_64 is already installed. Dependencies resolved. Nothing to do. Complete! </code></pre> <p>続いて、cliをインストール</p> <pre><code>$ sudo dnf install python36-oci-cli Last metadata expiration check: 0:00:34 ago on Sat 13 Aug 2022 03:23:12 PM GMT. Dependencies resolved. =============================================================================================== Package Arch Version Repository Size =============================================================================================== Installing: python36-oci-cli noarch 3.14.0-1.el8 ol8_oci_included 14 M Upgrading: python36-oci-sdk x86_64 2.78.0-1.el8 ol8_oci_included 23 M Installing dependencies: python3-arrow noarch 1.1.1-1.el8 ol8_oci_included 119 k python3-jmespath noarch 0.10.0-1.el8 ol8_oci_included 48 k python3-prompt-toolkit noarch 3.0.29-1.0.2.el8 ol8_oci_included 669 k python3-terminaltables noarch 3.1.0-1.0.1.el8 ol8_oci_included 31 k python3-typing-extensions noarch 3.7.4.2-1.el8 ol8_oci_included 47 k python3-wcwidth noarch 0.2.5-3.el8 ol8_oci_included 48 k Transaction Summary =============================================================================================== Install 7 Packages Upgrade 1 Package Total download size: 38 M Is this ok [y/N]: y Downloading Packages: (1/8): python3-jmespath-0.10.0-1.el8.noarch.rpm 520 kB/s | 48 kB 00:00 (2/8): python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch.rpm 4.2 MB/s | 669 kB 00:00 (3/8): python3-arrow-1.1.1-1.el8.noarch.rpm 740 kB/s | 119 kB 00:00 (4/8): python3-terminaltables-3.1.0-1.0.1.el8.noarch.rpm 298 kB/s | 31 kB 00:00 (5/8): python3-typing-extensions-3.7.4.2-1.el8.noarch.rpm 739 kB/s | 47 kB 00:00 (6/8): python3-wcwidth-0.2.5-3.el8.noarch.rpm 711 kB/s | 48 kB 00:00 (7/8): python36-oci-cli-3.14.0-1.el8.noarch.rpm 46 MB/s | 14 MB 00:00 (8/8): python36-oci-sdk-2.78.0-1.el8.x86_64.rpm 37 MB/s | 23 MB 00:00 ----------------------------------------------------------------------------------------------- Total 45 MB/s | 38 MB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Upgrading : python36-oci-sdk-2.78.0-1.el8.x86_64 1/9 Installing : python3-wcwidth-0.2.5-3.el8.noarch 2/9 Installing : python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch 3/9 Installing : python3-typing-extensions-3.7.4.2-1.el8.noarch 4/9 Installing : python3-arrow-1.1.1-1.el8.noarch 5/9 Installing : python3-terminaltables-3.1.0-1.0.1.el8.noarch 6/9 Installing : python3-jmespath-0.10.0-1.el8.noarch 7/9 Installing : python36-oci-cli-3.14.0-1.el8.noarch 8/9 Cleanup : python36-oci-sdk-2.75.1-1.el8.x86_64 9/9 Running scriptlet: python36-oci-sdk-2.75.1-1.el8.x86_64 9/9 Verifying : python3-arrow-1.1.1-1.el8.noarch 1/9 Verifying : python3-jmespath-0.10.0-1.el8.noarch 2/9 Verifying : python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch 3/9 Verifying : python3-terminaltables-3.1.0-1.0.1.el8.noarch 4/9 Verifying : python3-typing-extensions-3.7.4.2-1.el8.noarch 5/9 Verifying : python3-wcwidth-0.2.5-3.el8.noarch 6/9 Verifying : python36-oci-cli-3.14.0-1.el8.noarch 7/9 Verifying : python36-oci-sdk-2.78.0-1.el8.x86_64 8/9 Verifying : python36-oci-sdk-2.75.1-1.el8.x86_64 9/9 Upgraded: python36-oci-sdk-2.78.0-1.el8.x86_64 Installed: python3-arrow-1.1.1-1.el8.noarch python3-jmespath-0.10.0-1.el8.noarch python3-prompt-toolkit-3.0.29-1.0.2.el8.noarch python3-terminaltables-3.1.0-1.0.1.el8.noarch python3-typing-extensions-3.7.4.2-1.el8.noarch python3-wcwidth-0.2.5-3.el8.noarch python36-oci-cli-3.14.0-1.el8.noarch Complete! </code></pre> <p>インストール完了したらバージョン確認。</p> <pre><code>$ oci --version 3.14.0 </code></pre> <h3 id="7.1.2 構成ファイルの設定"><a href="#7.1.2+%E6%A7%8B%E6%88%90%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%A8%AD%E5%AE%9A">7.1.2 構成ファイルの設定</a></h3> <pre><code>$ oci setup config This command provides a walkthrough of creating a valid CLI config file. The following links explain where to find the information required by this script: User API Signing Key, OCID and Tenancy OCID: https://docs.cloud.oracle.com/Content/API/Concepts/apisigningkey.htm#Other Region: https://docs.cloud.oracle.com/Content/General/Concepts/regions.htm General config documentation: https://docs.cloud.oracle.com/Content/API/Concepts/sdkconfig.htm Enter a location for your config [/home/opc/.oci/config]:特に指定しなくてok Enter a user OCID: OCIコンソールよりユーザのOCIDをコピペ Enter a tenancy OCID: OCIコンソールよりコピペ Enter a region by index or name(e.g. 1: af-johannesburg-1, 2: ap-chiyoda-1, 3: ap-chuncheon-1, 4: ap-dcc-canberra-1, 5: ap-hyderabad-1, 6: ap-ibaraki-1, 7: ap-melbourne-1, 8: ap-mumbai-1, 9: ap-osaka-1, 10: ap-seoul-1, 11: ap-singapore-1, 12: ap-sydney-1, 13: ap-tokyo-1, 14: ca-montreal-1, 15: ca-toronto-1, 16: eu-amsterdam-1, 17: eu-frankfurt-1, 18: eu-marseille-1, 19: eu-milan-1, 20: eu-paris-1, 21: eu-stockholm-1, 22: eu-zurich-1, 23: il-jerusalem-1, 24: me-abudhabi-1, 25: me-dcc-muscat-1, 26: me-dubai-1, 27: me-jeddah-1, 28: mx-queretaro-1, 29: sa-santiago-1, 30: sa-saopaulo-1, 31: sa-vinhedo-1, 32: uk-cardiff-1, 33: uk-gov-cardiff-1, 34: uk-gov-london-1, 35: uk-london-1, 36: us-ashburn-1, 37: us-gov-ashburn-1, 38: us-gov-chicago-1, 39: us-gov-phoenix-1, 40: us-langley-1, 41: us-luke-1, 42: us-phoenix-1, 43: us-sanjose-1): 13(OCIコンソールをブラウザで開いてURLを見るとわかる Do you want to generate a new API Signing RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: Y Enter a directory for your keys to be created [/home/opc/.oci]: Enter a name for your key [oci_api_key]: Public key written to: /home/opc/.oci/oci_api_key_public.pem Enter a passphrase for your private key (empty for no passphrase): Private key written to: /home/opc/.oci/oci_api_key.pem Fingerprint: ~なんか記載されている~ Config written to /home/opc/.oci/config </code></pre> <p>完了すると、~/.oci配下にoci_api_key_public.pemが作成されているはず。このキーをOCIコンソールで<br /> アイデンティティ>ユーザー>ユーザーの詳細<br /> に行くと、画面サブに「APIキー」があるのでクリックし、oci_api_key_public.pemの中身を張り付ける。</p> <p>試しに実行してみる。</p> <pre><code>$ oci compute instance list --all Usage: oci compute instance list [OPTIONS] Error: Missing option(s) --compartment-id. </code></pre> <p>コンパートメントIDをオプションで追記しろとのこと。</p> <pre><code>$ oci compute instance list --compartment-id <OCID貼り付け> いっぱい表示された </code></pre> <p>ただ、毎回コンパートメントIDを打ち込むのは面倒なので、oci_cli_rcファイルに書き込むことでコマンド入力時にオプション付ける必要がないようにする。</p> <pre><code>$ vi ~/.oci/oci_cli_rc [DEFAULT] compartment-id=<コンパートメントID> </code></pre> <h3 id="7.1.3 プライベートサブネットからOCI CLIを実行する方法"><a href="#7.1.3+%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%82%B5%E3%83%96%E3%83%8D%E3%83%83%E3%83%88%E3%81%8B%E3%82%89OCI+CLI%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95">7.1.3 プライベートサブネットからOCI CLIを実行する方法</a></h3> <p>OCI CLIでコマンドを実行するとAPIエンドポイントと通信を行う。そのため、プライベートサブネットからAPIを発行してエンドポイントへ到達させるにはいくつかの設定が必要になる。方法は以下3つ。<br /> ①NATゲートウェイを利用してインターネットに出ていく。②サービスゲートウェイを使用して、OCI環境内に閉じた通信を行う。③プロキシを使用してインターネットへ出ていくルートを作る。</p> <p>なずは何も設定しない状態でプライベートサブネットからコマンドを実行してみる。その際、APIの実行履歴を出力させるためにデバックオプション--debug(または-d)をつけて実行する。</p> <pre><code>$ oci compute instance list --all -d ~省略~ DEBUG:oci.base_client.140243454499864:Endpoint: https://iaas.ap-tokyo-1.oraclecloud.com/20160918 INFO:oci.base_client.140243454499864: 2022-08-14 15:05:12.072064: Request: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances INFO:oci.base_client.140243454499864: 2022-08-14 15:05:23.487363: Request: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances ~つづく~ </code></pre> <p>となり、エンドポイントへの接続を所定の回数試行して失敗すると、以下のようなエラーが返ってくる。</p> <pre><code>oci.exceptions.ConnectTimeout: (MaxRetryError("OCIConnectionPool(host='iaas.ap-tokyo-1.oraclecloud.com', port=443): Max retries exceeded with url: /20160918/instances?compartmentId=ocid1.compartment.oc1..aaaaaaaantybfae5pn7h77jmgcwgzg2hm27gv6whsiwhmo54ycefc3sxyiwa (Caused by ConnectTimeoutError(<oci.base_client.OCIConnection object at 0x7f8cf8e2f2b0>, 'Connection to iaas.ap-tokyo-1.oraclecloud.com timed out. (connect timeout=10.0)'))",), 'Request Endpoint: GET https://iaas.ap-tokyo-1.oraclecloud.com/20160918/instances See https://docs.oracle.com/en-us/iaas/Content/API/Concepts/sdk_troubleshooting.htm for help troubleshooting this error, or contact support and provide this full error message.') </code></pre> <p>実際、エンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打っても返ってこない。</p> <h4 id="7.1.3.1 NATゲートウェイの利用"><a href="#7.1.3.1+NAT%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4%E3%81%AE%E5%88%A9%E7%94%A8">7.1.3.1 NATゲートウェイの利用</a></h4> <p>NATゲートウェイを作成して、プライベートサブネットのルート表に追加させる。</p> <p>まずは、<br /> ネットワーキング>仮想クラウド・ネットワーク>仮想クラウド・ネットワークの詳細>NATゲートウェイ<br /> から「NATゲートウェイの作成」を行う。作成したNATゲートウェイをルート表のルート・ルールに追加する。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f9118f303fa.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f9118f303fa.png?mw=700" alt="image.png" /></a></p> <p>追加できたら、まずはエンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打つ。きっと返ってくるはずだ。<br /> エンドポイントへの疎通が確認できたら、OCIコマンドを実行してみよう。</p> <pre><code>$ oci compute instance list --all -d </code></pre> <p>インスタンス情報が出力されたと思う。</p> <h4 id="7.1.3.2 サービスゲートウェイの利用"><a href="#7.1.3.2+%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%B2%E3%83%BC%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A4%E3%81%AE%E5%88%A9%E7%94%A8">7.1.3.2 サービスゲートウェイの利用</a></h4> <p>社内ルールで、むやみにインターネットに出ていける設定をしてはいけない場合もあるはず。そういった場合には、OCIのVCN内に閉じた環境でエンドポイントへの通信できるサービスゲートウェイを利用するといい。<br /> ネットワーキング>仮想クラウド・ネットワーク>仮想クラウド・ネットワークの詳細>サービス・ゲートウェイ<br /> からサービスゲートウェイを作成する。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f914cd84d54.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f914cd84d54.png?mw=700" alt="image.png" /></a></p> <p>作成したら、さきほどと同じようにプライベートサブネットのルート表のルート・ルールに追加する。<br /> <a href="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f9151e5f6a7.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/01951106d2320a385b1563346721930462f9151e5f6a7.png?mw=700" alt="image.png" /></a></p> <p>追加できたら、まずはエンドポイント(iaas.ap-tokyo-1.oraclecloud.com)にpingを打つ。きっと返ってくるはずだ。<br /> エンドポイントへの疎通が確認できたら、OCIコマンドを実行してみよう。</p> <pre><code>$ oci compute instance list --all -d </code></pre> <p>インスタンス情報が出力されたと思う。</p> <h4 id="7.1.3.3 プロキシを使用してインターネット経由のルーティング"><a href="#7.1.3.3+%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E7%B5%8C%E7%94%B1%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0">7.1.3.3 プロキシを使用してインターネット経由のルーティング</a></h4> <p>https通信を行う際にプロキシ経由するように設定をするだけでよい。</p> <pre><code>$ export HTTPS_PROXY=http://10.1.1.45:3128 </code></pre> <p>設定した後はOCI CLIコマンドを実行すると成功するはずだ。</p> <h3 id="7.1.4 インスタンスプリンシパルの設定"><a href="#7.1.4+%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B7%E3%83%91%E3%83%AB%E3%81%AE%E8%A8%AD%E5%AE%9A">7.1.4 インスタンスプリンシパルの設定</a></h3> <h2 id="7.2 インスタンスプリンシパルの設定"><a href="#7.2+%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B7%E3%83%91%E3%83%AB%E3%81%AE%E8%A8%AD%E5%AE%9A">7.2 インスタンスプリンシパルの設定</a></h2> <p>さきほどまではAPIを用いてユーザ認証を実行してきた。それとは別に、インスタンスに対して実行権限を付与させる方法がある。それがインスタンスプリンシパル。プリンシパルは操作の実行主体を指す。</p> <h3 id="7.2.1 別ユーザで実行する"><a href="#7.2.1+%E5%88%A5%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B">7.2.1 別ユーザで実行する</a></h3> <h2 id="7.3 仮想環境の作成"><a href="#7.3+%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%81%AE%E4%BD%9C%E6%88%90">7.3 仮想環境の作成</a></h2> <p>システム全体にCLIをインストールするのは非推奨。</p> <h3 id="7.3.1 仮想環境を構成するディレクトリ作成"><a href="#7.3.1+%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E6%88%90%E3%81%99%E3%82%8B%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E4%BD%9C%E6%88%90">7.3.1 仮想環境を構成するディレクトリ作成</a></h3> <p>仮想環境を構成するディレクトリを作成する。<br /> このディレクトリは、仮想環境をアクティブ化する際に打つパスになるので<br /> よく考えてディレクトリ名はつけるように。</p> <pre><code>[root@publicpc oci]# pwd /opt/oci </code></pre> <h3 id="7.3.2 仮想環境作成"><a href="#7.3.2+%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E4%BD%9C%E6%88%90">7.3.2 仮想環境作成</a></h3> <p>まずはPythonのバージョンを確認する。</p> <pre><code>[opc@publicpc ~]$ python --version Python 3.6.8 </code></pre> <p>バージョンに応じた仮想環境作成のコマンドを打つ。</p> <pre><code>python<Pythonのバージョン> -m venv <仮想環境名> [root@publicpc oci]# python3.6 -m venv venv1 </code></pre> <p>/opt/oci配下にvenv1という仮想環境が作成される。</p> <h3 id="7.3.3 仮想環境をアクティブ化"><a href="#7.3.3+%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E3%82%92%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E5%8C%96">7.3.3 仮想環境をアクティブ化</a></h3> <p>OCI CLIのコマンドを打つときは、仮想環境をアクティブ化したうえで実行させる。<br /> アクティブ化させるコマンドは以下の通り。</p> <pre><code>[root@publicpc oci]# source /opt/oci/venv1/bin/activate (venv1) [root@publicpc oci]# </code></pre> <p>ちなみに、非アクティブ化は以下でできる。</p> <pre><code>(venv1) [root@publicpc oci]# deactivate [root@publicpc oci]# </code></pre> <h2 id="7.4 OCI-CLIのオフラインインストール"><a href="#7.4+OCI-CLI%E3%81%AE%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">7.4 OCI-CLIのオフラインインストール</a></h2> <p>会社の社内規則などによってLinuxサーバがインターネット接続できない場合、自分がWindows端末にインストールファイルをダウンロードし、<br /> そのファイルをLinuxサーバに配置して読み込ませることでCLIの実行環境を準備することができる。</p> <p>Github(https://github.com/oracle/oci-cli/releases)から、oci-cli.zipをローカルにダウンロード。<br /> oci-cli.zipを作Linuxサーバに配置し解凍する。</p> <h1 id="8.Ansibleのインストール"><a href="#8%EF%BC%8EAnsible%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">8.Ansibleのインストール</a></h1> <h1 id="9.BlockVolumeのパーティション切りとマウント"><a href="#9%EF%BC%8EBlockVolume%E3%81%AE%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E3%81%A8%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88">9.BlockVolumeのパーティション切りとマウント</a></h1> <h1 id="10.コンテナ"><a href="#10%EF%BC%8E%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A">10.コンテナ</a></h1> kawai_mizugorou tag:crieit.net,2005:PublicArticle/17404 2021-06-15T00:24:38+09:00 2021-06-15T00:26:03+09:00 https://crieit.net/posts/var 大事なサーバの/varを消した話。悪夢の無限列車編👹 <p>お久しぶりです!<br /> ここの所、立て込んでいたり(表題の件で)、メンタルやられ気味だったり(表題の件で)で余裕がなかった私です。</p> <p>あれほど講師の方に、「<strong>rmを使うときは気を付けよう</strong>」と言われていたのに…</p> <hr /> <h4 id="v目次にゃv"><a href="#v%E7%9B%AE%E6%AC%A1%E3%81%AB%E3%82%83v">v目次にゃv</a></h4> <p>1.どんなサーバなのか<br /> 2.CentOSの/varを消したお話ー悪夢の始まり無限列車編<br /> 3.CentOSの/varを消したお話ー血鬼術の落とし穴編<br /> 4.消した後ーお前ももうおやすみ・・・<br /> 5.起こったこと<br /> 6.復旧作業<br /> 7.結末<br /> 8.考えられる復元法<br /> 9.回避の呼吸!型集</p> <hr /> <h4 id="どんなサーバなのか"><a href="#%E3%81%A9%E3%82%93%E3%81%AA%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AA%E3%81%AE%E3%81%8B">どんなサーバなのか</a></h4> <p>私はゲーム制作サークルのサーバ担当(仮?)をしてますねこー。<br /> ざっくり挙げると<br /> ・ホームページ<br /> ・工程、プロジェクト管理ソフトの管理<br /> ・Gitサーバ<br /> を管理をしているきんぎょ。<br /> 昔はメールサーバもやっていたけど色々考えて、Google Workspaceと兼用させてるぎょぴ。</p> <p>ちなみに、VPSでCentOS7をつかっていますきんぎょ。<br /> <strong>これは消してはいけない。障害を起こしてはダメなやつだ()</strong></p> <hr /> <h4 id="CentOSの/varを消したお話ー悪夢の始まり無限列車編"><a href="#CentOS%E3%81%AE%2Fvar%E3%82%92%E6%B6%88%E3%81%97%E3%81%9F%E3%81%8A%E8%A9%B1%E3%83%BC%E6%82%AA%E5%A4%A2%E3%81%AE%E5%A7%8B%E3%81%BE%E3%82%8A%E7%84%A1%E9%99%90%E5%88%97%E8%BB%8A%E7%B7%A8">CentOSの/varを消したお話ー悪夢の始まり無限列車編</a></h4> <p>今回、新しいシステムの導入にあたって、色々入れたり、消したりをしていたねこ~。<br /> とある理由から<br /> /var/hogehoge/nekoneko/<br /> /var/hogehoge/kitune/<br /> /var/piyopiyo/fugafuga/<br /> のkingyo.poi を×10個くらい(仮称)を消す必要があったにゃ。<br /> そこで下記のコマンドを実行し、対象ファイルを削除していきました。</p> <pre><code>rm -rf /var/hogehoge/#抹消対象# </code></pre> <p><strong>そう。これが悪夢の始まりだったのにゃー…</strong></p> <hr /> <h4 id="CentOSの/varを消したお話ー血鬼術の落とし穴編"><a href="#CentOS%E3%81%AE%2Fvar%E3%82%92%E6%B6%88%E3%81%97%E3%81%9F%E3%81%8A%E8%A9%B1%E3%83%BC%E8%A1%80%E9%AC%BC%E8%A1%93%E3%81%AE%E8%90%BD%E3%81%A8%E3%81%97%E7%A9%B4%E7%B7%A8">CentOSの/varを消したお話ー血鬼術の落とし穴編</a></h4> <p>先ほど紹介した<strong><em>rm -rf /var/hogehoge/#抹消対象#</em></strong> の血鬼術ですが、重大な"<strong>欠陥</strong>"がある鬼~。<br /> そう、"<strong>血</strong>"鬼術だけに…(欠陥と血管をかけた)</p> <p>基本的にLinuxにはWindowsでいう<strong>ゴミ箱</strong>が存在しないきんぎょ。<br /> つまり、消したものは、ほぼ<strong>二度と元には戻りません</strong>。</p> <h5 id="今回の落とし穴(後悔ポイント)"><a href="#%E4%BB%8A%E5%9B%9E%E3%81%AE%E8%90%BD%E3%81%A8%E3%81%97%E7%A9%B4%EF%BC%88%E5%BE%8C%E6%82%94%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%EF%BC%89">今回の落とし穴(後悔ポイント)</a></h5> <p><strong>・cdで/varに移動して作業していれば消えるフォルダは最小で済んだ<br /> ・脳死でポチポチやっていた<br /> ・脳死のためエンターキーとTabキーを間違えた</strong></p> <p>抹殺対象を消すために、1つ1つ手打ちで打っていたわけです。正規表現しようにも、ダブりで消せないファイルもあるので…<br /> 数もそれなりにあるので、脳死状態でポチポチ術を発動していきます。Tab変換を活用して…</p> <p><strong>rm -rf /var エンターキーポチッ!</strong>\(^o^)/アッオワッタ<br /> 実行した瞬間、理解できず、思考がグルグル走馬灯。一瞬が5分くらいに長く感じ、冷や汗が全身をつたいました。</p> <hr /> <h4 id="消した後ーお前ももうおやすみ・・・"><a href="#%E6%B6%88%E3%81%97%E3%81%9F%E5%BE%8C%E3%83%BC%E3%81%8A%E5%89%8D%E3%82%82%E3%82%82%E3%81%86%E3%81%8A%E3%82%84%E3%81%99%E3%81%BF%E3%83%BB%E3%83%BB%E3%83%BB">消した後ーお前ももうおやすみ・・・</a></h4> <p>/varを消した直後、<br /> ”今動いているシステムは消せないよ”とのメッセージが。<br /> lsで確認すると<strong>tmp以外消えている!!!!!!!!!</strong><br /> 【VirtualBoxで再現した写真↓もちろん今回はバックアップをとってある】<br /> <a href="https://crieit.now.sh/upload_images/c8e3813e38831a16492d64162853d8f060c75922bdfa5.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c8e3813e38831a16492d64162853d8f060c75922bdfa5.png?mw=700" alt="image.png" /></a>!</p> <hr /> <h4 id="起こったこと"><a href="#%E8%B5%B7%E3%81%93%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8">起こったこと</a></h4> <p>・/varに配置しているものは<strong>全て消失</strong>しました。<br /> →ホームページの消失<br /> →行程、プロジェクト管理のデータ消失(Webで動作するもののため)<br /> →プロジェクト管理のデータベース消失<br /> ・yumが死んだ。(rpmもだめ)<br /> ・firewallが起動できない(iptablesはギリ生きていたっぽい?)<br /> ・SSHアクセスが弾かれる<br /> ・私は内心大泣き<br /> ・私、汗だく</p> <p>・gitも死んだと思っていたら、/var以外の場所で管理していたのでセーフ(本当に良かった。)<br /> ・wgetやcurlは使用可能</p> <hr /> <h4 id="復旧作業"><a href="#%E5%BE%A9%E6%97%A7%E4%BD%9C%E6%A5%AD">復旧作業</a></h4> <p>どうやら<strong>extundeleteコマンド</strong>で復旧可能らしい!<br /> 標準では入っていないので、<strong>yum install extundeleteで導入</strong>します!<br /> <strong>_人人人人人人人人人人人_<br /> > yumが使えない!! <<br />  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄</strong><br /> はい。終わりました。<br /> どうやら<strong>yumにかかわるデータが/var以下</strong>にあったようで、<strong>正常に動作しなくなりました</strong>。</p> <p>他にデータ復元方法はいくつかあり、試しましたが全部だめでした。<br /> 他のcentから消えたデータを移植したり、リカバリーモードを起動したり、OSの書き換えを試みたり…</p> <hr /> <h4 id="結末"><a href="#%E7%B5%90%E6%9C%AB">結末</a></h4> <p>結局、新しくサーバを立て、生きているデータを故サーバからサルベージ。移行する手段を取りました。<br /> VPSという特性上いろいろ気を遣う作業が多かったです。(今回ばかりはハードを直で触れる自宅サーバを羨みました。)</p> <hr /> <h4 id="考えられる復元法"><a href="#%E8%80%83%E3%81%88%E3%82%89%E3%82%8C%E3%82%8B%E5%BE%A9%E5%85%83%E6%B3%95">考えられる復元法</a></h4> <p>私の知識、経験不足ゆえに、実現しませんでしたが、この状況でも復活できる可能性はありました。<br /> ・wgetやcurlを使って修復系パッケージの導入<br /> ・健全なサーバより消滅したデータを移行。権限や依存関係も手動で設定<br /> ・パーティションやプロセスから復元<br /> いずれも果てしない労力と戦場で培うべき経験、正しい知識が必要なためペーペーの私は力尽きました…</p> <hr /> <h4 id="回避の呼吸!型集"><a href="#%E5%9B%9E%E9%81%BF%E3%81%AE%E5%91%BC%E5%90%B8%EF%BC%81%E5%9E%8B%E9%9B%86">回避の呼吸!型集</a></h4> <p><strong>今から大事なことを書きます!</strong><br /> <strong>・rmコマンドの扱い</strong><br /> まずはrmコマンドを使うときは慎重に行きましょう。絶対です。<br /> 特に-rf オプションを使うときは<strong>要注意</strong>です。なんでも消せちゃいます。イレイザーヘッドです💦<br /> <strong>・バックアップを取っておく</strong><br /> 何事も作業前にバックアップを取っておきましょう。VirtualBoxならスナップショット。VPSならイメージOSの保存とかね。<br /> <strong>・extundelete等の復元ツールは予め入れておく</strong><br /> ことが起きてからでは遅いです。今回みたくyumひいてはOSそのものがダウンして緊急時には何が使えなくなるか分かりません。前もって対策しておきましょう。<br /> <strong>・実験環境を用意、活用する</strong><br /> 普通なら本番と全く同じ実験環境(兼バックアップ)を利用すべきです。コストがかかるのは仕方ないですが、<strong>データ復旧費や今までの労力が水の泡になるよりは安い</strong>です!<br /> サークル活動でのリアルな実験環境費用捻出は難しいですが…<br /> 本当に業務上じゃなくてよかった…<br /> <strong>・ある程度子ディレクトリに入って作業をする</strong><br /> 今回は絶対パスで/varと打っていたのも原因の1つです。<br /> 仮にvarにい状態で作業していれば<strong>varそのものが消えるという事態は避けられていました</strong>。</p> <hr /> <h4 id="エンドタイトル"><a href="#%E3%82%A8%E3%83%B3%E3%83%89%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB">エンドタイトル</a></h4> <p>ということで悪夢の無限列車編を締めくくりたいと思います。<br /> <strong>何かあってからでの対策では遅い</strong>ということを痛感しました。<br /> 色々やばすぎて、語尾を忘れるくらいですからきんぎょ。<br /> 本当に業務での失態でなくてよかったです…おそらく私じゃ払いきれない額の損害でしょうから(震え)<br /> さらに辛かったのが「<strong>var消しちゃった</strong>💦」で検索しても<strong>ヒットしなかった</strong>ことです。varを消す馬鹿野郎は私くらいということですかね~(すっとぼけ)</p> <p>今回はここまで🐾<br /> みなさん、私の屍を超えていけ!!!!</p> keito_woood tag:crieit.net,2005:PublicArticle/17333 2021-05-31T15:38:05+09:00 2021-05-31T15:38:05+09:00 https://crieit.net/posts/Linux-CentOS7-Web Linux(CentOS7)でWebサーバ構築(~インストール、起動、自動起動設定まで~) <h1 id="Webサーバ構築前に"><a href="#Web%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89%E5%89%8D%E3%81%AB">Webサーバ構築前に</a></h1> <p>この記事でインストールするWebサーバ「Apache HTTP Server」の説明をば</p> <h3 id="Apache HTTP Serverとは"><a href="#Apache+HTTP+Server%E3%81%A8%E3%81%AF">Apache HTTP Serverとは</a></h3> <p>世界中でもっとも多く使われているOSSのWebサーバソフトウェア。<br /> 無料。<br /> 歴史が⻑い、信頼性が⾼い、Webで情報を⼊⼿しやすい、といった特徴がある。</p> <h1 id="Webサーバ構築手順"><a href="#Web%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86">Webサーバ構築手順</a></h1> <h3 id="①Apacheのインストール"><a href="#%E2%91%A0Apache%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">①Apacheのインストール</a></h3> <p>su -コマンドの後管理者パスワード打ち込む必要あり</p> <pre><code>1.$ su - ※インストールする為にroot権限が必要なため 2.# yum -y install httpd ※CentOSではhttpdというパッケージ名を指定する </code></pre> <h3 id="②Apacheの起動、起動できてるか確認"><a href="#%E2%91%A1Apache%E3%81%AE%E8%B5%B7%E5%8B%95%E3%80%81%E8%B5%B7%E5%8B%95%E3%81%A7%E3%81%8D%E3%81%A6%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D">②Apacheの起動、起動できてるか確認</a></h3> <p>WindowsのIISと異なり、インストールしてもApache HTTP Serverは起動していない。</p> <pre><code># systemctl start httpd ※指定したサーバを起動させるコマンド # systemctl status httpd ※起動したのか状態を確認するコマンド </code></pre> <p>この時にステータスのActivの欄がactiv(running)になっていたら起動している</p> <h3 id="③Apacheの自動起動、自動起動になっているか確認"><a href="#%E2%91%A2Apache%E3%81%AE%E8%87%AA%E5%8B%95%E8%B5%B7%E5%8B%95%E3%80%81%E8%87%AA%E5%8B%95%E8%B5%B7%E5%8B%95%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D">③Apacheの自動起動、自動起動になっているか確認</a></h3> <p>OSを起動(再起動)した時に⾃動でApache HTTP Serverを起動させたい場合に行う</p> <pre><code># systemctl enable httpd※指定したサーバを自動起動させるコマンド # systemctl is-enabled httpd ※⾃動起動が有効なのかを確認するコマンド </code></pre> <p>is-enabledで表示された結果がenabledになっていればhttpdは⾃動起動している</p> tobara tag:crieit.net,2005:PublicArticle/17296 2021-05-27T12:44:11+09:00 2021-05-27T17:17:26+09:00 https://crieit.net/posts/4-60af158b7b71f サーバ入門4 コマンド操作応用課題メモ <p>・<code>$touch (テキストファイル) (テキストファイル) ...</code>で複数のファイルを同時に作成することができる。<br /> ・<code>$rm (テキストファイル) (テキストファイル)...</code>で複数のファイルを同時に削除することができる。</p> <p>・ファイル名やコマンドキーは「<strong>Tabキー</strong>」で補完することができる。入力ミスを防げたり、コマンド入力のスピードが向上する。<br /> ・基本操作に慣れてきたら、<strong>検索</strong>を駆使して、知りたい操作や、コマンドをどんどん調べて身に着けていこう。<br /> ・Cent(OSのバージョン) やりたいこと コマンドのキーワードで検索するとだいたいヒットする。</p> ko00w1 tag:crieit.net,2005:PublicArticle/17295 2021-05-27T12:36:42+09:00 2021-05-27T12:37:24+09:00 https://crieit.net/posts/4-9-2 サーバ入門4 コマンド操作(9つのコマンド) その2 <h1 id="⑥cp(copy)コマンド"><a href="#%E2%91%A5cp%28copy%29%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">⑥cp(copy)コマンド</a></h1> <p><strong>指定したファイルを指定したディレクトリへコピーする。</strong><br /> <code>$cp (オプション) [コピー元ファイル] [コピー先ファイル]</code></p> <p>「r」オプションを使うとディレクトリもコピーできる。<br /> <code>$cp -r [コピー元ディレクトリ] [コピー先ディレクトリ]</code><br /> ※cpkコマンドは「コピー&ペースト」のイメージ</p> <h1 id="⑦mv(move)コマンド"><a href="#%E2%91%A6mv%28move%29%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">⑦mv(move)コマンド</a></h1> <p><strong>ファイルやディレクトリを指定ディレクトリへ移動する。</strong><br /> <code>$mv (オプション) [移動元パス] [移動先パス]</code><br /> ※ファイルを移動する際はオプションはなしでよい。<br /> ※mvコマンドは「カット&ペースト」のイメージ。</p> <p>mvコマンドは、<strong>名前変更する</strong>コマンドとしても使える。<br /> <code>$mv (ファイル名) (変更後のファイル名)</code></p> <h1 id="⑧rm(remove)コマンド"><a href="#%E2%91%A7rm%28remove%29%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">⑧rm(remove)コマンド</a></h1> <p><strong>ファイルやディレクトリを削除する。</strong><br /> <code>$rm (オプション) [削除したいファイル]</code><br /> ※ファイルを削除する際はオプションはなしでよい。<br /> ・rmは操作を誤ると、OSとその重要なファイルを削除してしまう<strong>危険コマンド</strong>。<strong>実作業では、指差し確認と「wチェック」が欠かせない。</strong></p> <p>rmコマンドでディレクトリを削除する場合は「<strong>r</strong>」オプションを使う。<br /> <code>$rm -r [削除したいディレクトリ]</code><br /> ※<strong>rmdir</strong>というディレクトリを削除するコマンドもある。</p> <h1 id="⑨lessコマンド"><a href="#%E2%91%A8less%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">⑨lessコマンド</a></h1> <p><strong>テキストファイルの中身を表示する。読み取り専用のメモ帳のイメージ</strong><br /> <code>$less [表示したいファイル名]</code><br /> 他の表示系のコマンドとして、「<strong>cat</strong>」や「<strong>more</strong>」があるが、それらとは異なり、「q」キーを入力するまで、表示が終了しないのが特徴。じっくりテキストファイルの中身を確認したいときに最適。<br /> <strong>ログファイル</strong>やサーバソフトウェアの<strong>設定ファイル</strong>の中身を確認するときによく使う。<br /> cat・・・<strong>catenateの連結するの意味($cat [ファイル名])</strong><br /> more・・・ <strong>$more (オプション) [ファイル名]</strong><br /> less上の操作は、カーソルキーで1行、スペースキーでページスクロール、終了するときは「q」を入力。<br /> <各コマンドのファイルの表示の違い><br /> less・・・「q」を押すまで終了しない<br /> cat・・・ファイルのログを全部一覧表示<br /> more・・・(%)で結果を表示。</p> <h1 id="コマンド操作補足"><a href="#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E6%93%8D%E4%BD%9C%E8%A3%9C%E8%B6%B3">コマンド操作補足</a></h1> <p>・bashシェルの便利な機能の1つとして、「<strong>コマンド履歴</strong>」機能がある。<br /> ・bashシェルは過去に実行したコマンドを履歴として記録している。カーソルキーの「↑」キー、もしくは「Ctrl」+「p」を押すごとに、1つずつ遡ってコマンドを表示する。表示されたコマンドは「Enter」で実行することができる。<br /> ・「history」コマンドを実行すると過去に実行したコマンドの一覧が古い順に表示される。($history)「!ヒストリー番号」でその番号のコマンドを実行できる。</p> <h1 id="poweroffコマンド"><a href="#poweroff%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">poweroffコマンド</a></h1> <p><strong>OSを停止できる。</strong><br /> ※CentOS6以下の古いLinuxでは使用できない。<br /> <code>$poweroff</code><br /> CentOS7では<strong>管理者権限が必要</strong>なコマンドで、一般ユーザで実行するとrootユーザのパスワード入力が求められる。</p> ko00w1 tag:crieit.net,2005:PublicArticle/17290 2021-05-27T11:52:00+09:00 2021-06-03T13:04:59+09:00 https://crieit.net/posts/4-9-1 サーバ入門4 コマンド操作(9つのコマンド) その1 <h1 id="コマンドに入る前に"><a href="#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AB%E5%85%A5%E3%82%8B%E5%89%8D%E3%81%AB">コマンドに入る前に</a></h1> <p>・Linuxのコマンド入力画面は、<strong>一般権限ユーザ</strong>だと「<strong>$</strong>」で表示され、<strong>管理権限をもつroot</strong>だと「<strong>#</strong>」がユーザの種類を表す記号として表示される。コマンドの入力列の先頭に、「$」や「#」が書いていてもターミナルでは「$」や「#」は<strong>入力しない</strong>こと。</p> <h1 id="①pwdコマンド"><a href="#%E2%91%A0pwd%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">①pwdコマンド</a></h1> <p>現在の作業ディレクトリ「<strong>カレントディレクトリ</strong>」を絶対パスで表示。<br /> 初心者は迷子防止のためディレクトリを<strong>移動する際に必ず使う</strong>こと。</p> <h4 id="pwd(print work directory)"><a href="#pwd%28print+work+directory%29">pwd(print work directory)</a></h4> <p>・・・現在どこのディレクトリで作業中なのかを知ることができる。<br /> ログインしたユーザの<strong>ホームディレクトリ(/home/ユーザ名)</strong> がカレントディレクトリ<br /> ※最初の”/”と<strong>homeの後の”/”は意味が異なる</strong>。最初のはルートディレクトリを表していて、homeの後はディレクトリの区切りを表す。</p> <h6 id="/(ルートディレクトリ)home/(ルートディレクトリ)ユーザ名"><a href="#%2F%28%E3%83%AB%E3%83%BC%E3%83%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%29home%2F%28%E3%83%AB%E3%83%BC%E3%83%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%29%E3%83%A6%E3%83%BC%E3%82%B6%E5%90%8D">/(ルートディレクトリ)home/(ルートディレクトリ)ユーザ名</a></h6> <p>コマンド例<br /> <strong>$pwd</strong></p> <h3 id="<ディレクトリ構成>"><a href="#%EF%BC%9C%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E6%A7%8B%E6%88%90%EF%BC%9E"><ディレクトリ構成></a></h3> <p>ファイルを入れる入れ物をWindowsではフォルダ、Linuxでは<strong>ディレクトリ</strong>と呼ぶ。<br /> Linuxは、頂点となる<strong>ルートディレクトリ(/)</strong> を起点とした<strong>ツリー構造</strong>で、ファイルとディレクトリを管理する。※ファイルを操作するコマンドを実行するためには、この構造のファイルやディレクトリの位置の指定が必要。<br /> ルートディレクトリはWindowsで「C:」のようなもの</p> <h3 id="FHS(Filesystem Hierarchy Standard)"><a href="#FHS%28Filesystem+Hierarchy+Standard%29">FHS(Filesystem Hierarchy Standard)</a></h3> <p>・・・ファイルシステムの階層標準のこと。</p> <h6 id="サーバ運用作業で頻繁に使用するFHS"><a href="#%E3%82%B5%E3%83%BC%E3%83%90%E9%81%8B%E7%94%A8%E4%BD%9C%E6%A5%AD%E3%81%A7%E9%A0%BB%E7%B9%81%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8BFHS">サーバ運用作業で頻繁に使用するFHS</a></h6> <p><strong>/etc システムの設定ファイルが保存される<br /> /home 一般ユーザのホームディレクトリ(rootユーザは/root)<br /> /var/log ログファイルが保存される</strong><br /> etc...</p> <h3 id="絶対パス指定"><a href="#%E7%B5%B6%E5%AF%BE%E3%83%91%E3%82%B9%E6%8C%87%E5%AE%9A">絶対パス指定</a></h3> <p><strong>ルートディレクトリ</strong>を基点とした<strong>ディレクトリ指定</strong>のこと。<strong>どこのディレクトリにいても必ず指定先に移動できる</strong>。絶対(いつ、いかなる、どんなときも)パス(ファイルやフォルダの場所を示す情報)<br /> 例:$cd /home/yy</p> <h3 id="相対パス指定"><a href="#%E7%9B%B8%E5%AF%BE%E3%83%91%E3%82%B9%E6%8C%87%E5%AE%9A">相対パス指定</a></h3> <p><strong>カレントディレクトリ</strong>(現在作業している場所)を基点としたディレクトリの指定のこと。「自分が今いるところ」を基準にして表現したファイルやフォルダの場所。<br /> <strong>相対パス指定には、記号を使った指定方法もある。</strong><br /> 例:$cd yy</p> <p><strong>相対パスでの指定で扱う記号</strong><br /> <div class="table-responsive"><table> <thead> <tr> <th>記号</th> <th>読み方</th> <th>意味</th> </tr> </thead> <tbody> <tr> <td>~</td> <td>チルダ</td> <td>ユーザのホームディレクトリ</td> </tr> <tr> <td>.</td> <td>ドット</td> <td>カレントディレクトリ</td> </tr> <tr> <td>..</td> <td>ドットドット</td> <td>1つ上のディレクトリ※</td> </tr> </tbody> </table></div></p> <p>※cd../..のように複数回使用すると、2つ上のディレクトリに移動できる。</p> <h1 id="②ls(List segments)コマンド"><a href="#%E2%91%A1ls%28List+segments%29%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">②ls(List segments)コマンド</a></h1> <p>ディレクトリに存在する、ファイルやディレクトリの一覧を表示する<br /> <code>$ls (オプション) (ディレクトリ名)</code><br /> ※オプションやディレクトリの前に必ず半角スペースが必要</p> <p>オプションなしで「ls」のみを実行すると、カレントディレクトリの一覧を表示する。</p> <p><code>$ls /</code>を実行すると、ルーディレクトリに存在するディレクトリ(第2階層)を見ることができる。<br /> <code>$ls -l</code>で<strong>詳細表示</strong>(CentOSの場合ll(エルエル)で同じ結果になる)<br /> <code>$ls -la</code>でさらに<strong>隠し属性も表示</strong></p> <div class="table-responsive"><table> <thead> <tr> <th>オプション</th> <th>オプションの意味</th> </tr> </thead> <tbody> <tr> <td>a</td> <td>隠し属性を表示</td> </tr> <tr> <td>l(エル)</td> <td>詳細を表示(パーミッション、オーナー(所有者)、サイズ、日付)</td> </tr> </tbody> </table></div> <h6 id="隠し属性"><a href="#%E9%9A%A0%E3%81%97%E5%B1%9E%E6%80%A7">隠し属性</a></h6> <p>・・・Linuxではファイルの先頭に.(ドット)をつけることで、表示を隠すことができる決まりがある。</p> <h1 id="③mkdir(make sirectory)コマンド"><a href="#%E2%91%A2mkdir%28make+sirectory%29%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">③mkdir(make sirectory)コマンド</a></h1> <p><strong>ディレクトリを作成する。</strong><br /> <code>$mkdir [ディレクトリ名]</code></p> <h1 id="④cd(change directory)コマンド"><a href="#%E2%91%A3cd%28change+directory%29%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">④cd(change directory)コマンド</a></h1> <p>ディレクトリを移動する。<br /> <code>$cd [ディレクトリ名]</code><br /> ・1つ上のディレクトリを表す「..(ドットドット)」を移動先へ指定し、元のディレクトリへ戻れる。<br /> <code>$cd ..</code><br /> ※絶対パス指定の「cd/home/[ユーザ名]」でも移動できる。</p> <h1 id="⑤touchコマンド"><a href="#%E2%91%A4touch%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">⑤touchコマンド</a></h1> <p>空のファイルを作成したり、ファイルの更新日時を現在の日時に変更することができる。<br /> <code>$touch [ファイル名]</code></p> ko00w1 tag:crieit.net,2005:PublicArticle/16671 2021-02-02T23:45:09+09:00 2021-02-02T23:45:09+09:00 https://crieit.net/posts/centos-repository-yum-config-manager-20210126 CentOS で リポジトリの enable/disabled を切り替える方法 <p>CentOS でリポジトリを切り替える際、今までリポジトリファイルの編集をしていました。</p> <pre><code class="bash"># vi /etc/yum.repos.d/remi.repo [remi] enabled=1 </code></pre> <p><code>remi</code> リポジトリの有効化。</p> <pre><code class="bash"># vi /etc/yum.repos.d/remi-php74.repo [remi-php74] enabled=1 </code></pre> <p><code>remi-php74</code> リポジトリの有効化。</p> <p>この他のやり方としては、 <code>yum</code> や <code>dnf</code> 使用時にリポジトリの <code>enabled</code>, <code>disabled</code> を引数で指定する方法があります。</p> <pre><code class="bash"># yum install --enablerepo=remi-php74 php </code></pre> <p>今回改めて検索したところ、以下のコマンドを発見したのでメモしておきます。</p> <pre><code class="bash"># yum-config-manager --enable remi </code></pre> <p>これでリポジトリファイルを書き換えることなく、 <code>enabled</code>, <code>disabled</code> を切り替えられます。</p> <pre><code class="bash"># yum-config-manager --enable remi # yum-config-manager --enable remi-php74 </code></pre> <p>今更ですが、こんなやり方があったとは……。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/sec-managing_yum_repositories">6.3.5. Yum リポジトリを有効/設定/無効にする方法 Red Hat Enterprise Linux 6 | Red Hat Customer Portal</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/16605 2021-01-15T17:06:57+09:00 2021-01-15T17:08:05+09:00 https://crieit.net/posts/CentOS7-systemctl 【CentOS7】systemctlコマンドまとめ <h2 id="systemctlコマンドとは"><a href="#systemctl%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A8%E3%81%AF">systemctlコマンドとは</a></h2> <p> systemdを操作するコマンドで、サービス管理に使用する。</p> <hr /> <div class="table-responsive"><table> <thead> <tr> <th></th> <th>コマンド</th> </tr> </thead> <tbody> <tr> <td>起動</td> <td>systemctl start ユニット名</td> </tr> <tr> <td>再起動</td> <td>systemctl restart ユニット名</td> </tr> <tr> <td>停止</td> <td>systemctl stop ユニット名</td> </tr> <tr> <td>リロード</td> <td>systemctl reload ユニット名</td> </tr> <tr> <td>起動中か確認</td> <td>systemctl status ユニット名</td> </tr> <tr> <td>自動起動か確認</td> <td>systemctl list-unit-files</td> </tr> <tr> <td>自動起動を有効</td> <td>systemctl enable ユニット名</td> </tr> <tr> <td>自動起動を無効</td> <td>systemctl disable ユニット名</td> </tr> <tr> <td>サービス一覧表示</td> <td>systemctl list-unit-files --type=service</td> </tr> </tbody> </table></div> ponsuke tag:crieit.net,2005:PublicArticle/16604 2021-01-15T17:04:20+09:00 2021-01-15T17:04:20+09:00 https://crieit.net/posts/c97f776c64717b044e6d63cfbd64235c コマンド操作 基本! <h2 id="最低限覚えておくべきコマンド9こ!"><a href="#%E6%9C%80%E4%BD%8E%E9%99%90%E8%A6%9A%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8F%E3%81%B9%E3%81%8D%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%EF%BC%99%E3%81%93%EF%BC%81">最低限覚えておくべきコマンド9こ!</a></h2> <p><strong>1. pwd<br /> 2. ls<br /> 3. mkdir<br /> 4. cd<br /> 5. touch<br /> 6. cp<br /> 7. mv<br /> 8. rm<br /> 9. less</strong></p> <hr /> <p>*Linuxのコマンドプロンプトは⼀般ユーザだと「$」で<br /> 管理権限を持つ root だと「#」という表⽰</p> <h3 id="① pwdコマンド"><a href="#%E2%91%A0+pwd%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">① pwdコマンド</a></h3> <p>CLIでコマンドを実⾏するときは、どこかのディレクトリを起点とする。<br /> これを「<strong>カレントディレクトリ</strong>」と呼び、pwdコマンドで確認できる。<br /> pwd … print work directoryの略</p> <h4 id="$pwd"><a href="#%24pwd">$pwd</a></h4> <p>CentOS7の場合ログイン直後は、ログインユーザのホームディレクトリ<br /> <strong>(/home/ユーザ名)</strong> がカレントディレクトリになる</p> <hr /> <h3 id="② lsコマンド(1)"><a href="#%E2%91%A1+ls%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%281%29">② lsコマンド(1)</a></h3> <p>カレントディレクトリにどんなディレクトリやファイルが存在するかを確認する  ls…list segmentsの略</p> <h4 id="$ ls (オプション) ※オプションの前に半⾓スペースが必要︕"><a href="#%24+ls+%28%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%29+%E2%80%BB%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%89%8D%E3%81%AB%E5%8D%8A%E2%BE%93%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%8C%E5%BF%85%E8%A6%81%EF%B8%95">$ ls (オプション) ※オプションの前に半⾓スペースが必要︕</a></h4> <p>オプションを⼊れると、隠しファイルや詳細情報を表⽰できる。<br /> 使⽤例は以下の通り。</p> <h4 id="$ ls -l (エルエス ハイフン エル。CentOSの場合ll(エル エル)でも同じ結果になります)"><a href="#%24+ls+-l+%28%E3%82%A8%E3%83%AB%E3%82%A8%E3%82%B9+%E3%83%8F%E3%82%A4%E3%83%95%E3%83%B3+%E3%82%A8%E3%83%AB%E3%80%82CentOS%E3%81%AE%E5%A0%B4%E5%90%88ll%28%E3%82%A8%E3%83%AB+%E3%82%A8%E3%83%AB%29%E3%81%A7%E3%82%82%E5%90%8C%E3%81%98%E7%B5%90%E6%9E%9C%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%29">$ ls -l (エルエス ハイフン エル。CentOSの場合ll(エル エル)でも同じ結果になります)</a></h4> <h4 id="$ ls -la (エルエス ハイフン エル エー)"><a href="#%24+ls+-la+%28%E3%82%A8%E3%83%AB%E3%82%A8%E3%82%B9+%E3%83%8F%E3%82%A4%E3%83%95%E3%83%B3+%E3%82%A8%E3%83%AB+%E3%82%A8%E3%83%BC%29">$ ls -la (エルエス ハイフン エル エー)</a></h4> <hr /> <h3 id="② lsコマンド(2)"><a href="#%E2%91%A1+ls%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%282%29">② lsコマンド(2)</a></h3> <p>ls の後ろにディレクトリを指定すると、指定したディレクトリ内のディレクトリやファイルを確認することもできる</p> <h4 id="$ ls [ディレクトリ名] ※lsの後ろに半⾓スペースが必要︕"><a href="#%24+ls+%5B%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%90%8D%5D+%E2%80%BBls%E3%81%AE%E5%BE%8C%E3%82%8D%E3%81%AB%E5%8D%8A%E2%BE%93%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%8C%E5%BF%85%E8%A6%81%EF%B8%95">$ ls [ディレクトリ名] ※lsの後ろに半⾓スペースが必要︕</a></h4> <p>ls /(エルエス スラッシュ)を実⾏するとルートディレクトリの中のディレクトリ<br /> (第2階層)を⾒ることができる。</p> <hr /> <h3 id="③ mkdirコマンド"><a href="#%E2%91%A2+mkdir%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">③ mkdirコマンド</a></h3> <p>ディレクトリを作成する mkdir…make directoryの略</p> <h4 id="$ mkdir [作成したいディレクトリ名] ※mkdirの後ろに半⾓スペースが必要︕"><a href="#%24+mkdir+%5B%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%81%84%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%90%8D%5D+%E2%80%BBmkdir%E3%81%AE%E5%BE%8C%E3%82%8D%E3%81%AB%E5%8D%8A%E2%BE%93%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%8C%E5%BF%85%E8%A6%81%EF%B8%95">$ mkdir [作成したいディレクトリ名] ※mkdirの後ろに半⾓スペースが必要︕</a></h4> <p>コマンドを実⾏してもエラーでは無い限り、何もメッセージは出ない。<br /> 実⾏後、lsやllコマンドでディレクトリが作られたかどうかを確認しよ!</p> <hr /> <h3 id="④ cdコマンド(1)"><a href="#%E2%91%A3+cd%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%281%29">④ cdコマンド(1)</a></h3> <p>カレントディレクトリを移動する<br /> cd…change directoryの略</p> <h4 id="$ cd [移動先ディレクトリ名] ※cdの後ろに半⾓スペースが必要︕"><a href="#%24+cd+%5B%E7%A7%BB%E5%8B%95%E5%85%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%90%8D%5D+%E2%80%BBcd%E3%81%AE%E5%BE%8C%E3%82%8D%E3%81%AB%E5%8D%8A%E2%BE%93%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%8C%E5%BF%85%E8%A6%81%EF%B8%95">$ cd [移動先ディレクトリ名] ※cdの後ろに半⾓スペースが必要︕</a></h4> <p>コマンドを実⾏してもエラーでは無い限り、何もメッセージは出ない。<br /> 実⾏後、pwdコマンドでカレントディレクトリを確認しよ!</p> <hr /> <h3 id="④ cdコマンド(2)"><a href="#%E2%91%A3+cd%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%282%29">④ cdコマンド(2)</a></h3> <p><strong>「 .. (ドットドット)」</strong> を移動先ディレクトリへ指定すると、⼀階層上のディレクトリに移動することが可能。<br /> また、cd ../.. のように複数回使⽤すると、2つ上のディレクトリに移動できる</p> <hr /> <h3 id="⑤ touchコマンド"><a href="#%E2%91%A4+touch%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">⑤ touchコマンド</a></h3> <p>新規に<strong>空のファイル</strong>を作成する<br /> ほかにも、指定したファイルやディレクトリのタイムスタンプを変更することも可能</p> <h4 id="$ touch [作成したいファイル名] ※touchの後ろに半⾓スペースが必要!"><a href="#%24+touch+%5B%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%81%84%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%5D+%E2%80%BBtouch%E3%81%AE%E5%BE%8C%E3%82%8D%E3%81%AB%E5%8D%8A%E2%BE%93%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%81%8C%E5%BF%85%E8%A6%81%EF%BC%81">$ touch [作成したいファイル名] ※touchの後ろに半⾓スペースが必要!</a></h4> <hr /> <h3 id="⑥ cpコマンド(1)"><a href="#%E2%91%A5+cp%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%281%29">⑥ cpコマンド(1)</a></h3> <p>ファイルをコピーする cp…copyの略</p> <h4 id="$ cp [コピー元ファイル名] [コピー先ファイル名 or ディレクトリ]"><a href="#%24+cp+%5B%E3%82%B3%E3%83%94%E3%83%BC%E5%85%83%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%5D+%5B%E3%82%B3%E3%83%94%E3%83%BC%E5%85%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D+or+%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%5D">$ cp [コピー元ファイル名] [コピー先ファイル名 or ディレクトリ]</a></h4> <p>※上記コマンドのコピー元ディレクトリとコピー先ディレクトリの間には半⾓スペースが必要︕<br /> コマンドを実⾏してもエラーでは無い限り、何もメッセージは出ない。<br /> lsかllコマンドでコピーしたファイルが存在することを確認しよ!</p> <hr /> <h3 id="⑥ cpコマンド(2)"><a href="#%E2%91%A5+cp%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%282%29">⑥ cpコマンド(2)</a></h3> <p>cpコマンドは、<strong>r</strong> オプションを使うと<strong>ディレクトリもコピーできる。</strong></p> <h4 id="$ cp -r [コピー元ディレクトリ名] [コピー先ディレクトリ名]"><a href="#%24+cp+-r+%5B%E3%82%B3%E3%83%94%E3%83%BC%E5%85%83%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%90%8D%5D+%5B%E3%82%B3%E3%83%94%E3%83%BC%E5%85%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%90%8D%5D">$ cp -r [コピー元ディレクトリ名] [コピー先ディレクトリ名]</a></h4> <hr /> <h3 id="⑦ mvコマンド(1)"><a href="#%E2%91%A6+mv%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%281%29">⑦ mvコマンド(1)</a></h3> <p>ファイルやディレクトリを移動する。<br /> mv…moveの略</p> <h4 id="$ mv [対象ファイル or ディレクトリ名] [移動先のディレクトリ]"><a href="#%24+mv+%5B%E5%AF%BE%E8%B1%A1%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+or+%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%90%8D%5D+%5B%E7%A7%BB%E5%8B%95%E5%85%88%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%5D">$ mv [対象ファイル or ディレクトリ名] [移動先のディレクトリ]</a></h4> <p>コマンドを実⾏してもエラーでは無い限り、何もメッセージは出ない。<br /> mv実施後に、lsかllコマンドで移動したことを確認しよ!</p> <hr /> <h3 id="⑦ mvコマンド(2)"><a href="#%E2%91%A6+mv%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%282%29">⑦ mvコマンド(2)</a></h3> <p><strong>mvコマンドはファイルやディレクトリ名の変更もできる。</strong></p> <h4 id="$ mv [対象ファイル名] [変更後の名前]"><a href="#%24+mv+%5B%E5%AF%BE%E8%B1%A1%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%5D+%5B%E5%A4%89%E6%9B%B4%E5%BE%8C%E3%81%AE%E5%90%8D%E5%89%8D%5D">$ mv [対象ファイル名] [変更後の名前]</a></h4> <hr /> <h3 id="⑧ rmコマンド(1)"><a href="#%E2%91%A7+rm%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%281%29">⑧ rmコマンド(1)</a></h3> <p>ファイルを削除する。<br /> rm…removeの略</p> <h4 id="$ rm [削除したいファイル名]"><a href="#%24+rm+%5B%E5%89%8A%E9%99%A4%E3%81%97%E3%81%9F%E3%81%84%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%5D">$ rm [削除したいファイル名]</a></h4> <p>コマンドを実⾏してもエラーでは無い限り、何もメッセージは出ない。<br /> Windowsのようなごみ箱の概念がないので⼀発で削除となります。<br /> 慎重にコマンドを実⾏しよう。</p> <hr /> <h3 id="⑧ rmコマンド(2)"><a href="#%E2%91%A7+rm%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%282%29">⑧ rmコマンド(2)</a></h3> <p>rmコマンドは <strong>r</strong> オプションを使うと<strong>ディレクトリも削除できる。</strong></p> <h4 id="$ rm -r [削除したいディレクトリ名]"><a href="#%24+rm+-r+%5B%E5%89%8A%E9%99%A4%E3%81%97%E3%81%9F%E3%81%84%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%90%8D%5D">$ rm -r [削除したいディレクトリ名]</a></h4> <p>ディレクトリ削除は対象を間違えると影響がとても⼤きい。<br /> 慎重にコマンドを実⾏しよう。</p> <hr /> <h3 id="⑨ lessコマンド"><a href="#%E2%91%A8+less%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">⑨ lessコマンド</a></h3> <p>テキストファイルの中⾝を閲覧する。<br /> catやmoreコマンドと異なりqを⼊⼒するまで終了しないのが特徴。</p> <h4 id="$ less [閲覧したいファイル名]"><a href="#%24+less+%5B%E9%96%B2%E8%A6%A7%E3%81%97%E3%81%9F%E3%81%84%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%5D">$ less [閲覧したいファイル名]</a></h4> <p>less上の操作はカーソルキーで1⾏、スペースキーでページスクロール。<br /> 終了するときは「<strong>q</strong>」を⼊⼒する。</p> <hr /> <p>*ここに随時追加予定</p> Ususuke tag:crieit.net,2005:PublicArticle/16488 2021-01-03T18:43:16+09:00 2021-02-08T12:53:53+09:00 https://crieit.net/posts/CentOS7-OpenVMTools 【CentOS7】OpenVMToolsのインストール <p>ESXi上にゲストOSを構築したら入れておくVMware ToolsのOSS版がopen-vm-toolsです<br /> インストールするとWebClient上からゲストOSのシャットダウンができたりします</p> <h2 id="open-vm-toolsのインストール"><a href="#open-vm-tools%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">open-vm-toolsのインストール</a></h2> <pre><code class="bash">$ sudo yum install -y open-vm-tools </code></pre> <p>インストール後にゲストOSを再起動すること。WebClient上の仮想マシンのVMware Toolsのステータスが「はい」になればOK</p> arohajiro tag:crieit.net,2005:PublicArticle/16464 2021-01-03T16:27:27+09:00 2021-03-01T08:00:11+09:00 https://crieit.net/posts/CentOS7-DHCP-DNS 【CentOS7】DHCPで取得したDNSサーバのアドレスを一時的に消そうとして少しハマった話 <h1 id="やりたかったこと"><a href="#%E3%82%84%E3%82%8A%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8">やりたかったこと</a></h1> <p>とある検証のため、CentOS7マシンで一時的に<strong>「DNSの名前解決ができない」</strong>状況を作ろうとしました。</p> <h2 id="動作確認済み環境"><a href="#%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D%E6%B8%88%E3%81%BF%E7%92%B0%E5%A2%83">動作確認済み環境</a></h2> <ul> <li>CentOS 7.6</li> </ul> <h2 id="試したこと"><a href="#%E8%A9%A6%E3%81%97%E3%81%9F%E3%81%93%E3%81%A8">試したこと</a></h2> <p>単純にDNSサーバの設定を一時的に消せばいいのかなと考え、特に下調べもせずに<strong>nmcli</strong>コマンドを使って<strong>「DHCPサーバから取得している、DNSサーバのアドレスを消す」</strong>ことをすればいいのかと思ったら、うまくいきませんでした。<br /> とりあえず、「/etc/resolv.conf」を直接いじることで、やりたかったことは実現できました</p> <ul> <li>設定変更前の状態</li> </ul> <pre><code>[root@centos7 ~]# nmcli d show | grep DNS IP4.DNS[1]: 1.1.1.1 IP4.DNS[2]: 8.8.8.8 </code></pre> <ul> <li>DHCPサーバから取得したDNSサーバのアドレスを設定しないようにして、ネットワークを再起動</li> </ul> <pre><code>[root@centos7 ~]# nmcli connection modify ens160 ipv4.ignore-auto-dns yes [root@centos7 ~]# systemctl restart network </code></pre> <ul> <li>設定変更後の状態</li> </ul> <pre><code>[root@centos7 ~]# nmcli d show | grep DNS [root@centos7 ~]# </code></pre> <p>お、DNSサーバのアドレスが消えた!</p> <ul> <li>名前解決のテスト</li> </ul> <pre><code>[root@centos7 ~]# host yahoo.co.jp yahoo.co.jp has address 183.79.135.206 yahoo.co.jp has address 182.22.59.229 </code></pre> <p>あれれ、DNSサーバのアドレスが消えたけど何故か名前解決できてる??</p> <ul> <li>/etc/resolv.confを確認してみる</li> </ul> <pre><code>[root@centos7 ~]# cat /etc/resolv.conf # Generated by NetworkManager search hoge.test nameserver 1.1.1.1 nameserver 8.8.8.8 </code></pre> <p>んんー、消えてないじゃん。。。<br /> 挙動について調べてませんが、/etc/resolv.confに既にDNSサーバのアドレスが書かれていても、nmcliさんは消してくれない模様</p> <h2 id="やりたかったことの解決策"><a href="#%E3%82%84%E3%82%8A%E3%81%9F%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8%E3%81%AE%E8%A7%A3%E6%B1%BA%E7%AD%96">やりたかったことの解決策</a></h2> <ul> <li>sed使って/etc/resolv.confを直接編集</li> </ul> <pre><code>[root@centos7 ~]# sed -i '/^nameserver/d' /etc/resolv.conf </code></pre> <p>とりあえず調べる気力もなかったので<strong>nmcli</strong>は一旦諦めてこの方法にしてます<br /> sedした直後から、名前解決ができなくなります。<br /> 個人的には、直接設定ファイルを弄りたくはないんですけど...<br /> ヒマができたら、nmcliでやる方法を調べてみようと思います。</p> <ul> <li>元に戻す(DNSサーバから取得したアドレスを設定する)場合はこれ</li> </ul> <pre><code>[root@centos7 ~]# systemctl restart network </code></pre> arohajiro tag:crieit.net,2005:PublicArticle/16462 2021-01-03T16:09:58+09:00 2021-03-01T08:01:01+09:00 https://crieit.net/posts/CentOS7-postfix 【CentOS7】postfixのメールキュー削除 <p>CentOS7標準のpostfixで、メールキューを消したいときに使うコマンド。<br /> 最近メールサーバ触る機会が減っていて、忘れかけていたので適当メモ。</p> <h2 id="メールキューの確認"><a href="#%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%AD%E3%83%A5%E3%83%BC%E3%81%AE%E7%A2%BA%E8%AA%8D">メールキューの確認</a></h2> <pre><code class="bash">$ sudo mailq </code></pre> <h3 id="出力例"><a href="#%E5%87%BA%E5%8A%9B%E4%BE%8B">出力例</a></h3> <pre><code class="bash">-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- E30848539EF 465 Thu Nov 14 19:43:38 [email protected] (Host or domain name not found. Name service error for name=hogehogemail.com type=MX: Host not found, try again) </code></pre> <h2 id="指定したQueue IDのメールキューを削除"><a href="#%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9FQueue+ID%E3%81%AE%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%AD%E3%83%A5%E3%83%BC%E3%82%92%E5%89%8A%E9%99%A4">指定したQueue IDのメールキューを削除</a></h2> <pre><code class="bash">$ sudo postsuper -d "Queue ID" </code></pre> <h3 id="削除例"><a href="#%E5%89%8A%E9%99%A4%E4%BE%8B">削除例</a></h3> <pre><code class="bash">$ sudo postsuper -d E30848539EF </code></pre> <h2 id="全てのメールキューを削除"><a href="#%E5%85%A8%E3%81%A6%E3%81%AE%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%AD%E3%83%A5%E3%83%BC%E3%82%92%E5%89%8A%E9%99%A4">全てのメールキューを削除</a></h2> <pre><code class="bash">$ sudo postsuper -d ALL </code></pre> arohajiro tag:crieit.net,2005:PublicArticle/16416 2020-12-24T00:28:56+09:00 2020-12-24T00:29:36+09:00 https://crieit.net/posts/ansible-remove-user-and-settings-of-vsftpd-apache-20201224 vsftpd と Apache の設定を削除しLinuxユーザも削除する <p>以前取り上げた<a href="https://crieit.net/posts/ansible-settings-vsftpd-and-apache-20201202">Ansible を使って FTPユーザの作成と Apache の仮想サイトの設定をする</a>の逆方向バージョンです。</p> <p>つまり、</p> <ul> <li>Linuxユーザを削除</li> <li>上記ユーザを vsftpdユーザ からも削除</li> <li>Apache の仮想サイトの設定と該当ディレクトリのデータを全て削除</li> </ul> <p>を行うタスクを作ろう、と考えました。</p> <p>これは、上記のプレイブックを一時的なテスト環境として作った後、削除することも往々にしてあり、手動で削除するのが面倒になってきたからです。</p> <h2 id="前提"><a href="#%E5%89%8D%E6%8F%90">前提</a></h2> <p>テストに利用するサーバは前の記事と同じサーバで、該当プレイブックによって vsftpd や Apache が設定されている、という状況を想定しています。</p> <h2 id="設定"><a href="#%E8%A8%AD%E5%AE%9A">設定</a></h2> <h3 id="ディレクトリ階層"><a href="#%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E9%9A%8E%E5%B1%A4">ディレクトリ階層</a></h3> <pre><code class="bash">PROJECT_ROOT/ ├ workspace/ │ ├ entrypoint.sh │ └ ansible/ │ ├ (諸々元のプレイブックと同じ構造) │ ├ main.yml // Ansible の設定用 playbook │ └ resset.yml // 今回追加した削除用タスク │ ├ docker-compose.yml └ Dockerfile </code></pre> <p>ほぼ前の記事の通り、というか同じプロジェクトをそのまま流用しています。元々の意図が設定用プレイブックに対して設定を元に戻すためのものなので、同じ場所にあった方が都合は良いと考えました。</p> <p>ただ、リセットするためのタスクは設定用タスクほど複雑ではないのでタスクを分割せずに1つのファイルに既述することにしました。</p> <h3 id="ansible/vars/param_vars.yml"><a href="#ansible%2Fvars%2Fparam_vars.yml">ansible/vars/param_vars.yml</a></h3> <pre><code class="yml">username: USERNAME password: Password1234 rootdirectory: sample_site domain: www.sample.jp ipaddress: 192.0.2.1 portnum: 80 </code></pre> <p>上記ディレクトリ構造より、設定用のプレイブックに使用する変数ファイルがあるため、これをそのまま流用します。</p> <h3 id="ansible/resset.yml"><a href="#ansible%2Fresset.yml">ansible/resset.yml</a></h3> <pre><code class="yml">- name: Remove vsftpd and httpd settings become: yes become_user: ADMIN_USER become_method: su hosts: - add_vhost_servers vars_files: ./vars/param_vars.yml tasks: - name: Remove user user: name: "<span>{</span><span>{</span> username <span>}</span><span>}</span>" state: absent remove: yes - name: Remove user in vsftpd user_list blockinfile: path: /etc/vsftpd/user_list create: yes insertafter: EOF marker: "# {mark} ANSIBLE basic setup: <span>{</span><span>{</span> username <span>}</span><span>}</span>" block: "" - name: Remove user_conf file file: path: "/etc/vsftpd/user_conf/<span>{</span><span>{</span> username <span>}</span><span>}</span>" state: absent - name: Restart vsftpd systemd: name: vsftpd.service state: restarted daemon_reload: yes - name: Remove Apache virtual site data file: path: "/var/www/<span>{</span><span>{</span> rootdirectory <span>}</span><span>}</span>" state: absent - name: Remove Apache conffile file: path: "/etc/httpd/conf.d/<span>{</span><span>{</span> rootdirectory <span>}</span><span>}</span>.conf" state: absent - name: Restart httpd systemd: name: httpd.service state: reloaded daemon_reload: yes </code></pre> <p>今回のメイン。削除用のタスクです。</p> <p>やっていることは冒頭で記した通り。</p> <h2 id="動作確認"><a href="#%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D">動作確認</a></h2> <h3 id="削除用プレイブックを走らせる前"><a href="#%E5%89%8A%E9%99%A4%E7%94%A8%E3%83%97%E3%83%AC%E3%82%A4%E3%83%96%E3%83%83%E3%82%AF%E3%82%92%E8%B5%B0%E3%82%89%E3%81%9B%E3%82%8B%E5%89%8D">削除用プレイブックを走らせる前</a></h3> <pre><code class="bash"># less /etc/passwd ## 略 USERNAME:x: </code></pre> <p>設定用プレイブックで追加されたユーザがいることを確認。</p> <pre><code class="bash"># less /etc/vsftpd/user_list ## 略 # BEGIN ANSIBLE basic setup: USERNAME USERNAME # END ANSIBLE basic setup: USERNAME </code></pre> <p>ここにも。</p> <pre><code class="bash"># ls -al /etc/vsftpd/user_conf/ 合計 4 drwxrwxr-x 2 ADMIN_USER ADMIN_USER 23 MM月 DD hh:ii . drwxr-xr-x 3 ADMIN_USER ADMIN_USER 150 MM月 DD hh:ii .. -rw-rw-r-- 1 ADMIN_USER ADMIN_USER 107 MM月 DD hh:ii USERNAME # less /etc/vsftpd/user_conf/USERNAME # BEGIN ANSIBLE basic setup: USERNAME local_root=/var/www/sample_site # END ANSIBLE basic setup: USERNAME </code></pre> <p>ここにも。</p> <pre><code class="bash"># ls -al /var/www/ 合計 4 drwxr-xr-x 5 ADMIN_USER ADMIN_USER 51 MM月 DD hh:ii . drwxr-xr-x. 22 ADMIN_USER ADMIN_USER 4096 MM月 DD hh:ii .. drwxr-xr-x 2 ADMIN_USER ADMIN_USER 6 MM月 DD hh:ii cgi-bin drwxr-xr-x 3 ADMIN_USER ADMIN_USER 35 MM月 DD hh:ii html drwxr-xr-x 3 ADMIN_USER ADMIN_USER 17 MM月 DD hh:ii sample_site # ls -al /etc/httpd/conf.d/ 合計 36 drwxr-xr-x 2 ADMIN_USER ADMIN_USER 137 MM月 DD hh:ii . drwxr-xr-x 5 ADMIN_USER ADMIN_USER 92 MM月 DD hh:ii .. -rw-r--r-- 1 ADMIN_USER ADMIN_USER 366 MM月 DD hh:ii README -rw-r--r-- 1 ADMIN_USER ADMIN_USER 2926 MM月 DD hh:ii autoindex.conf -rw-r--r-- 1 ADMIN_USER ADMIN_USER 1252 MM月 DD hh:ii php.conf -rw-r--r-- 1 ADMIN_USER ADMIN_USER 9443 MM月 DD hh:ii ssl.conf -rw-r--r-- 1 ADMIN_USER ADMIN_USER 1252 MM月 DD hh:ii userdir.conf -rw-r--r-- 1 ADMIN_USER ADMIN_USER 824 MM月 DD hh:ii welcome.conf -rw-r--r-- 1 ADMIN_USER ADMIN_USER 439 MM月 DD hh:ii sample_site.conf # less /etc/httpd/conf.d/sample_site.conf <VirtualHost 192.0.2.1:80> DocumentRoot "/var/www/sample_site/web" ServerName www.sample_site.jp ServerAlias sample_site.jp ScriptAlias /cgi-bin/ /var/www/sample_site/web/cgi-bin/ RewriteEngine on RewriteCond %{HTTP_HOST} ^sample_site\.jp$ RewriteRule ^(.*)$ http://www.sample_site.jp$1 [R=301,L] <Directory "/var/www/sample_site/web"> allow from all AllowOverride All Options FollowSymLinks Require all granted </Directory> </VirtualHost> </code></pre> <p>Apache 側にも仮想サイトの設定があり、仮想サイト用のディレクトリが切られていることを確認。</p> <p>FTPでログインしたり、 <code>hosts</code> で名前解決して仮想サイトにアクセスできることを確認。</p> <p>一通りプレイブックの設定通りです。</p> <h3 id="削除用プレイブックを走らせる"><a href="#%E5%89%8A%E9%99%A4%E7%94%A8%E3%83%97%E3%83%AC%E3%82%A4%E3%83%96%E3%83%83%E3%82%AF%E3%82%92%E8%B5%B0%E3%82%89%E3%81%9B%E3%82%8B">削除用プレイブックを走らせる</a></h3> <h4 id="Dry run"><a href="#Dry+run">Dry run</a></h4> <pre><code class="bash"># ansible-playbook -i /workspace/ansible/targets/hosts /workspace/ansible/reset.yml -u SSH_REMOTEUSER --private-key=&quot;/root/.ssh/PRIVATE_KEY&quot; -K --check BECOME password: PLAY [Remove vsftpd and httpd settings] *************************************************************************** TASK [Gathering Facts] ********************************************************************************************ok: [192.0.2.1] TASK [Remove user] ************************************************************************************************changed: [192.0.2.1] TASK [Remove user in vsftpd user_list] ****************************************************************************changed: [192.0.2.1] TASK [Remove user_conf file] **************************************************************************************changed: [192.0.2.1] TASK [Restart vsftpd] *********************************************************************************************changed: [192.0.2.1] TASK [Remove Apache virtual site data] ****************************************************************************changed: [192.0.2.1] TASK [Remove Apache conffile] *************************************************************************************changed: [192.0.2.1] TASK [Restart httpd] **********************************************************************************************changed: [192.0.2.1] PLAY RECAP ********************************************************************************************************192.0.2.1 : ok=8 changed=7 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 </code></pre> <p>まずは Dry run でエラーが出ないことを確認。大丈夫そうです。</p> <h4 id="本番"><a href="#%E6%9C%AC%E7%95%AA">本番</a></h4> <pre><code class="bash"># ansible-playbook -i /workspace/ansible/targets/hosts /workspace/ansible/reset.yml -u SSH_REMOTEUSER --private-key=&quot;/root/.ssh/PRIVATE_KEY&quot; -K BECOME password: PLAY [Remove vsftpd and httpd settings] *************************************************************************** TASK [Gathering Facts] ********************************************************************************************ok: [192.0.2.1] TASK [Remove user] ************************************************************************************************changed: [192.0.2.1] TASK [Remove user in vsftpd user_list] ****************************************************************************changed: [192.0.2.1] TASK [Remove user_conf file] **************************************************************************************changed: [192.0.2.1] TASK [Restart vsftpd] *********************************************************************************************changed: [192.0.2.1] TASK [Remove Apache virtual site data] ****************************************************************************changed: [192.0.2.1] TASK [Remove Apache conffile] *************************************************************************************changed: [192.0.2.1] TASK [Restart httpd] **********************************************************************************************changed: [192.0.2.1] PLAY RECAP ********************************************************************************************************192.0.2.1 : ok=8 changed=7 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 </code></pre> <p>続いて本番実行。完了しました。</p> <h3 id="削除用プレイブックを走らせた後"><a href="#%E5%89%8A%E9%99%A4%E7%94%A8%E3%83%97%E3%83%AC%E3%82%A4%E3%83%96%E3%83%83%E3%82%AF%E3%82%92%E8%B5%B0%E3%82%89%E3%81%9B%E3%81%9F%E5%BE%8C">削除用プレイブックを走らせた後</a></h3> <p>それでは、念のため確認していきたいと思います。</p> <pre><code class="bash"># less /etc/passwd </code></pre> <p>設定したユーザが消えていることを確認。</p> <pre><code class="bash"># ls -al /etc/vsftpd/user_conf/ 合計 0 drwxrwxr-x 2 ADMIN_USER ADMIN_USER 6 MM月 DD hh:ii . drwxr-xr-x 3 ADMIN_USER ADMIN_USER 150 MM月 DD hh:ii .. # less /etc/vsftpd/user_list ## 略 nobody </code></pre> <p>vsftpd の設定も消えています。OK。</p> <pre><code class="bash"># ls -al /var/www/ 合計 4 drwxr-xr-x 4 ADMIN_USER ADMIN_USER 33 MM月 DD hh:ii . drwxr-xr-x. 22 ADMIN_USER ADMIN_USER 4096 MM月 DD hh:ii .. drwxr-xr-x 2 ADMIN_USER ADMIN_USER 6 MM月 DD hh:ii cgi-bin drwxr-xr-x 3 ADMIN_USER ADMIN_USER 35 MM月 DD hh:ii html # ls -al /etc/httpd/conf.d/ 合計 32 drwxr-xr-x 2 ADMIN_USER ADMIN_USER 114 MM月 DD hh:ii . drwxr-xr-x 5 ADMIN_USER ADMIN_USER 92 MM月 DD hh:ii .. -rw-r--r-- 1 ADMIN_USER ADMIN_USER 366 MM月 DD hh:ii README -rw-r--r-- 1 ADMIN_USER ADMIN_USER 2926 MM月 DD hh:ii autoindex.conf -rw-r--r-- 1 ADMIN_USER ADMIN_USER 1252 MM月 DD hh:ii php.conf -rw-r--r-- 1 ADMIN_USER ADMIN_USER 9443 MM月 DD hh:ii ssl.conf -rw-r--r-- 1 ADMIN_USER ADMIN_USER 1252 MM月 DD hh:ii userdir.conf -rw-r--r-- 1 ADMIN_USER ADMIN_USER 824 MM月 DD hh:ii welcome.conf </code></pre> <p>仮想サイトのディレクトリは丸ごと消えて、設定ファイルも消えました。OKです。</p> <p>当然、FTPでログインできなくなっていますし、ブラウザでアクセスすると仮想サイトが消えたので代理の仮想サイトが応答してきました。OKです。</p> <hr /> <p>以上より、一通り意図通りの動作になったことを確認できました。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <h3 id="Ansible"><a href="#Ansible">Ansible</a></h3> <h4 id="ユーザ削除"><a href="#%E3%83%A6%E3%83%BC%E3%82%B6%E5%89%8A%E9%99%A4">ユーザ削除</a></h4> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/moiwa/items/bab0f4c8d0dbf361afa4">Ansible ~userモジュール~ - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/KeijiYONEDA/items/011b78b12022202d4ea1">【Ansible】開発者ユーザー追加・削除のベスト・プラクティスを考える - Qiita</a></li> </ul> <h4 id="ファイル削除"><a href="#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%89%8A%E9%99%A4">ファイル削除</a></h4> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://tekunabe.hatenablog.jp/entry/2019/03/03/ansible_file_intro#-%E4%BE%8B2-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%84%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B">[Ansible] file モジュールの基本的な使い方(ファイルやディレクトリの操作) - てくなべ (tekunabe)</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/waterada/items/4e64cc6f810a92001c95">ansible のモジュール(ファイル操作等)をまとめてみました - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://www.greptips.com/posts/1269/">Ansibleのfileモジュールでディレクトリをabsentするのは危険 - grep Tips *</a></li> </ul> <h4 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h4> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://tech.smartcamp.co.jp/entry/2019/05/10/215035">Ansible Playbookでユーザ管理(登録・削除)をまるっとやる - SMARTCAMP Engineer Blog</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/volanja/items/54a7dbc75b909e89d8fc">Ansibleの新モジュール replace(置換)を使ってみた。 - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://uuutee.net/ansible/howto-replacing-text-with-ansible/">Ansibleでテキスト置換を行ういくつかの方法 | uuutee.log</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://akishin.hatenablog.jp/entry/20130817/1376709924">Ansible で複数行の文字列置換 - akishin999の日記</a></li> </ul> <h3 id="Linuxコマンド"><a href="#Linux%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89">Linuxコマンド</a></h3> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://eng-entrance.com/linux-command-userdel">userdelコマンドについて詳しくまとめました 【Linuxコマンド集】</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/16194 2020-11-02T08:20:21+09:00 2020-12-07T09:36:00+09:00 https://crieit.net/posts/CentOS7-squid-ngrok-LAN-Web 【CentOS7】squid + ngrokのサーバを構築してLAN内のWebサーバへかんたんにアクセスする <h2 id="できること"><a href="#%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%93%E3%81%A8">できること</a></h2> <ul> <li>LAN内の閉じた環境にいるWebサーバへ外部から一時的にアクセスしたい時に、このサーバをLAN内に追加するとかんたんにアクセスできます(VMware Host ClientやオンプレのGithub Enterpriseサーバのアクセスに使えました)</li> </ul> <h2 id="注意事項"><a href="#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85">注意事項</a></h2> <ul> <li>簡単にLAN内部へアクセスできるので、セキュリティリスクが高まります。会社で使うときはネットワーク管理者やセキュリティ担当に相談して許可を得てから導入しましょう。</li> <li>以下の手順はsquidのBasic認証しか設定していないので、意図しないホストへアクセスできないようにFirewalld等でアクセス制限を追加すると良いかも</li> </ul> <h2 id="動作確認済み環境"><a href="#%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D%E6%B8%88%E3%81%BF%E7%92%B0%E5%A2%83">動作確認済み環境</a></h2> <ul> <li>CentOS 7.6</li> <li>ngrok 2.3.34 <ul> <li>フリープラン登録が必要</li> </ul></li> <li>squid 3.5.20</li> <li>Windows10(プロキシに接続するPC)</li> </ul> <h2 id="squidインストール"><a href="#squid%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">squidインストール</a></h2> <pre><code class="bash">$ sudo yum -y install squid </code></pre> <h2 id="squidにBasic認証を追加"><a href="#squid%E3%81%ABBasic%E8%AA%8D%E8%A8%BC%E3%82%92%E8%BF%BD%E5%8A%A0">squidにBasic認証を追加</a></h2> <pre><code class="bash">$ sudo vim /etc/squid/squid.conf </code></pre> <p>ACLの設定は実環境に合わせて適宜変更すること</p> <h3 id="vimで追記したものは以下"><a href="#vim%E3%81%A7%E8%BF%BD%E8%A8%98%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%81%AF%E4%BB%A5%E4%B8%8B">vimで追記したものは以下</a></h3> <pre><code>auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/.htpasswd auth_param basic children 5 auth_param basic realm Squid Basic Authentication auth_param basic credentialsttl 5 hours acl password proxy_auth REQUIRED http_access allow password </code></pre> <h2 id="認証ユーザ作成(パブリックでフルオープンのプロキシは危険なので)"><a href="#%E8%AA%8D%E8%A8%BC%E3%83%A6%E3%83%BC%E3%82%B6%E4%BD%9C%E6%88%90%28%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%81%A7%E3%83%95%E3%83%AB%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%81%AE%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E3%81%AF%E5%8D%B1%E9%99%BA%E3%81%AA%E3%81%AE%E3%81%A7%29">認証ユーザ作成(パブリックでフルオープンのプロキシは危険なので)</a></h2> <pre><code class="bash">$ sudo htpasswd -c /etc/squid/.htpasswd hogeuser </code></pre> <ul> <li>以下のダイアログがでるので認証ユーザのパスワードを登録する</li> </ul> <pre><code>New password: Re-type new password: Adding password for user hogeuser </code></pre> <h2 id="squid起動"><a href="#squid%E8%B5%B7%E5%8B%95">squid起動</a></h2> <pre><code class="bash">$ sudo systemctl start squid </code></pre> <h2 id="firewalld許可(squid接続ポートをデフォルトのまま使う場合)"><a href="#firewalld%E8%A8%B1%E5%8F%AF%28squid%E6%8E%A5%E7%B6%9A%E3%83%9D%E3%83%BC%E3%83%88%E3%82%92%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E3%81%BE%E3%81%BE%E4%BD%BF%E3%81%86%E5%A0%B4%E5%90%88%29">firewalld許可(squid接続ポートをデフォルトのまま使う場合)</a></h2> <pre><code class="bash">$ sudo firewall-cmd --add-service=squid </code></pre> <h2 id="ngrokインストール"><a href="#ngrok%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">ngrokインストール</a></h2> <pre><code class="bash">$ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip </code></pre> <h2 id="zipファイル解凍"><a href="#zip%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%A7%A3%E5%87%8D">zipファイル解凍</a></h2> <pre><code class="bash">$ unzip ngrok-stable-linux-amd64.zip </code></pre> <h2 id="/usr/local/binへ解凍したものを移動"><a href="#%2Fusr%2Flocal%2Fbin%E3%81%B8%E8%A7%A3%E5%87%8D%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%82%92%E7%A7%BB%E5%8B%95">/usr/local/binへ解凍したものを移動</a></h2> <pre><code class="bash">$ sudo mv ngrok /usr/local/bin </code></pre> <h2 id="ngrok Authトークン登録"><a href="#ngrok+Auth%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E7%99%BB%E9%8C%B2">ngrok Authトークン登録</a></h2> <pre><code class="bash">$ ngrok authtoken [取得したAuthトークン] </code></pre> <h2 id="ngrok起動(squid接続ポート 3128をトンネル)"><a href="#ngrok%E8%B5%B7%E5%8B%95%28squid%E6%8E%A5%E7%B6%9A%E3%83%9D%E3%83%BC%E3%83%88+3128%E3%82%92%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AB%29">ngrok起動(squid接続ポート 3128をトンネル)</a></h2> <pre><code class="bash">$ ngrok tcp 3128 </code></pre> <p>起動したら以下のForwardingのところにあるURLとポート番号をメモしましょう<br /> <a href="https://crieit.now.sh/upload_images/df55270734cfc0df2f53d3729be52af25f9f42931f51c.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/df55270734cfc0df2f53d3729be52af25f9f42931f51c.png?mw=700" alt="fabf3f66d9161fd66c5a726c8627867c.png" /></a></p> <h2 id="PCにプロキシ設定を追加"><a href="#PC%E3%81%AB%E3%83%97%E3%83%AD%E3%82%AD%E3%82%B7%E8%A8%AD%E5%AE%9A%E3%82%92%E8%BF%BD%E5%8A%A0">PCにプロキシ設定を追加</a></h2> <p>Win10の設定だとこのように設定します。先程のURLとポート番号を入れるだけ</p> <p><a href="https://crieit.now.sh/upload_images/9b0f5c81e83e23c89ea343dfa02d67295f9f42a4f33f6.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/9b0f5c81e83e23c89ea343dfa02d67295f9f42a4f33f6.png?mw=700" alt="fd80f42810da4582078952f91e3a350c.png" /></a></p> <p>あとはブラウザで見たいLAN内WebサーバのIPアドレスを指定すればBasic認証後にアクセスできます。</p> arohajiro tag:crieit.net,2005:PublicArticle/16193 2020-11-02T08:15:54+09:00 2020-12-07T09:35:15+09:00 https://crieit.net/posts/CentOS7-firewalld-Outbound 【CentOS7】firewalldでOutbound通信を制限 <p>CentOS7から特定のIPアドレス宛(Outbound)への通信をダイレクトルールで制限したい時の設定例</p> <h3 id="例1) CentOS7 ⇒ 192.168.0.1宛ての通信を遮断する"><a href="#%E4%BE%8B1%29+CentOS7+%E2%87%92+192.168.0.1%E5%AE%9B%E3%81%A6%E3%81%AE%E9%80%9A%E4%BF%A1%E3%82%92%E9%81%AE%E6%96%AD%E3%81%99%E3%82%8B">例1) CentOS7 ⇒ 192.168.0.1宛ての通信を遮断する</a></h3> <pre><code class="bash">$ sudo firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -d 192.168.0.1 -j DROP </code></pre> <p>-d のアドレスはネットワークアドレスの指定も可能(例: 192.168.1.0/24)<br /> 永続的に設定したい場合は--permanentを追加してfirewall-cmd --reload</p> <h4 id="上記ルールを削除する場合はこちら"><a href="#%E4%B8%8A%E8%A8%98%E3%83%AB%E3%83%BC%E3%83%AB%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AF%E3%81%93%E3%81%A1%E3%82%89">上記ルールを削除する場合はこちら</a></h4> <pre><code class="bash">$ sudo firewall-cmd --direct --remove-rule ipv4 filter OUTPUT 0 -d 192.168.0.1 -j DROP </code></pre> <h3 id="例2) CentOS7 ⇒ 192.168.1.254宛ての通信は許可するがそれ以外(192.168.1.0/24)を遮断する"><a href="#%E4%BE%8B2%29+CentOS7+%E2%87%92+192.168.1.254%E5%AE%9B%E3%81%A6%E3%81%AE%E9%80%9A%E4%BF%A1%E3%81%AF%E8%A8%B1%E5%8F%AF%E3%81%99%E3%82%8B%E3%81%8C%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%28192.168.1.0%2F24%29%E3%82%92%E9%81%AE%E6%96%AD%E3%81%99%E3%82%8B">例2) CentOS7 ⇒ 192.168.1.254宛ての通信は許可するがそれ以外(192.168.1.0/24)を遮断する</a></h3> <pre><code class="bash">$ sudo firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -d 192.168.1.254 -j ACCEPT $ sudo firewall-cmd --direct --add-rule ipv4 filter OUTPUT 1 -d 192.168.1.0/24 -j DROP </code></pre> <h3 id="設定したダイレクトルールの確認"><a href="#%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%9F%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AB%E3%83%BC%E3%83%AB%E3%81%AE%E7%A2%BA%E8%AA%8D">設定したダイレクトルールの確認</a></h3> <pre><code class="bash">$ sudo firewall-cmd --direct --get-all-rules </code></pre> arohajiro tag:crieit.net,2005:PublicArticle/16192 2020-11-02T08:12:09+09:00 2020-12-07T09:31:04+09:00 https://crieit.net/posts/CentOS7-firewalld-ipset 【CentOS7】firewalldでipsetを使って通信を制限 <p>複数のIPアドレスからCentOS7への通信をDropしたい時の設定例です<br /> ipsetを使うとIPアドレスリストをインポートできるので便利です</p> <h2 id="新しいipset(以下例ではblocklistという名前)を作成"><a href="#%E6%96%B0%E3%81%97%E3%81%84ipset%28%E4%BB%A5%E4%B8%8B%E4%BE%8B%E3%81%A7%E3%81%AFblocklist%E3%81%A8%E3%81%84%E3%81%86%E5%90%8D%E5%89%8D%29%E3%82%92%E4%BD%9C%E6%88%90">新しいipset(以下例ではblocklistという名前)を作成</a></h2> <pre><code class="bash">$ sudo firewall-cmd --permanent --new-ipset=blocklist --type=hash:net </code></pre> <p><code>削除する場合は --delete-ipset=blocklist</code></p> <h2 id="ipsetが作成されたことの確認"><a href="#ipset%E3%81%8C%E4%BD%9C%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%81%93%E3%81%A8%E3%81%AE%E7%A2%BA%E8%AA%8D">ipsetが作成されたことの確認</a></h2> <pre><code class="bash">$ sudo firewall-cmd --permanent --get-ipsets </code></pre> <h2 id="ipsetインポート用リストの作成"><a href="#ipset%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E7%94%A8%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90">ipsetインポート用リストの作成</a></h2> <pre><code class="bash">$ cat > iplist.txt <<EOL </code></pre> <h3 id="作成例(Dropしたいアドレスを入力)"><a href="#%E4%BD%9C%E6%88%90%E4%BE%8B%28Drop%E3%81%97%E3%81%9F%E3%81%84%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%82%92%E5%85%A5%E5%8A%9B%29">作成例(Dropしたいアドレスを入力)</a></h3> <pre><code class="bash">192.168.0.128/25 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24 EOL </code></pre> <h2 id="ipsetへリストの内容をインポート"><a href="#ipset%E3%81%B8%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88">ipsetへリストの内容をインポート</a></h2> <pre><code class="bash">$ sudo firewall-cmd --permanent --ipset=blocklist --add-entries-from-file=iplist.txt </code></pre> <p><code>リストにあるエントリーを削除する場合は --remove-entries-from-file=iplist.txt</code><br /> <code>エントリーの一部を削除したい場合は --remove-entry=192.168.0.128/25</code></p> <h2 id="ipsetの内容確認"><a href="#ipset%E3%81%AE%E5%86%85%E5%AE%B9%E7%A2%BA%E8%AA%8D">ipsetの内容確認</a></h2> <pre><code class="bash">$ sudo firewall-cmd --permanent --ipset=blocklist --get-entries </code></pre> <h3 id="出力例"><a href="#%E5%87%BA%E5%8A%9B%E4%BE%8B">出力例</a></h3> <pre><code class="bash">192.168.0.128/25 192.168.1.0/24 192.168.2.0/24 192.168.3.0/24 </code></pre> <h2 id="dropゾーンへipsetを適用"><a href="#drop%E3%82%BE%E3%83%BC%E3%83%B3%E3%81%B8ipset%E3%82%92%E9%81%A9%E7%94%A8">dropゾーンへipsetを適用</a></h2> <pre><code class="bash">$ sudo firewall-cmd --permanent --zone=drop --add-source=ipset:blocklist </code></pre> <p><code>dropゾーンから外したい場合は --remove-source=ipset:blocklist</code></p> <h2 id="dropゾーンへの適用を確認"><a href="#drop%E3%82%BE%E3%83%BC%E3%83%B3%E3%81%B8%E3%81%AE%E9%81%A9%E7%94%A8%E3%82%92%E7%A2%BA%E8%AA%8D">dropゾーンへの適用を確認</a></h2> <pre><code class="bash">$ sudo firewall-cmd --permanent --zone=drop --list-all </code></pre> <h3 id="出力例"><a href="#%E5%87%BA%E5%8A%9B%E4%BE%8B">出力例</a></h3> <pre><code class="bash">drop (active) target: DROP icmp-block-inversion: no interfaces: sources: ipset:blocklist </code></pre> <h2 id="設定反映"><a href="#%E8%A8%AD%E5%AE%9A%E5%8F%8D%E6%98%A0">設定反映</a></h2> <pre><code class="bash">$ sudo firewall-cmd --reload </code></pre> arohajiro tag:crieit.net,2005:PublicArticle/16191 2020-11-02T08:01:27+09:00 2020-11-19T08:00:05+09:00 https://crieit.net/posts/CentOS7-traceroute-AS 【CentOS7】tracerouteコマンドで経由ホストのAS番号を表示させる <h2 id="コマンドの使い方"><a href="#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9">コマンドの使い方</a></h2> <pre><code class="bash">$ traceroute -A [IPアドレス] </code></pre> <p>Aオプションを入れるだけ<br /> whoisコマンドを使わなくてもASがわかるので経路調査が捗ります</p> <p>tracerouteコマンドが入ってないマシンはyumでいれましょう</p> <p><code>$ sudo yum install -y traceroute</code></p> <h2 id="コマンド出力例"><a href="#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E5%87%BA%E5%8A%9B%E4%BE%8B">コマンド出力例</a></h2> <p>経由ホストのIPアドレス横にAS番号が表示されます</p> <pre><code class="bash">$ traceroute -A 1.1.1.1 traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets 1 gateway (172.20.10.1) [*] 4.417 ms 4.381 ms 4.340 ms 2 * * * 3 172.25.255.254 (172.25.255.254) [*] 112.343 ms 112.233 ms 107.851 ms 4 tm4BBAC03.bb.kddi.ne.jp (27.89.250.145) [AS2516] 108.011 ms 107.940 ms 107.919 ms 5 27.80.241.173 (27.80.241.173) [AS2516] 107.894 ms 27.80.241.165 (27.80.241.165) [AS2516] 107.859 ms 102.762 ms 6 27.86.41.22 (27.86.41.22) [AS2516] 102.625 ms 106.791 ms 106.658 ms 7 as13335.ix.jpix.ad.jp (210.171.224.134) [AS7527] 94.166 ms 93.571 ms 93.407 ms 8 one.one.one.one (1.1.1.1) [AS13335] 93.253 ms 93.151 ms 92.961 ms </code></pre> arohajiro tag:crieit.net,2005:PublicArticle/16190 2020-11-02T07:58:07+09:00 2020-11-19T07:58:33+09:00 https://crieit.net/posts/CentOS7-whois-AS-IP 【CentOS7】whoisコマンドでAS番号やIPアドレスから割り当て組織を調べる <h2 id="こんな時に便利"><a href="#%E3%81%93%E3%82%93%E3%81%AA%E6%99%82%E3%81%AB%E4%BE%BF%E5%88%A9">こんな時に便利</a></h2> <ul> <li>攻撃に来た怪しいIPアドレスがどこの国から来たのか調べたい時</li> <li>NW系トラシュー時にAS番号から組織を特定したい時</li> <li>気になるサーバがどこにあるかなんとなく特定してニヤニヤしたい時</li> </ul> <p>whoisコマンドが入ってないマシンは事前にyumでいれましょう</p> <p><code>$ sudo yum install -y whois</code></p> <h2 id="コマンドの使い方(whoisサーバはチームカムリ※を使用)"><a href="#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%28whois%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AF%E3%83%81%E3%83%BC%E3%83%A0%E3%82%AB%E3%83%A0%E3%83%AA%E2%80%BB%E3%82%92%E4%BD%BF%E7%94%A8%29">コマンドの使い方(whoisサーバはチームカムリ※を使用)</a></h2> <p>※個人的に使いやすいと思っているwhoisサーバなので</p> <pre><code class="bash">$ whois -h whois.cymru.com [AS番号 or IPアドレス] </code></pre> <h2 id="コマンド出力例"><a href="#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E5%87%BA%E5%8A%9B%E4%BE%8B">コマンド出力例</a></h2> <ul> <li>AS番号から調べた時<br /> 組織名と国がわかります</li> </ul> <pre><code class="bash">$ whois -h whois.cymru.com AS15169 [Querying whois.cymru.com] [whois.cymru.com] AS Name GOOGLE - Google LLC, US </code></pre> <ul> <li>IPアドレスから調べた時<br /> AS番号と組織名と国がわかります</li> </ul> <pre><code class="bash">$ whois -h whois.cymru.com 1.1.1.1 [Querying whois.cymru.com] [whois.cymru.com] AS | IP | AS Name 13335 | 1.1.1.1 | CLOUDFLARENET - Cloudflare, Inc., US </code></pre> arohajiro tag:crieit.net,2005:PublicArticle/16164 2020-10-22T16:50:42+09:00 2020-11-04T11:33:21+09:00 https://crieit.net/posts/CentOS7-timedatectl-JST 【CentOS7】timedatectlコマンドでタイムゾーンをJSTへ変更する <p>インストール時にタイムゾーンの変更を忘れてて、dateコマンドで時刻を確認したところEDT(アメリカ東部夏時間)になっていました。。。(言語がEnglishだとデフォルトはEDTになる)</p> <pre><code class="bash">$ date 2020年 6月 11日 木曜日 22:44:37 EDT </code></pre> <p>ohhhhhhhh!!!!!!</p> <p>UTCなら+9するだけなのでいいけど、EDTからJSTへの脳内変換は個人的に厳しい(笑)<br /> なので、CentOS7のタイムゾーンをEDTからJSTへ変更することにしました。<br /> CentOS6にはなかった気がしますが、CentOS7ではタイムゾーンを変更する為の<code>timedatectl</code>コマンドが用意されていて簡単になっていますね。</p> <h1 id="タイムゾーンをJST(Asia/Tokyo)へ設定する方法"><a href="#%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%BE%E3%83%BC%E3%83%B3%E3%82%92JST%28Asia%2FTokyo%29%E3%81%B8%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95">タイムゾーンをJST(Asia/Tokyo)へ設定する方法</a></h1> <pre><code class="bash">$ sudo timedatectl set-timezone Asia/Tokyo </code></pre> <p>たったこれだけでOK、再起動しても設定は戻りません<br /> ちなみに、指定できるタイムゾーンの種類は<code>timedatectl list-timezones</code>で確認できます</p> <h2 id="現在設定されているタイムゾーンを確認する方法"><a href="#%E7%8F%BE%E5%9C%A8%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%BE%E3%83%BC%E3%83%B3%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95">現在設定されているタイムゾーンを確認する方法</a></h2> <h3 id="EDT → JST変更後"><a href="#EDT+%E2%86%92+JST%E5%A4%89%E6%9B%B4%E5%BE%8C">EDT → JST変更後</a></h3> <pre><code class="bash">$ sudo timedatectl Local time: 金 2020-06-12 11:46:08 JST Universal time: 金 2020-06-12 02:46:08 UTC RTC time: 金 2020-06-12 02:46:08 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: n/a </code></pre> <h3 id="変更前 (参考)"><a href="#%E5%A4%89%E6%9B%B4%E5%89%8D+%28%E5%8F%82%E8%80%83%29">変更前 (参考)</a></h3> <pre><code class="bash"> Local time: 木 2020-06-11 22:45:26 EDT Universal time: 金 2020-06-12 02:45:26 UTC RTC time: 金 2020-06-12 02:45:26 Time zone: America/New_York (EDT, -0400) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: yes Last DST change: DST began at 日 2020-03-08 01:59:59 EST 日 2020-03-08 03:00:00 EDT Next DST change: DST ends (the clock jumps one hour backwards) at 日 2020-11-01 01:59:59 EDT 日 2020-11-01 01:00:00 EST </code></pre> <p>夏時間の始まりと終わりの情報も出てくるんですねー</p> arohajiro