linux – 特定のディレクトリにしかアクセスできないSSHユーザを作成できますか?

debian linux root ssh ubuntu

私は仮想プライベートサーバを持っていて、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 の作成

  1. dchroot と debootstrap パッケージをインストールします

  2. 管理者として (つまり sudo を使用して)、chroot 用の新しいディレクトリを作成します。この手順では、ディレクトリ /var/chroot を使用します。これを行うには、コマンドラインに sudo mkdir /var/chroot と入力します

  3. 管理者として、テキストエディタで/etc/schroot/schroot.confを開きます。cd /etc/schrootと入力し、gksu gedit schroot.confと入力してください。これでファイルを編集することができます

  4. 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


タイトルとURLをコピーしました