qiita.com
そうだったのか。
【メモ】strace
https://blogs.oracle.com/solairo/entry/ksplice_strace
Strace -- システム管理者の顕微鏡
ex.netstat -a コマンドを実行するときに読み込まれるファイルとか見てみる。/etc/servicesが読み込まれていた
strace -e open netstat -a open("/etc/ld.so.cache", O_RDONLY) = 3 open("/lib/libselinux.so.1", O_RDONLY) = 3 open("/lib/libc.so.6", O_RDONLY) = 3 open("/lib/libdl.so.2", O_RDONLY) = 3 open("/lib/libsepol.so.1", O_RDONLY) = 3 open("/etc/selinux/config", O_RDONLY|O_LARGEFILE) = 3 open("/proc/mounts", O_RDONLY|O_LARGEFILE) = 3 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State open("/proc/net/tcp", O_RDONLY) = 3 open("/etc/nsswitch.conf", O_RDONLY) = 4 open("/etc/ld.so.cache", O_RDONLY) = 4 open("/lib/libnss_files.so.2", O_RDONLY) = 4 open("/etc/services", O_RDONLY) = 4 open("/etc/protocols", O_RDONLY) = 4 tcp 0 0 *:mysql *:* LISTEN tcp 0 0 *:pop3 *:* LISTEN tcp 0 0 *:http *:* LISTEN tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:smtp *:* LISTEN open("/etc/resolv.conf", O_RDONLY) = 4 open("/etc/host.conf", O_RDONLY) = 4 open("/etc/hosts", O_RDONLY) = 4 open("/etc/hosts", O_RDONLY) = 4 open("/etc/ld.so.cache", O_RDONLY) = 4 open("/lib/libnss_dns.so.2", O_RDONLY) = 4 open("/lib/libresolv.so.2", O_RDONLY) = 4 tcp 0 1388 www34237u.sakura.ne.jp:ssh 219.117.253.234.stati:60168 ESTABLISHED open("/proc/net/tcp6", O_RDONLY) = -1 ENOENT (No such file or directory) open("/proc/net/udp", O_RDONLY) = 3 udp 0 0 www34237u.sakura.ne.jp:ntp *:* open("/etc/hosts", O_RDONLY) = 4 udp 0 0 localhost.localdomain:ntp *:* udp 0 0 *:ntp *:* open("/proc/net/udp6", O_RDONLY) = -1 ENOENT (No such file or directory) open("/proc/net/sctp/eps", O_RDONLY) = -1 ENOENT (No such file or directory) open("/proc/net/sctp/assocs", O_RDONLY) = -1 ENOENT (No such file or directory) open("/proc/net/raw", O_RDONLY) = 3 open("/proc/net/raw6", O_RDONLY) = -1 ENOENT (No such file or directory) Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path open("/proc/net/unix", O_RDONLY) = 3 unix 2 [ ACC ] STREAM LISTENING 3484 @ISCSIADM_ABSTRACT_NAMESPACE unix 2 [ ACC ] STREAM LISTENING 3470 @ISCSID_UIP_ABSTRACT_NAMESPACE unix 7 [ ] DGRAM 3688 /dev/log unix 2 [ ] DGRAM 1190 @/org/kernel/udev/udevd unix 2 [ ACC ] STREAM LISTENING 3768 /var/run/acpid.socket unix 2 [ ACC ] STREAM LISTENING 3878 /var/lib/mysql/mysql.sock unix 2 [ ] DGRAM 28790175 unix 3 [ ] STREAM CONNECTED 28790119 unix 3 [ ] STREAM CONNECTED 28790118 unix 2 [ ] DGRAM 28790113 unix 2 [ ] DGRAM 3990 unix 2 [ ] DGRAM 3909 unix 2 [ ] DGRAM 3696 open("/proc/net/ipx", O_RDONLY) = -1 ENOENT (No such file or directory) open("/proc/net/ax25", O_RDONLY) = -1 ENOENT (No such file or directory) open("/proc/net/x25", O_RDONLY) = -1 ENOENT (No such file or directory) open("/proc/net/x25", O_RDONLY) = -1 ENOENT (No such file or directory) open("/proc/net/nr", O_RDONLY) = -1 ENOENT (No such file or directory)
AmazonLinuxに(Ruby2.2.10+)LodgeをインストールしようとしてMissing context keys for Qiita::Markdown::Filters
※Lodgeの最新のソースは
GitHub - lodge/lodge: イントラネット内で誰でも構築できる情報共有サービス
こっちっぽい。全文検索機能が付いているとのこと
qiita.com
こちらを参考に、Ruby 2.1.10(2.2/2.3ではまともに動作しない)にしてAmazonLinux/CentOS6にLodgeをインストールしたのだけど、記事を編集しようとすると以下のようなエラーになった
I, [2016-12-15T21:39:03.638825 #32611] INFO -- : Completed 500 Internal Server Error in 51ms F, [2016-12-15T21:39:03.643590 #32611] FATAL -- : ActionView::Template::Error (Missing context keys for Qiita::Markdown::Filters::ExternalLink: :hostname): 50: 51: <div class="panel-body markdown codehilite"> 52: <%= markdown_toc(@article.body).html_safe %> 53: <%= markdown(@article.body).html_safe %> 54: </div> 55: </div> 56: app/helpers/application_helper.rb:7:in `markdown' app/views/articles/show.html.erb:53:in `_app_views_articles_show_html_erb__4348143116428474722_70048233651280' config/initializers/quiet_assets.rb:6:in `call_with_quiet_assets'
http://qiita.com/noraworld/items/5984cdad9e7feedab594
によればv0.15.0以降で動作が変わっていてhostnameオプションが増えているのだけど、Lodgeでは設定されていない模様
Qiita::MarkdownはGemfileで指定されているがバージョン指定がない
gem 'qiita-markdown'
バージョンが指定されていない。今はv0.16が入っていた。
qiita-markdownの古いバージョンが必要。
gem 'qiita-markdown', '~> 0.14.0'
としてbundle installすることで解決した。
メモまで。
【メモ】プライベートアドレス
プライベートアドレスの範囲忘れがちなのでメモ
クラスA | 10.0.0.0-10.255.255.255 |
クラスB | 172.16.0.0-172.31.255.255 |
クラスC | 192.168.0.0-192.168.255.255 |
EC2のネットワーク立てるときどれ使うか悩むけどクラスA多い気がする
Rocket.ChatをAmazonEC2のCentOS7に導入した
EC2のCentOS7にRocket.chatをインストール&NginxでSSL処理のメモ
【感想】
・構築自体はCentOS7を用意すれば、後述するさくらのナレッジに紹介された手順通りで構築可能。
・t2.microやt2.smallではCPUクレジットを一瞬で使い切って激重になるのでそれなりのスペックが必要。m4.largeあたりだと快適。
・Slackよりいたずらにリッチな感じ。音声メッセージって使う?
・WebRTC経由でのビデオチャットは正直まだ安定しているとはいいがたい。端末によってはカメラにアクセスできない場合もあり、まだまだβな雰囲気。
【記事作成時のバージョン】
>Stable: 0.46.0 22nd November 2016
>https://rocket.chat/releases/latest/download
【Rocket.Chatとは】
上記さくらのナレッジの記事より抜粋:
基本機能はほぼSlackと同様で、UIも似ている。また、WebブラウザだけでなくiOS/AndroidアプリやWindows/Mac OS X/Linux向けのデスクトップクライアントも提供されている点もSlackと近い。さらに音声/ビデオチャット機能やファイル共有機能、画面共有機能も備えている。
実装言語はNode.jsで、データベースにはMongoDBを採用。また、アプリケーションフレームワークにはMeteorが使われている。そのため、これらの技術に関する知識があればカスタマイズしやすい。
【CentOS7へのRocket.Chatインストール手順】
例によってさくらのナレッジをそのままコピペです……
※最初CentOS6やAmazonLinuxへのインストールを試みたのですが、どうしてもうまくいかずに諦めました。CentOS7ならいけたので以下にメモします。
SELINUX
vi /etc/sysconfig/selinux
→SELINUX=disabled : 無効にしておく(AmazonLinuxは初期値でdisabledだがCentOSはenableなので。)
インストールログ
# EPELより必要モジュールをインストール rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install --enablerepo=epel mongodb-server nodejs npm curl GraphicsMagick # Rocket.Chat本体のインストール cd /usr/local/src curl -o rocket.chat.tgz -L https://rocket.chat/releases/latest/download tar xvzf rocket.chat.tgz mv bundle /opt/rocket.chat # 実行ユーザ「rocketchat」を追加 useradd -r rocketchat -U chown -R rocketchat:rocketchat /opt/rocket.chat # Systemdにサービス登録 # 環境ファイル作成 mkdir /etc/rocket.chat touch /etc/rocket.chat/rocketchat.env vi /etc/rocket.chat/rocketchat.env # ============================================================ MONGO_URL=mongodb://localhost:27017/rocketchat ROOT_URL=http://<サーバのIPなど>:3000/ PORT=3000 # ============================================================ # Systemdの設定ファイル作成 vi /etc/systemd/system/rocketchat.service # ============================================================ [Unit] Description=Rocket.Chat Server After=network-online.target mongod.target Requires=network-online.target [Service] ExecStart=/usr/bin/node /opt/rocket.chat/main.js EnvironmentFile=/etc/rocket.chat/rocketchat.env StandardOutput=syslog StandardError=syslog SyslogIdentifier=rocketchat User=rocketchat [Install] WantedBy=multi-user.target # ============================================================ # パッケージのディレクトリにて、npm installでnode.jsに必要なpackageをインストールする cd /opt/rocket.chat/programs/server/ npm install # systemctlコマンドで設定を反映させ、MongoDBおよびRocket.Chatを起動させる。 systemctl daemon-reload systemctl start mongod systemctl start rocketchat # 稼働サービスの確認 systemctl status rocketchat # サービス自動起動登録 systemctl enable mongod systemctl enable rocketchat # サービス自動起動登録状況確認 systemctl list-unit-files --type=service | grep mongo # mongod.service enabled systemctl list-unit-files --type=service | grep rocket # rocketchat.service enabled
【問題解決メモ】
さくらのナレッジの手順だけで進めた場合、rocketchatを開始すると以下のエラーが出た
systemctl status rocketchat
● rocketchat.service - Rocket.Chat Server Loaded: loaded (/etc/systemd/system/rocketchat.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since Wed 2016-12-07 16:35:30 JST; 13s ago Process: 12389 ExecStart=/usr/bin/node /opt/rocket.chat/main.js (code=exited, status=1/FAILURE) Main PID: 12389 (code=exited, status=1/FAILURE) Dec 07 16:35:30 rktcht.hogehoge.jp systemd[1]: Started Rocket.Chat Server. Dec 07 16:35:30 rktcht.hogehoge.jp systemd[1]: Starting Rocket.Chat Server... Dec 07 16:35:30 rktcht.hogehoge.jp systemd[1]: rocketchat.service: main process exited, code=exited, status=1/FAILURE Dec 07 16:35:30 rktcht.hogehoge.jp systemd[1]: Unit rocketchat.service entered failed state. Dec 07 16:35:30 rktcht.hogehoge.jp systemd[1]: rocketchat.service failed.
→パッケージのディレクトリにて、npm installを実行するとエラーは出なくなった
cd /opt/rocket.chat/programs/server/ npm install
SSL対応
Nginxを上に置いてSSL処理する。confは公式サイトのコピペ。
【参考】
https://rocket.chat/docs/installation/manual-installation/configuring-ssl-reverse-proxy#configuring-ssl-reverse-proxy
# epelからnginxインストール yum install nginx # SSL証明書配置 mkdir /etc/nginx/ssl hogehoge.comのpemとkeyを配置。 chmod 400 hogehoge.com.key chmod 400 hogehoge.com.pem # nginx.conf設定 vi /etc/nginx/conf.d/rktcht.conf #========================================================== # Upstreams upstream backend { server 127.0.0.1:3000; } # HTTPS Server server { listen 443; server_name hogehoge.com; error_log /var/log/nginx/hogehoge.com.access.log; ssl on; ssl_certificate /etc/nginx/ssl/hogehoge.com.pem; ssl_certificate_key /etc/nginx/ssl/hogehoge.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # don’t use SSLv3 ref: POODLE location / { proxy_pass http://127.0.0.1:3000/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header X-Forward-Proto http; proxy_set_header X-Nginx-Proxy true; proxy_redirect off; } } #========================================================== nginx -t systemctl restart nginx # 自動起動確認 systemctl enable nginx # 確認 systemctl list-unit-files -t service | grep -e nginx # nginx.service enabled
■そのほかやったこと
設定項目が山盛りで何をどう設定したらベストなのかがさっぱりわからない。とりあえず以下の設定で運用中。
[メール]-[SMTP]で既存のSMTPサーバを指定。SMTPサーバ側にユーザも専用で作成した。
[全般]-[言語]で日本語を選択
[管理]-[メッセージ]-[検索に常に正規表現を使用する]
(あなたの言語が MongoDBの全文検索 でサポートされていない場合、これを有効にすることをお勧めします。)
をONに。デフォルトのままだと部分一致検索ができない。
【CentOS6】chrootでsftp専用のアカウントを追加する
【前提】
1台のWebサーバにドキュメントルートを複数作成し、それぞれ個別のお客様にご利用いただくことになった。
他のお客様のドキュメントルートが見えないようにするために、
・sftp+chroot
でレンタルサーバ的な運用を行ってみる。
【方法メモ】
・sftpdグループにマッチしたら、sftpのみを許可してhome以上の階層に遷移させない(chroot)設定
chrootとは:
chrootとは、UNIXオペレーティングシステムにおいて、現在のプロセスとその子プロセス群に対してルートディレクトリを変更する操作である。 ルートディレクトリを別のディレクトリに変更されたプロセスは、その範囲外のファイルにはアクセスできなくなるため、この操作をchroot監獄などとも呼ぶ。"
chroot - Wikipedia
https://ja.wikipedia.org/wiki/Chroot
mkdir /opt/hogehoge # hogehoge用グループの作成(apacheも所属させておく) groupadd hogehoge gpasswd -a apache hogehoge # シェルへログイン不可ユーザを作成(-sオプションでログインシェルを/sbin/nologinにする) useradd -g hogehoge -d /opt/hogehoge/ -s /sbin/nologin user-hogehoge # 作成したユーザをapacheグループにも所属 gpasswd -a user-hogehoge apache # ユーザにパスワードを設定 passwd user-hogehoge
Match条件とChroot先を以下の様にしてsshd_configに追記
# Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp Match Group hogehoge User *hogehoge ChrootDirectory /opt/hogehoge X11Forwarding no AllowTCPForwarding no ForceCommand internal-sftp -f AUTHPRIV -l VERBOSE -u 0002
オプションについて確認
Subsystem sftp internal-sftp →SFTP の接続を処理するサブシステムを、標準の sftp-server から sshd 内部の internal-sftp に変更 X11Forwarding no :X11転送させない(GUIを外部から使わない) AllowTCPForwarding no :ポートフォワーディングさせない ForceCommand internal-sftp -f AUTHPRIV -l VERBOSE -u 0002 -f AUTHPRIV :syslogのfacilityを認証(AUTHPRIV)に指定する -l VERBOSE :ログレベル -u 0002 :umask
sftpユーザのため、chrootしたディレクトリ直下にディレクトリ(ここではdata)を配置し、sftpして編集できるようにする
cd /opt/hogehoge chown -R apache:hogehoge data find data -type d -exec chmod 2775 {} \; find data -type f -exec chmod g+w {} \;
あとは上記 /opt/hogehoge/data をドキュメントルートにしてサイト構築
ログについて
ファシリティはAUTHPRIVとなっている。AUTHPRIVは認証周りなので、
/etc/rsyslog.conf
# The authpriv file has restricted access. authpriv.* /var/log/secure
/var/log/secure
に出力されることになる。
Apr 21 12:14:27 hogehoge sshd[1428]: opendir "/htdocs/wp-content" [postauth] Apr 21 12:14:27 hogehoge sshd[1428]: closedir "/htdocs/wp-content" [postauth]
こんな感じ