前回の質問の回答
Windows上WinSCPからSFTP/SCPにて全ディレクトリが見えてしまう。
SSHで接続するなら、vsftpdの設定は関係ありません。
を勘違いされていないでしょうか?
上記回答はFTPはvftpd
の設定依存の話で、SSHは vftpd とは関係なくsshd
設定依存ですという意味です。
やりたいこと整理
・Windows上WinSCPからSFTP/SCPにて全ディレクトリを見られたくない
・特定目的のために特定ユーザーだけはSSH接続対象外にしたい
・web更新専用ユーザーを作りたい
・非SSHユーザーをFTPできるようにしたい
普通、vsftpdやsshでは、ユーザー認証はLinuxユーザーでログインできるか否かということが基本になります。それぞれ、ユーザー認証はいろいろな方法で制御できます。
特定のユーザーをSSH認証拒否
一番簡単なのは、/etc/ssh/sshd_config
に下記のようにSSH接続許可ユーザーをハードコーディングすることです。下記追加または編集して、SSHサーバーを再起動します。必ずユーザー名が正しいか確認しないとSSH接続できなくなるので注意してください。
AllowUsers ユーザー1 ユーザー2 ...
全ディレクトリを見られたくない
アクセス権限を分けたほうがよろしいかと思います。rootのみサーバーなどの設定ファイル編集が可能で、一般ユーザーはコンテンツやホームディレクトリのみ自由にアクセス可能であるのが普通です。ファイル構成を一般ユーザーに見られること自体は特に気にする必要はありません。
sudo
などを併用すればユーザーごとにも、グループごとにも細かくアクセス権限設定が可能で、許可したいコマンドや拒否したいコマンドなどを設定することも可能です。
非LinuxユーザーをFTP接続許可
これはLinuxユーザーをvsftpd
ログイン認証に使っているので発生する問題です。ですのでバーチャルユーザー認証方式に変更すれば可能です。
下記のようなvsftpdのログイン ユーザー名・パスワード ファイルを/etc/vsftpd/users.txt
に作成します。
conf
1ユーザー1
2パスワード1
3ユーザー2
4パスワード2
5//...
6//...
そして下記コマンドでハッシュDB化します。
bash
1db_load -T -t hash -f /etc/vsftpd/users.txt /etc/vsftpd/users.db
/etc/pam.d/vsftpd
をすべて コメントアウト してから下記のようにします。
conf
1auth required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/users
2account required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/users
vsftpd.conf
を下記のように追加(or 編集)します。
バーチャルユーザー方式ででも下記設定のように、どれかひとつのLinuxユーザーにマッチしている必要がありますので、新規Linuxユーザーを登録してここに設定するか、既存Linuxユーザーをここに設定します。
conf
1guest_enable=YES
2chroot_local_user=YES
3guest_username=ftp_user #←適当にユーザーを登録または、既存Linuxユーザーを設定
4user_config_dir=/etc/vsftpd/userconf
5
6anon_upload_enable=YES
7anon_mkdir_write_enable=YES
8anon_other_write_enable=YES
9anon_world_readable_only=NO
10anon_umask=022
11virtual_use_local_privs=YES
あとはvsftpdを再起動すれば完了です。