ユーザを作成
※必要に応じて追加する。root ユーザしかいない場合、作業用ユーザを作成することを強く推奨。
※AWSのEC2では始めから ec2-user が作成されているので、これを利用すればいい。
■ユーザを作成
# useradd refirio … 一般ユーザ「refirio」を作成。
# passwd refirio … 「refirio」のパスワードを設定。
# cat /etc/passwd … ユーザ一覧を確認する場合。
# groups refirio … 「refirio」ユーザが属するグループを確認する場合。
refirio : refirio wheel
# su - refirio … 「refirio」になる場合。
# su -s /bin/bash - refirio … シェルを指定して「refirio」になる場合。
# userdel -r refirio … 「refirio」を削除する場合。
$ passwd … 一般ユーザが自身のパスワードを変更する場合。
これで、Poderosaなどから以下の情報で接続できる。
(ただしパスワード認証が禁止されているサーバの場合、引き続き鍵認証の設定を行う必要がある。)
接続先 : サーバのアドレス
プロトコル : SSH2
ポート番号 : 22 (ポート番号を変更した場合はその番号。)
ユーザ名 : 設定したユーザ名
パスワード : 設定したパスワード
オプションを指定することで、有効期限やログインシェルを指定してアカウントを作成したりもできる。
useraddコマンドについて詳しくまとめました 【Linuxコマンド集】
https://eng-entrance.com/linux-command-useradd
Linuxコマンド【 passwd 】ユーザーのパスワードを変更 - Linux入門 - Webkaru
https://webkaru.net/linux/passwd-command/
■鍵で認証できるように設定(サーバ内で鍵の作成を行う場合)
# su refirio
$ cd
$ ssh-keygen -t rsa
$ cd /home/refirio/.ssh
$ cp id_rsa.pub authorized_keys
$ chmod 600 authorized_keys
これで /home/refirio/.ssh/id_rsa をダウンロードして鍵ファイルとして指定すれば、
SSHで refirio ユーザとして鍵認証で接続できる。
接続先 : (サーバのアドレス。)
プロトコル : SSH2
ポート番号 : 22 (ポート番号を変更した場合はその番号。)
ユーザ名 : (設定したユーザ名。)
秘密鍵 : (作成した秘密鍵。)
パスワード : (作成した秘密鍵のパスワード。パスワードを設定していなければ空欄で認証。)
■鍵で認証できるように設定(Poderosaで鍵の作成を行う場合)
・Poderosaなどで鍵(公開鍵・秘密鍵)を作成する。
Poderosaの場合、メニューの「ツール → SSH鍵作成ウィザード」から作成できる。
鍵は「RSA」の「2048」で作成するといい。
パスワードなしの鍵を作成することもできる。
「秘密鍵を名前をつけて保存」から秘密鍵を、「OpenSSH形式で公開鍵を名前をつけて保存」から公開鍵を保存できる。
WindowsからSSHサーバーへリモート接続(Poderosa鍵方式ログイン編)
http://fedorasrv.com/poderosa-public.shtml
SSH2鍵方式でログイン 〜自(己満足)宅サーバー〜
http://jintaro.com/fedoracore5/fc5_poderosa_key.shtml
CentOS7.3でSSH接続(公開鍵認証)する方法 - Qiita
https://qiita.com/uhooi/items/137de4578534c8e7e7f2
root権限で、上記で作成した公開鍵をサーバに配置する。
# mkdir -p /home/refirio/.ssh … 公開鍵格納用ディレクトリを作成。
# chmod 700 /home/refirio/.ssh … 公開鍵格納用ディレクトリのパーミッションを変更。
# vi /home/refirio/.ssh/authorized_keys … 公開鍵をauthorized_keysに保存。(鍵認証時、この場所にこのファイル名で保存したファイルが参照される。)
作成した秘密鍵を使えば、「サーバ内で鍵の作成を行う場合」と同様にサーバに接続できる。
■rootになれるユーザを管理者のみにする
ssh-rsa xxxxxxxxxx … 作成した公開鍵の内容を全てコピーして貼り付ける。
# chmod 600 /home/refirio/.ssh/authorized_keys … authorized_keysのパーミッションを変更。
# chown -R refirio:refirio /home/refirio … ユーザディレクトリの所有者を変更。
# usermod -G wheel refirio … 「wheel」グループ(rootになれるユーザのグループ)にユーザを追加。
# vi /etc/pam.d/su
■作業用ユーザで sudo ができるようにする
・visudoコマンドは「vi /etc/sudoers」と同じ。
ただし /etc/sudoers は読み取り専用ファイルで、ファイル内にも「visudoコマンドで編集すべき」と書かれている。
・root操作に関わる設定なので、気軽に編集できないようにされていると思われる。
#auth required pam_wheel.so use_uid
auth required pam_wheel.so use_uid … コメント解除。
# visudo
CentOSでuserをsudo可能にする - Qiita
https://qiita.com/Esfahan/items/a159753d156d23baf180
sudoの権限を設定するvisudoコマンド【Linuxコマンド集】
https://eng-entrance.com/linux-command-visudo
■rootでの直接ログインを禁止・パスワード無しのログインを禁止
# %wheel ALL=(ALL) ALL
%wheel ALL=(ALL) ALL … コメント解除。
# vi /etc/ssh/sshd_config
なお、/etc/ssh/sshd_config の以下の部分によってパスワード認証の許可と禁止を行うことができる。
CentOS7では、初期設定でパスワード認証が禁止されている。
#PermitRootLogin yes
PermitRootLogin no … noに設定。(rootでの直接ログインを禁止。)
#PermitEmptyPasswords no
PermitEmptyPasswords no … コメント解除。(パスワード無しのログインを禁止。)
# systemctl restart sshd … SSHを再起動。
PasswordAuthentication no … noだとパスワード認証は禁止。(yesだと許可。)
■同じユーザで複数の鍵を使い分ける
同じユーザに複数の鍵を設定することができる。
これにより、1つのユーザでもAさんからのアクセスは許可してBさんからのアクセスは禁止…のような制御ができる。
authorized_keysに改行区切りで複数の公開鍵を記載すると、対応する各秘密鍵で認証できるようになる。
# vi /home/refirio/.ssh/authorized_keys
複数の公開鍵を使い分ける - May the Source be with you
https://mizuno.hatenadiary.org/entry/20080705/1215238138
サーバーに複数の公開鍵で接続するために authorized_keys を複数設定する方法 | ウェブル
http://weble.org/2011/10/27/authorized-keys
■ホームディレクトリより上層へのアクセスを禁止する
※先に鍵認証の設定などをして接続確認もしておく。
・chrootを使う。
・/etc/ssh/sshd_config で「特定ユーザに対して ChrootDirectory が実行されるようにする」と設定する。
・ただしそれだけだと対象ユーザがコマンドを参照できなくなるので、あらかじめユーザ領域にコマンドをコピーする。
という流れで設定する。
以下が参考になりそう。
chroot【コマンド】とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
http://wa3.i-3-i.info/word13814.html
chroot環境の作成 - Qiita
https://qiita.com/yan16/items/ffb8c791405f5e8eac25
特定のユーザのみSFTPでchrootする | Developers.IO
https://dev.classmethod.jp/cloud/aws/sftp-chroot/
WindowsからSSHサーバーへファイル転送(WinSCP) - CentOSで自宅サーバー構築
http://centossrv.com/winscp.shtml
SSHサーバー構築(OpenSSH) - CentOSで自宅サーバー構築
http://centossrv.com/openssh.shtml
SFTPでchrootを設定しつつSSHでログインできないユーザーを作成する | work.log
https://worklog.be/archives/3510
以下が分かりやすそうなので、参考にして実際に試してみた。
chrootを用いてSSHユーザのディレクトリを制限する | ハックノート
https://hacknote.jp/archives/32888/
以下で検証してchrootが有効になっているのを確認できた。
ただし後述しているが、引き続き検証したいことはある。
ssh-rsa xxxxxxxxxx
ssh-rsa yyyyyyyyyy
ssh-rsa zzzzzzzzzz
# cd /home/refirio
# cp -rp /bin /home/refirio/bin
# cp -rp /lib /home/refirio/lib
# cp -rp /lib64 /home/refirio/lib64
# mkdir usr
# cp -rp /usr/bin /home/refirio/usr/bin
# cp -rp /usr/lib /home/refirio/usr/lib
# cp -rp /usr/lib64 /home/refirio/usr/lib64
# chown root. /home/refirio
# chmod 755 /home/refirio
# cd /home/refirio
# chown refirio. *
# vi /etc/ssh/sshd_config
以上でrefirioユーザに対してchrootが適用された。
/home/refirio の所有者をrootにすると refirio がファイルを作成したりできないが、rootにしておかないとログインできない。(すぐに接続が終了される。)
ホームディレクトリ直下に別途 document などを作って所有者を refirio にし、この中で作業してもらうくらいか。
以下は検証したいことメモ。
・ユーザディレクトリの所有者はrootで、権限変更で書き込み権限を与えたりするとどうなるか。
・binなどの命令をコピーしなかったらどうなるのか。
・llコマンドを使えるようにできるか。
・コマンド入力時にDelキーなどを使えるようにできるか。
・ホームディレクトリ内ではなく、/var/www 内だけで作業させるようにもできるか。
・Vagrantでも同様の環境を作れるか。
chrootからの脱出も試したい。
仙石浩明の日記: chroot されたディレクトリから脱出してみる
http://www.gcd.org/blog/2007/09/132/# override default of no subsystems
#Subsystem sftp /usr/libexec/openssh/sftp-server … コメントアウト。
Subsystem sftp internal-sftp … 追加。
Match User refirio … 以降を末尾に追加。(複数ユーザがある場合、さらに末尾に追加していく。)
ChrootDirectory /home/refirio
X11Forwarding no
AllowTcpForwarding no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# systemctl restart sshd