SSHポート変更SELinuxでつまづく

Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版 でCentOS7.8 をAWS に実際にインスタンスとして起動、設定をしたのでメモ。

タイムゾーン設定
AWS EC2 Amazon Linuxインスタンス起動後、最初にやることまとめ

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# vi /etc/sysconfig/clock
ZONE="Asia/Tokyo" UTC= true
# shutdown -r now

yum ファステストミラー設定、グループインストール、アップデート
CentOS7 で yum groupinstall が出来ないんですけど。。。

# vi /etc/yum/pluginconf.d/fastestmirror.conf

include_only=.jp

# yum -y install bash-completion
# yum -y groupinstall base "Development tools" --setopt=group_package_types=mandatory,default,optional
# yum -y update

SSHポート変更
(AWSコンソールのEC2→セキュリティグループ→インバウンドルールの編集からカスタムTCPポート20022を許可)

# vi /etc/ssh/sshd_config
Port 20022
# setenforce 0 # vi /etc/selinux/config
SELINUX=permissive # semanage port -a -t ssh_port_t -p tcp 20022 # systemctl restart sshd # systemctl enable sshd

ここでSELinuxのコンテキスト変更せずにインスタンス再起動するとsshd 起動エラーを起こして通信できなくなる罠。AWSで再起動後、SSHが繋がらなくなった場合の対処法。SELinuxが原因でした。

semanage port -a -t ssh_port_t -p tcp 20022

ふしあなさん、/etc/ssh/sshd_config に英文の注意書きがありましたね・・・これに気付くまでインスタンス削除、起動を10回繰り返しましたよorz

設定の途中で一時的にPermissive にしてもセキュリティ上は最終的にSELinux は有効にすることが望ましいと思います。Amazon LinuxでSELinuxを有効にする。

AWS ではセキュリティグループでポート管理を行うのでインスタンス内でfirewalld をアクティブにしないのがベストプラクティスのようですね。

AWSコンソールからVPC→アクション→DNS解決の編集を有効化

AWSコンソールからVPC→アクション→DNSホスト名の編集を有効化

AWSコンソールからRoute53→ホストゾーン作成

AWSコンソールからRoute53→EC2のElastic IP からAレコード転記

あらかじめGodaddyで取得した独自ドメインのネームサーバーにホストゾーンで生成されたアドレスを転記

GoDaddyからRoute53によるDNS管理に変える方法

nslookup ブラウザで名前解決できることを確認して作業終了しました。

SELinux によるWordPress のパーミッション設定

メディアライブラリへの画像追加
 wordpress アップロード中「この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか。」とエラーが出る。
プラグインのインストール
 ある時突然、プラグインのインストールをしようとして「ディレクトリを作成できませんでした。」とプラグインのインストールに失敗。
google で検索しても「パーミッションが悪い」「.htaccess を見直してみたら?」と言われいろいろ設定をいじっても解決しなかったので途方に暮れた

経験はありませんか。

httpdのドキュメントルートが通常とは違う場合、もしかしたら、SELinux のアップデートでポリシーが変わって書き込みが出来なくなったのかもしれません。

誤)# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/wordpress/wp-admin/uploads (/.*)?"

誤)# restorecon -R "/var/www/html/wordpress/wp-admin/uploads"

正)# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/wordpress/wp-content/uploads (/.*)?"

正)# restorecon -R "/var/www/html/wordpress/wp-content/uploads"
(uploads/ の他に、plugins/ themes/ ディレクトリも同様に設定が必要かもしれません

パーミッション、.htaccess、所有権のチェックでも問題がない場合、疑うべき選択候補ではあると思います。↓

CentOS7のSELinuxが有効な状態でhttpdからファイルに書き込みを行う設定

SNMP でハマった・・・orz

# yum install net-snmp*
# snmpwalk -v 2c -c public localhost
Timeout : No Response from localhost

Timeout でハマりまくったのでメモ。/etc/snmp/snmpd.conf を編集

# vi /etc/snmp/snmpd.conf

com2sec local localhost private
com2sec  local       localhost       public
com2sec  mynetwork   192.168.24.0/24  public

group  local       v1             local
group  local       v2c            local
group  local       usm            local
group  mynetwork   v1             mynetwork
group  mynetwork   v2c            mynetwork
group  mynetwork   usm            mynetwork

view  all      included   .1                 80

access local "" any noauth exact all none none
access mynetwork "" any noauth exact all all none

rocommunity public ←(これであっけなく動いた
syslocation securenet (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
disk / 10000
# vi /etc/snmp/snmpd.conf

iptables でファイアウォールUDP 161, 162 番のポート解放、Windows 側も。

# vi /etc/sysconfig/iptables
-A INPUT -p udp -m udp --dport 161 -j ACCEPT
-A INPUT -p udp -m udp --dport 162 -j ACCEPT

TCPWrapperホスト設定。 /etc/hosts.allow にsnmpd をローカルネットワークで許可

# vi /etc/hosts.allow
snmpd : 127.0.0.1, 192.168.0.

一応、SELinux でsnmp を指定しているポートを調べて解放。

# semanage port -l | grep -w 161
snmp_port_t                    tcp      161-162, 199, 1161
snmp_port_t                    udp      161-162

サーバー買ったときに付いていた、ServerView Suite というソフトをREADME.txt を参考にインストールしてみました。(Oracle のJAVA JDK を入れてyum で必要パッケージを追加してポート解放して後、・・・忘れました。)とにかく、ブラウザでサーバーが見えるようにはなったのですけど、[SNMP] タイムアウトと表示が出て前に進みません。README.txt をよく読むと「SELinux 無効にしてからインストールしてね。」って先に云ってよ。パッケージでSNMP をインストールしなきゃいけないらしくて、ずーっとTimeout で蹴られたけど、linux – CentOS, Timeout: No Response in remote SNMP access – Server Fault をググったら、コミュニティ名が違うってことですね。rocommunityして解決。コミュニティのディレクティブには設定が出来る、rwcommunity もあるようです。書式は、SNMP のアクセス制御を設定する – いますぐ実践! Linuxシステム管理 / Vol.234 に詳しい解説がありましたので引用します。

rocommunity community address [OID | -V view]
rwcommunity community address [OID | -V view]

まともに動くようになるには、メールサーバーを立ててSSL証明書を作らないといけませんね。

FTP のSELinux 設定

WinSCP やSSH があるのでたぶん、使わないと思ったのでしばらく忘れていた vsftp が久しぶりにつながらなかったので設定をgoogle 検索しました。

SELinux コンテキスト設定

# setsebool -P ftp_home_dir 1

HOSTS ファイル設定

# vi /etc/hosts.allow
  vsftpd:192.168.0.  ←(追記

やっぱり使わないですよね。

(以下加筆

ホームディレクトリから上位階層が見える問題を解消しました。

vftpdでユーザごとに上の階層に移動できないように制限する – [Swb:]渋谷に住むWEBデザイナの備忘録

# vi /etc/vsftpd/vsftpd.conf
chroot_list_enable=YES  ← チェックを外す
chroot_list_file=/etc/vsftpd/chroot_list ← チェックを外す
chroot_local_user=YES ← 追記

# vi /etc/vsftpd/chroot_list (ファイル生成
# service vsftpd restart (vsftpd 再起動

(加筆ここまで

※過去ログ Linux をWindows のファイルサーバーにする

Linux にsamba をインストールしてみました。(私の環境でうまくいったよ~という話でベストプラクティスではありません。)参考URL:Windowsファイルサーバー構築(Samba) – CentOSで自宅サーバー構築

# yum install samba

iptables のファイアウォールのポート解放。Windows 側のセキュリティソフトがあれば、ローカルサービスのTCP とUDP のポート135~139 445 をプライベートネットワークで受信許可して下さい。service iptables restart で設定反映。

# vi /sysconfig/iptables
・・・
-A INPUT -p tcp -m tcp --dport 135:139 -j ACCEPT
-A INPUT -p udp -m udp --dport 135:139 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 445 -j ACCEPT
・・・
# service iptables restart

ここでSamba ユーザー登録。Linux のユーザー名で、Windowsのアカウント名と同名に限ります。が、一時的にWindows のアカウント名をLinux 側に合わせて変更し、一度資格情報を保存すればWindows側 のユーザー名は元に戻してもアクセスできました。

# pdbedit -a gusachan
new password
retype new password

設定ファイルを編集します

# vi /etc/samba/smb.conf
・・・
[global]
・・・
 workgroup = WORKGROUP
    server string = SECURENET
・・・
    passdb expand explicit = no

Samba ファイルサーバー起動

# service smb start
# service nmb start
# chkconfig smb on
# chkconfig nmb on

エクスプローラ起動
samba_securenet

Windows ネットワークにサーバーが見えました。クリックすると「・・アクセス許可がありません」と蹴られました。ディレクトリを作成してSELinux のコンテキスト設定します。

# mkdir /home/gusachan/samba/
$ mkdir /home/samba/share (訂正 root権限で作成するとアクセス不可
# chcon -t samba_share_t /home/samba/share -R

samba_gusachan

フォルダが表示されました。

追記)表示されたフォルダにアクセスできるか検証したところ、ディレクトリの所有権がroot になっており、書き込み、フォルダ作成不可でした。追加で所有権変更コマンド

# chown -R samba:samba /home/samba/share/

としました。(本来は最初から、ユーザー権限でディレクトリ作成すれば良いです。上記訂正してお詫び申し上げます。)

SELinux GUIツール

SELinux の挙動はベテランの方でも把握が難しいと云われているそうですが、GUI ツールがありましたのでご紹介します。

GUIインタフェースを利用したSELinux設定 CentOS6

# yum install policycoreutils-gui

これでSELinux の細かいオプションや、boolean値をコマンドに依らず直観的に設定できますね。

Screenshot

ホームディレクトリの公開

CentOS6 では、SELinux によりホームディレクトリの公開は制限されていました。apache にアクセス許可させる場合は、SELinux = Permissive にするように、一時避難的に下記の設定が必要でした。

[root@centos ~]# setenforce 0

試みに、httpd_enable_homedirs の論理パラメータを、getsebool コマンドを使って確認すると、

[root@centos ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off

アクセス禁止になっています。設定を on に変更するには、setsebool コマンドで

# setsebool httpd_enable_homedirs on

にする必要があります。しかし、この設定はシステムを再起動すると元に戻ってしまいます。永続的に設定するには、-P オプションを指定します。

# setsebool -P httpd_enable_homedirs on

SELinux のお勉強もまあ、多少はね。

Linux サーバーセキュリティ 徹底入門 / 中島能和

51jemnVucZL__AA324_PIkin4,BottomRight,-33,22_AA346_SH20_OU09_