表題があまり正確ではないので、正確に。
Linux(CentOS 6.x)ですが、sshでログインしたユーザが/を見えたりする状態って嬉しくない時があります。
そういう時に、自分のホームディレクトリ以下のフォルダーやファイル以外を見えなくしてしまおうというのが今回の説明です。
本当は、sshでrootにログイン出来なくした上で、他のユーザからsu -でrootにスイッチしたいと考えました。
その時、他のユーザにおいてホームディレクトリ以下しか見えない設定にしたかったのですが、思うように出来なさそうなので・・・諦めました。
なので、実のところ副産物に過ぎず、あまり問題も気にせず、一応出来たよ・・・ということで書きますね。
まず、前回sshでrootアカウントのログインを出来なくしました。
その続きで見ている人がいたら要注意です。
これから作成するユーザをrootの代わりに作ったユーザIDには設定しないでください。
これから作成するユーザはsu コマンドを利用してrootにスイッチすることは出来ません。
あまり利用される機会は少ないと思いますが・・・
順序を説明します。
まず、新たにユーザを作成します。
1 2 3 4 5 6 7 |
# adduser abc # passwd abc Changing password for user abc. New password: Retype new password: passwd: all authentication tokens updated successfully. # |
一応、フォルダーも作成されて.bashrcなんかも入れてくれています。
useraddコマンドで作成するとちょっと違った感じになっちゃいますので、必ずadduserコマンドで作成してください。
出来上がったホームディレクトを確認します。
1 2 3 4 5 |
# l total 48 drwxr-xr-x 12 root root 4096 Jan 15 20:24 . drwxr-xr-x 21 root root 4096 Nov 26 17:01 .. drwx------ 8 abc abc 4096 Jan 15 20:29 abc |
chrootするだけなら、この時点で特に設定を変更する必要はないのですが、最終目的はsshでログインまでさせることを考えているので、ここで設定を少し変更します。
理由は、sshでログインして移動させることが出来るディレクトリはroot権限になっている必要があるようです。
更に、オーナーをrootにしてしまうと、パーミッションを変えてやらないと一般ユーザが何も出来ない状態になってしまうからです。
では先程作ったabcユーザのフォルダーに対し設定変更を行います。
1 2 |
# chown root:root abc # chmod 755 abc |
ここから必要最小限のファイルをコピーします。
と言いながら、面倒なのでがっつりと(^^ゞ
1 2 3 4 5 6 7 8 |
# cd /home/abc # cp -p -r /bin /home/abc/bin # cp -p -r /dev /home/abc/dev # cp -p -r /etc /home/abc/etc # cp -p -r /lib /home/abc/lib # cp -p -r /lib64 /home/abc/lib64 # mkdir usr # cp -p -r /usr/bin /home/abc/usr/bin |
これで、chroot出来る環境が整ったはずです。
確認します。
1 2 |
# chroot /home/abc bash-4.1# |
これで成功です。
CTRL+Dで一度抜けます。
ここから、今度は作成したユーザ(abc)にsshでログインします。
1 2 3 |
# ssh abc@domain abc@domain's password: [abc@domain ~]$ |
入れることを確認したら、これも一旦抜けます。
このままでは、cd ..とすると/homeへ移動できてしまうはずです
sshdの設定を変更します。sshd_configファイルに以下の設定を追加します。最後に追加すれば良いはずです。
1 2 3 4 5 6 |
# vi /etc/ssh/ssd_config <<省略 以下は最後に追加>> Match User abc X11Forwarding no AllowTcpForwarding no ChrootDirectory /home/abc |
sshdの設定を再読み込みします。
1 2 3 4 5 |
# service sshd reload Reloading sshd: [ OK ] # service sshd status openssh-daemon (pid 16192) is running... # |
こんな感じになっていればOKです。
仕上げの確認です。
1 2 3 4 5 6 7 8 |
# ssh abc@domein abc@domein's password: -bash-4.1$ pwd / -bash-4.1$ cd .. -bash-4.1$ pwd / -bash-4.1$ |
cd ..で上位のディレクトリへ移動しようとしても移動できていないことが判ると思います。
設定は以上なのですが・・・ここで問題です。
1 2 3 |
-bash-4.1$ touch aaaa touch: cannot touch `aaaa': Permission denied -bash-4.1$ |
そうです。ファイルを作ることが出来ないんです!
入れるけど、何も作成することが出来ない状態なのです。
そこで、ファイルが作れる環境を準備します。
何度も済みませんが、また抜けてください。
root権限で作業を行う必要があります。
rootアカウントに戻ったら、以下の操作を行います。
作成するディレクトリは任意の名称で構いません。
1 2 3 4 5 6 7 |
# cd abc # mkdir user_space # chown abc:abc user_space # su - abc $ cd user_space/ $ touch aaa $ |
これで、/home/abc/user_spaceでabcユーザが自由に使えるスペースが出来ました。
先程と同じようにsshでログインしても大丈夫です。
今回この資料を残したのは、chrootで以下のエラーが発生したためです。
1 |
chroot: failed to run command `/bin/bash': No such file or directory |
この問題を解決する方法が他のサイトにも記載されてはいたのですが、私が調べたサイトでコピーしているフォルダーの内容などをチェックしても失敗してしまったので、それらしきフォルダーをコピーして動くようにした経緯を残したかったからです。
誰かの参考になるかな?
正直、あまり使い道が無い結果になっているのですが・・・
私の最終目的は、ここからsu コマンドでrootユーザにスイッチ出来るところまでだったのですが、それには/etc/passwdをコピーするなど、本来隠しておきたいファイルが公になってしまうことが解りました。
まあ、それでも良かったのかも知れませんが・・・取りあえず、この段階でやる気が尽きましたのでご勘弁ください。
どなたかフォローのコメントを頂ければ幸いです。
P.S.ほとんど見られていないだろうから、コメント無いよな~寂しいなぁ~(8_8)