私はdigitaloceanにUbuntuサーバーを持っていて、他の人のドメインのために私のサーバーにフォルダを持っていたいと思います。私の問題は、そのユーザーが自分のフォルダやファイルを表示したり、ファイルをフォルダから移動できないようにすることです。
このユーザーを自分のフォルダに制限し、他のファイル/ディレクトリを移動または表示できないようにするにはどうすればよいですか。
答え1
私はこのように問題を解決しました。
新しいグループの作成
$ 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
外で何もできません。
私は、彼のすべてのファイルがそのフォルダにある必要があることを意味します。
答え2
制限は合理的な質問であり、一貫して定義する必要があります。あなたができることは限られた殻ユーザーを自分のものとして基本シェル。
たとえば、/bin/rksh
in(restricted kornshell)は、ユーザーの事前定義されたシェルの代わりにユーザーのデフォルトシェルに設定されます/etc/profile
。
メモ:その名前の実行可能ファイルがシステムにない場合は、ハードリンクを作成し、名前に基づいて制限されてln /bin/ksh /bin/rksh
いるksh
ことを確認してください。
これ限られた殻たとえば、呼び出しでcd
(明示的なパス)として指定されたコマンドまたはコマンドの実行を防ぎ、変数への変更を許可せず、出力リダイレクトも許可しません。/
PATH
SHELL
ENV
あなたできるまだ利用可能事前定義済みユーザーに与えられたシェルスクリプトは、(スクリプト実装者の制御下で!)ユーザーが無制限の環境で特定のスクリプトを実行できるようにします。
答え3
このコマンドを使用するchroot
と、ユーザーに制限されたルートディレクトリを作成できます。質問概念chroot
と使い方を説明します。
アップデート:探していますデジタル海にChroot刑務所が建てられました。、その環境に合った追加文書を提案します。ここにあなたに必要なものに関連するものがあると思います。
Ubuntu 12.04 VPSでテストするためにChroot環境を構成する方法