【Linux】ホームディレクトリを変更する ~SSHログインができない場合の対処~

ホームディレクトリとは?

ホームディレクトリとは、Linuxのユーザアカウントがログインし、シェルが起動した際のスタート地点のディレクトリのことです。一般的には /home配下に各ユーザアカウント名のディレクトリが生成されます。例えば

# useradd   testuser1

でユーザを作成すれば /home/testuser1 ディレクトリが生成され、testuser1 のホームディレクトリはこのディレクトリになります。

ですが場合によってはこのディレクトリを変更したいときもあるでしょう。特に /home配下に Webコンテンツやメールデータを格納する場合など、大容量になりがちなためボリュームを分割したり、ボリューム単位でのリストアを行うこともあります。そのときに管理ユーザだけは影響を無くしたい場合などはホームディレクトリを別にします。例えば /home2 というディレクトリを作成し、-d オプションでホームディレクトリを指定して useradd します。

# useradd -d /home2/testuser2   testuser2

すると、ホームディレクトリが変更します。ホームディレクトリの設定は cat /etc/passwd で確認できます。

# cat /etc/passwd
~~~
testuser1:x:1001:1001::/home/testuser1:/bin/bash
testuser2:x:1002:1002::/home2/testuser2:/bin/bash
~~~

ホームディレクトリを変更後に SSH アクセスができないなど不具合が起きた時は奴の仕業かも?

SELinux が悪さをしているかもしれません。デフォルトで/home 配下には以下のコンテキストが割当たるよう設定されています。

root@localhost ~]# semanage fcontext -l | grep user_home_t
/home/[^/]+/.+                                     all files          unconfined_u:object_r:user_home_t:s0
[root@localhost ~]# semanage fcontext -l | grep user_home_dir_t
/home/[^/]+                                        directory          unconfined_u:object_r:user_home_dir_t:s0
/home/[^/]+                                        symbolic link      unconfined_u:object_r:user_home_dir_t:s0

なのでこれを真似して /home2 の設定を入れます。

[root@localhost ~]# semanage fcontext -a -f d -t user_home_dir_t /home2/[^/]+
[root@localhost ~]# semanage fcontext -a -f l -t user_home_dir_t /home2/[^/]+
[root@localhost ~]# semanage fcontext -a -f a -t user_home_t /home2/[^/]+/.+

以下で設定内容確認

[root@localhost ~]# semanage export
boolean -D
login -D
interface -D
user -D
port -D
node -D
fcontext -D
module -D
fcontext -a -f d -t user_home_dir_t '/home2/[^/]+'
fcontext -a -f l -t user_home_dir_t '/home2/[^/]+'
fcontext -a -f a -t user_home_t '/home2/[^/]+/.+'
[root@localhost ~]#

semanage fcontext -l で /home関連を全部見てもらえば分かると思いますが他にもたくさんあります。もし引っ掛かるものがあればこの中から関連しそうなものを追加で適用することで解消できるかもしれません。

前述の例で言えば、SSH関連で以下の設定があります。

[root@localhost ~]# semanage fcontext -l | grep home | grep ssh
~~~
/home/[^/]+/\.ssh(/.*)?                            all files          unconfined_u:object_r:ssh_home_t:s0
~~~

これも真似します。

[root@localhost ~]# semanage fcontext -a -f a -t ssh_home_t /home2/[^/]+/\.ssh(/.*)?

これで SSHログインができるようになるはずです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする