私は仮想プライベートサーバを持っていて、rootアカウントでSSHを使って接続し、linuxのコマンドを実行したり、すべてのディスク領域にアクセスしたりすることができます
別のユーザアカウントを作成して、SSHを使ってこのサーバにもアクセスできるようにしたいのですが、特定のディレクトリ、例えば /var/www/example.com/
にのみアクセスできるようにしたいのです
例えば、このユーザーが/var/www/example.com/logs/error.log
に巨大なerror.logファイル(500 MB)を持っているとします。FTPを使ってこのファイルにアクセスする場合、このユーザーはログの最後の行を表示するために500 MBをダウンロードする必要がありますが、このユーザーには次のようなことを実行できるようにしてもらいたいと思います
tail error.log
そのため、彼にはSSHを使ってサーバにアクセスできるようにしてもらいたいのですが、すべてのサーバ領域へのアクセスを彼に許可したくありません
どうすればいいのでしょうか?
45 Richard Rodriguez 2011-06-18
chroot
ユーザーです
Update:
ヴィンセント・ダネン氏によるTechRepublicの記事にはこう書かれている
OpenSSH 4.9p1 のリリースで、サードパーティのハックや複雑な chroot セットアップに頼る必要はもうありません
etc/ssh/sshd_config (一部のディストリビューションでは/etc/sshd_config)を編集し、以下のオプションを設定します
Subsystem sftp internal-sftp Match Group sftp ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no
Match” ディレクティブがファイルの最後にあることを確認してください。これは OpenSSH に、sftp グループのすべてのユーザが自分のホームディレクトリ (ChrootDirectory コマンドで %h が表しているディレクトリ) に chroot されるように指示します
chroot したいユーザの場合は、次のようにして sftp グループに追加します
# usermod -G sftp joe # usermod -s /bin/false joe # chown root:root /home/joe # chmod 0755 /home/joe
上記の usermod コマンドは、ユーザ joe を sftp グループに追加し、そのシェルを /bin/false に設定して、絶対にシェルアクセスができないようにします。chown および chmod コマンドは、ディレクトリに必要なパーミッションを設定します。これらのパーミッションが設定されていると、ユーザはファイルのアップロードとダウンロードを許可されますが、 ルートディレクトリ内にディレクトリやファイルを作成することはできません
シェルアカウントを chroot するには、ユーザのホームディレクトリに特定のデバイスファイルとシェルが存在する必要があるため、少し複雑です。以下のコマンドは、Mandriva Linux 上で基本的な chroot システムを設定します
# mkdir /chroot # cd /chroot # mkdir {bin,dev,lib} # cp -p /bin/bash bin/ # cp -p /lib/{ld-linux.so.2,libc.so.6,libdl.so.2,libtermcap.so.2} lib/ # mknod dev/null c 1 3 # mknod dev/zero c 1 5 # chmod 0666 dev/{null,zero} # mkdir -p /chroot/home/joe
上記の設定では、ユーザ joe が ssh インできるようになり、chroot に制限されます。残念ながら、これでは大したことはできませんが、どのように設定できるかのアイデアが得られます。提供したいものによっては、追加のライブラリやバイナリをインストールする必要があります
Ubuntu Community Websiteにはこう書かれています
chroot の作成
dchroot と debootstrap パッケージをインストールします
管理者として (つまり sudo を使用して)、chroot 用の新しいディレクトリを作成します。この手順では、ディレクトリ
/var/chroot
を使用します。これを行うには、コマンドラインにsudo mkdir /var/chroot
と入力します管理者として、テキストエディタで
/etc/schroot/schroot.conf
を開きます。cd /etc/schroot
と入力し、gksu gedit schroot.conf
と入力してください。これでファイルを編集することができます
schroot.conf
に以下の行を追加し、保存してファイルを閉じます。your_username
をユーザー名に置き換えてください[lucid] description=Ubuntu Lucid location=/var/chroot priority=3 users=your_username groups=sbuild root-groups=root
端末を開いてタイプします
sudo debootstrap --variant=buildd --arch i386 lucid /var/chroot/ \
http://mirror.url.com/ubuntu/これにより、ChrootにUbuntu 10.04 (Lucid Lynx)の基本的な「インストール」が作成されます。パッケージのダウンロードに時間がかかる場合があります。注: lucidをお好みのUbuntuのバージョンに置き換えることができます。注: 上記の
mirror.url.com
を、ローカルで有効なアーカイブミラーのURLに変更する必要があります。これで基本的な chroot が作成されたはずです。sudo chroot /var/chroot
を入力して、chroot内のルートシェルに変更してくださいchrootを設定します
chroot をセットアップするための基本的な手順がいくつかあり、DNS の解決や
/proc
へのアクセスなどの機能を提供します注: これらのコマンドを chroot の外にあるシェルに入力します
chroot に
/proc
ファイルシステムをマウントするには、以下のように入力します (プロセスを管理するために必要です)sudo mount -o bind /proc /var/chroot/proc
次のように入力して、chroot 内からの DNS 解決を許可します(インターネットアクセスに必要)
sudo cp /etc/resolv.conf /var/chroot/etc/resolv.conf
chroot にデフォルトでインストールされているパッケージはほとんどありません (sudo でさえインストールされていません)。パッケージをインストールするには
apt-get install package_name
を使います
29 RedGrittyBrick 2011-06-18
最善の策は、IMHOでは ssh chroot jail、つまり /var/www/example.com/
ディレクトリに最低限の bash 環境を設定することです。そのためには、以下のようにします
16 celebdor 2011-06-18