私は単に「もの」を学ぶために家にUbuntuサーバーを設定しました。少し誇張したのにSSDに空きスペースが残っていました。私のコンピュータにバックアップできるように、友達に少しスペースを与える予定です。彼は私にも同じ機会を与えます。利益! !
私のシステムの要件/設定は次のとおりです。
ユーザーはキーペアを使用してsshdを介してのみログインできます。これが私のシステムでSSHを設定する方法です。パスワードアクセスは許可されていません。
追加のユーザーは、シェルアクセスを持っているか、どのような方法でも私のサーバーでコマンドを実行しないでください。
- /mnt/coproにあるフォルダに対するsshdの書き込みおよび読み取り権限のみを付与したいと思います。彼はsshdを介してduplicatiを使用してバックアップを作成します。
通常、フォルダは(愚かな)ファイルサーバーとしてアクセスできるはずですが、SSHを介してキーペアを介してのみアクセスできます。
私はいくつかの調査をしましたが、全体的に満足のいく答えが見つからなかったか、機能するソリューションで見つかった答えを適切に組み合わせることができませんでした。
だから私の質問は次のようになります
- シェルアクセスなしでユーザーを作成する方法
- 選択したフォルダへのユーザーの読み取り/書き込みアクセスを許可するにはどうすればよいですか?
- 特定のユーザーの秘密鍵をどこに保存しますか?
助けてくれてありがとう。
答え1
私はあなたがSSHサーバーとしてOpenSSHを使用していると仮定します。私はこれがUbuntuのデフォルト値だと思います。
書類のコピー実際にはSFTPアクセスのみが必要であることを明確にすると、これは簡単になります。
- 最も重要なのは、ユーザーに一致するセクションまたは
Match User
セクションMatch Group
を設定することです(場合によっては、外部SFTPサーバーを使用することもできます。これは実際には任意のコマンドである可能性があります。特定の項目にも使用できます)。 )様々なリツイートもブロックしたい可能性が高いです。残念ながら、より多くを追加するには、SSHのアップグレードを見続ける必要があります。最後に、欲しいものを確認しました(一部はデフォルトでは「いいえ」です)。/etc/ssh/sshd_config
ForceCommand
ForceCommand internal-sftp
git
AllowAgentForwarding no
AllowTCPForwarding no
AllowStreamLocalForwarding no
PermitTTY no
PermitTunnel no
PermitUserEnvironment no
PermitUserRC no
X11Forwarding no
まず、ファイルシステム権限から始めます。これはあなたの個人ファイルを保護し、
$HOME
他の人はあなたのコンテンツを読むことができないはずです。しかし、誰でも読むことができる場所がたくさんあります(しかし、ユーザーが読むことができるかどうかはあまり気にしません
/bin/sh
。もちろん、ユーザーはディストリビューションからダウンロードできます)。グローバルに書き込み可能なディレクトリもあります(たとえば/tmp
、ChrootDirectoryを使用して両方のディレクトリを保護できますが、chrootディレクトリはrootが所有し、ユーザーが書き込めないようにする必要があります(そうしないと大きなセキュリティの問題になる可能性があります)。いいえ。これは許可されていません。したがって、1つがある場合はそれをChrootDirectory /mnt/copro
設定し、内部でユーザーが所有するもの(0755 root:root
または同様のもの)を持つ必要があり/mnt/copro/data
ます。いいえ。etc
bin
usr
lib
最も簡単な方法は、認証キーファイルをユーザーのホームディレクトリ(
~/.ssh/authorized_keys
他のユーザーと同様)の通常の場所に配置することです。/mnt/copro
可能であれば、制限されたユーザーが自分のホームディレクトリに書き込むことを許可しないことが最善であるため、このホームディレクトリは外部に配置する必要があります$HOME
。必要に応じてブロックAuthorizedKeysFile
内に代替位置を設定できますMatch
。
PS:Duplicatiは他のバックエンドをサポートしています。したがって、Apacheなどの設定に慣れている場合は、WebDAVの使用を提案したいかもしれません。あるいは、ストレージスペースが多く、S3互換インターフェースなどを提供することもできます。
答え2
シェルアクセスなしでユーザーアカウントを作成するには、
sudo adduser --shell /bin/false mysftpfriend
mysftpfriendのディレクトリとディレクトリ構造を作成してアクセス可能にする必要があります。
sudo mkdir -p /var/mysftpfriends/storage
アクセス権を付与するには
sudo chown mysftpfriend:mysftpfriend /var/mysftpfriends/storage
mysftpfriendsディレクトリへのフルアクセス(所有者とグループの所有者)を持つには、ルートを設定するだけです。
sudo chown root:root /var/mysftpfriends
sudo chmod 0766 /var/mysftpfriends
グループメンバーは読み取り/書き込みが可能ですが、実行することはできません。
SFTP専用SSHを設定するには、/etc/ssh/sshd_config
テキストエディタ(nanoまたはvim)で開きます。
sudo nano /etc/ssh/sshd_config
ファイルの末尾に次の行を追加します。
Match User mysftpfriend
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/mysftpfriends
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
ファイルを保存してエディタを終了したら、SSHを再起動してください。
sudo service ssh restart
次に、コンソールでsshを試してファイルの読み書きをテストし、sftpfriendユーザーが実行できないことを確認します。
sftp mysftpfriend@myserver
すべて完了しました!