web-dev-qa-db-ja.com

ユーザーを1つのフォルダーに制限し、フォルダーからの移動を許可しない方法

私はdigitaloceanにubuntuサーバーがあり、自分のサーバー上のドメイン用のフォルダーを誰かに与えたいのですが、私の問題は、そのユーザーに自分のフォルダーやファイルを表示したり、自分のフォルダーから移動したりできないようにしたいです。

フォルダ内のこのユーザーを制限し、他のファイル/ディレクトリを移動して表示できないようにするにはどうすればよいですか?

30
badr aldeen

私はこの方法で問題を解決しました:

新しいグループを作成する

$ Sudo addgroup exchangefiles

Chrootディレクトリを作成する

$ Sudo mkdir /var/www/GroupFolder/
$ Sudo chmod g+rx /var/www/GroupFolder/

グループが書き込み可能なディレクトリを作成する

$ Sudo mkdir -p /var/www/GroupFolder/files/
$ Sudo chmod g+rwx /var/www/GroupFolder/files/

両方を新しいグループに渡す

$ Sudo chgrp -R exchangefiles /var/www/GroupFolder/

その後、私は/etc/ssh/sshd_configに行き、ファイルの最後に追加しました:

Match Group exchangefiles
  # Force the connection to use SFTP and chroot to the required directory.
  ForceCommand internal-sftp
  ChrootDirectory /var/www/GroupFolder/
  # Disable tunneling, authentication agent, TCP and X11 forwarding.
  PermitTunnel no
  AllowAgentForwarding no
  AllowTcpForwarding no
  X11Forwarding no

次に、グループにobamaという名前の新しいユーザーを追加します。

$ Sudo adduser --ingroup exchangefiles obama

これですべてが完了したので、sshサービスを再起動する必要があります。

$ Sudo service ssh restart

通知:ユーザーはfileディレクトリから何もできなくなりますつまり、彼のファイルはすべてファイルフォルダにある必要があります。

26
badr aldeen

制限は賢明な問題であり、一貫して定義する必要があります。あなたができることは、ユーザーの制限付きシェルを彼のデフォルトシェルとして定義することです。

たとえば、/bin/rkshで、ユーザーの既定のシェルとして、ユーザーの事前定義されたシェルの代わりに/etc/profile(制限されたKornshell)を設定します。

注:この名前の実行可能ファイルがシステムに存在しない場合、ハードリンクを作成しますln /bin/ksh /bin/rkshkshは、その名前によって、制限されているかどうかを判断します。

制限付きシェルは、たとえば、cdコマンドを実行したり、呼び出しで/(明示的なパス)を使用してコマンドを指定したり、 PATHShell、またはENV変数の変更を禁止し、出力リダイレクトも禁止されています。

can引き続きpredefinedユーザーにシェルスクリプトを提供します。これにより、(スクリプトの実装者の制御下で!)ユーザーが制限のない環境でその特定のスクリプトを実行できるようになります。

11
Janis

コマンドchrootを使用すると、ユーザーの制限付きルートを作成できます。これ question は、chrootの概念とその使用方法を説明します。

更新:Digital Oceanでセットアップされたchroot jailを検索すると、環境固有のドキュメントがさらに表示されます。ここにあなたが必要とするかもしれないものに関連していると思うカップルがあります。

buntu 12.04 VPSでテストするためにChroot環境を設定する方法

制限されたSSHアクセスをchroot jailされたユーザーに許可する方法

これが jailkitに関連するもの で、これは FloHimself が提案したものです。

5
X Tian