web-dev-qa-db-ja.com

RSAキーのみでSSHを許可し、パスワードとchrootでSFTPを許可するにはどうすればよいですか?

Ubuntu 16.04 LTSサーバーで、次のことを行いたいと思います。

  • RSAキー(パスワードなし)を使用してサーバーにSSHでログインするSudo特権を持つ非ルート管理者ユーザーを有効にします。
  • パスワードを使用してログインし、選択した非管理者ユーザーがSFTPで自分のホームディレクトリにファイルをアップロードできるようにする
  • 管理者以外のユーザーが残りのファイルシステムにアクセスできないようにする

Ubuntu 16.04.3 LTSの新しくインストールしたバージョンで作業しているため、すべてがデフォルトの工場出荷時の状態になっています。

この質問 と回答を注意深く読みましたが、解決策を見つけることができませんでした。

Sudo特権を持つnonrootadminユーザーを作成しました。

nonadminsftpグループのメンバーであるsftpaccessユーザーを作成しました。 /home/nonadminsftp/ディレクトリは次のようになります。

$ ls -al ~nonadminsftp
total 24
drwxr-xr-x 3 root         root       4096 Oct 25 00:52 .
drwxr-xr-x 5 root         root       4096 Oct 24 22:29 ..
-rw-r--r-- 1 nonadminsftp sftpaccess  220 Sep  1  2015 .bash_logout
-rw-r--r-- 1 nonadminsftp sftpaccess 3771 Sep  1  2015 .bashrc
drwxr-xr-x 3 nonadminsftp sftpaccess 4096 Oct 25 00:50 ftp
-rw-r--r-- 1 nonadminsftp sftpaccess  655 May 16 13:49 .profile

/etc/passwdのそれぞれのエントリは次のとおりです。

nonrootadmin:x:1000:1000::/home/nonrootadmin:/bin/bash
nonadminsftp:x:1002:1002::/home/nonadminsftp:/usr/sbin/nologin

/etc/sshd/sshd_configファイルに加えた変更は次のとおりです。

PermitRootLogin no
#PasswordAuthentication no

AllowUsers nonrootadmin nonadminsftp
Subsystem sftp internal-sftp
Match group sftpaccess
#ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
#ForceCommand internal-sftp

私が見た解決策は、これらの行の3つのコメントを外すことを提案しますが、私はそれを発見します

  • PasswordAuthentication noは、nonadminsftpユーザーがパスワードで接続できないようにします。

    $ sftp [email protected]
    Permission denied (publickey).
    Couldn't read packet: Connection reset by peer
    
  • ChrootDirectory %hは、rootadmin以外のユーザーがまったく接続できないようにします。

    $ ssh [email protected]
    packet_write_wait: Connection to 12.34.56.78 port 22: Broken pipe`
    
  • ForceCommand internal-sftpは、非rootadminがSSHアクセスを取得できないようにします。

    $ ssh [email protected]
    This service allows sftp connections only.
    Connection to mydomain.com closed.`
    

これらの行はコメントアウトされています:

  • nonrootadminには、RSAキーを使用したSSHアクセスがあります
  • nonadminsftpは、FileZillaなどのFTPクライアントを使用して接続できます。

しかし:

  • nonadminsftpは/home/nonadminsftpディレクトリにchrootedされていません
  • nonrootadminはパスワードでログインできます

私が行方不明になっているのは何ですか?

前もって感謝します

1
James Newton

@muruのおかげで、次の設定が機能するようになりました。

PermitRootLogin no
PasswordAuthentication no

AllowUsers nonrootadmin nonadminsftp
Subsystem sftp internal-sftp

Match group sftpaccess
# The following directives only apply to users in sftpaccess
PasswordAuthentication yes
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

以前にnonrootadminsftpaccessグループに追加しました。このユーザーをグループから削除した後...

$ Sudo gpasswd -d nonrootadmin sftpaccess
$ getent group ftpaccess
ftpaccess:x:1002:nonadminsftp

... nonrootadminはSSHを使用できるようになりました。

2
James Newton