/bin/false と /sbin/nologin と /etc/shells について
ユーザーのシェルとリモートログインの制限を行うことについて調べたことに関する備忘録。
目的
- あるユーザーをリモートからログインすることは不許可にする
- FTP の接続のみ許可
- シェルの利用を制限したい
解決方法
# usermod -s /sbin/nologin username
で、対象ユーザーのデフォルトシェルを /sbin/nologin に変更する。
/bin/false と /sbin/nologin について
/bin/false | /sbin/nologin | |
---|---|---|
Telnet の接続 | 不可 | 不可 |
SSH の接続 | 不可 | 不可 |
FTP の接続 | 不可 | 可*1 |
SFTP の接続 | 不可 | 不可 |
シェルの実行 | 不可 | 不可 |
/bin/false で FTP ログインを可能にしたい
# vi /etc/shells /bin/false
/etc/shells に /bin/false を追記すれば可能になるが、セキュリティが緩む点と、ユーザーのデフォルトシェルを単純に /sbin/nologin に指定すればいいので、わざわざ追記する必要はない*2。
特定のユーザーのデフォルトシェルを変更する
# usermod -s /sbin/nologin username
もしくは
# chsh /sbin/nologin username
/sbin/nologin を指定せずに、ユーザーに FTP 接続のみを許可する
下記のページで、他の対応方法が書かれていた。
手順は、
# vi /bin/ftp #!/bin/sh # this shell can user only ftp or pop. trap "/bin/echo Sorry; exit 0" 1 2 3 4 5 6 7 10 15 IFS="" /bin/echo /bin/echo "--------------------WARNING-----------------------" /bin/echo " You aren't allowed interactive access to SCNe.JP." /bin/echo " only usr ftp." /bin/echo " If you've a question, e-mail to root@localhost." /bin/echo "--------------------WARNING-----------------------" exit 0 # vi /etc/shells /bin/ftp
/bin/ftp の記述内容について
- ユーザーがログイン(リモートログインも含む)をした時に、/bin/ftp が実行される
- trap が実行されて、「1 2 3 4 5 6 7 10 15」のシグナルを出力して停止する
- IFS変数に空文字が代入される
- /bin/echo が実行されて、メッセージが出力される
/bin/ftp を直接実行すると、
% /bin/ftp --------------------WARNING----------------------- You aren't allowed interactive access to SCNe.JP. only usr ftp. If you've a question, e-mail to root@localhost. --------------------WARNING-----------------------
と表示される。
シェルの制限をする記述がないのに、FTP ログインのみ許可されているのは何故か
telnet や ssh とは違い、ユーザのシェルが /sbin/nologin といった偽シェルになっていたとしても、それが /etc/shells に正当なものとして書いてある限り、FTP は成立してしまう。ただし、(少なくとも Fedora Core 4 では)ユーザの指定シェルが /bin/false であれば、 /etc/shells に書いてないので FTP ログインも不可能となる。
http://www.asahi-net.or.jp/~aa4t-nngk/ftpd.html#chrootlocalnote
/bin/ftp を /etc/shells に登録することで FTP でのログインは可能にして、trap でシェルの実行を不可能にするというギミックになっている。
この解決方法は /etc/shells に /sbin/nologin が登録されていない可能性を考慮しているのかもしれないが、
- /etc/shells に追記できるということは、root 権限を有しているということ
- root 権限を有しているならば、/bin/ftp を作成せずに、/sbin/nologin を /etc/shells に追記することができる
ため、この解決方法は遠回りのように思える。
また、
--------------------WARNING----------------------- You aren't allowed interactive access to SCNe.JP. only usr ftp. If you've a question, e-mail to root@localhost. --------------------WARNING-----------------------
をリモートログインを試みた際に、上記のメッセージを表示したのならば、/sbin/nologin はユーザー独自のメッセージを設定することもできる。
# vi /etc/nologin
Write your messages.