特定のフォルダにしかアクセスできないSSHユーザを作成する
SSHをインストールしたのですが、元のアカウントでUbuntuにログインするとパーミッションが多すぎることがわかりました。
Ubuntuの特定のフォルダのパーミッションのみを持つようにユーザーを制約したいです。そのようなユーザーを設定するにはどうすればいいのでしょうか?
SSHをインストールしたのですが、元のアカウントでUbuntuにログインするとパーミッションが多すぎることがわかりました。
Ubuntuの特定のフォルダのパーミッションのみを持つようにユーザーを制約したいです。そのようなユーザーを設定するにはどうすればいいのでしょうか?
これは簡単です。新しいユーザを作成し、そのユーザがアクセスできるホームディレクトリを設定するだけです (このコマンドは sudo
または root シェルで実行する必要があります):
adduser --home /restricted/directory restricted_user
これでユーザ restricted_user
とディレクトリ /restricted/directory
が作成され、そのディレクトリのパーミッションが設定され、そのユーザがそこに書き込みができるようになります。デフォルトでは他のディレクトリへの書き込みはできません。
すでにディレクトリがある場合は、adduser
オプションを付加した --no-create-home
コマンドを実行して、以下のように手動で (root 権限で) パーミッションを設定することができます。
chown restricted_user:restricted_user /restricted/directory
chmod 755 /restricted/directory
ワールドライト可能なディレクトリであっても、このユーザがアクセスできないようにする必要がある場合、2つのバリエーションがあります。
1) ユーザにインタラクティブなシェルセッションを提供したい場合は、このマニュアル の chroot jail の作成方法を参考にしてください(/restricted/directory
)。
その後、以下をsshd_config
に追加してください。
Match user restricted_user
ChrootDirectory /restricted/directory
2) 彼が接続先のエンドポイントとホストの間でファイルをコピーするだけであれば、すべてがはるかに簡単になります。sshd_config
の最後に以下の行を追加してください。
Match user restricted_user
ForceCommand internal-sftp
ChrootDirectory /restricted/directory
Subsystem sftp internal-sftp
その後、Subsystem sftp /usr/lib/openssh/sftp-server
の先頭にハッシュ(#
)記号を付けてコメントアウトします。
SSH サーバを再起動した後 (再起動時に対話型セッションを kill しないので、何か設定を間違えても安全です。
指定されたディレクトリ(例えば、上位ディレクトリなど)をさまようことのできない制限付きユーザを作成し、使用するコマンドを制限/選択して使用する最も簡単な方法は、制限付きシェルを使用することです。参照: http://man.he.net/man1/rbash
まず、rbash
というシンボリックリンクを作成します(rootユーザで実行)。
ln -s /bin/bash /bin/rbash
次に、この制限付きシェルで通常のユーザーを作成し、そのホームディレクトリを任意のフォルダに設定します。
useradd -s /bin/rbash -d /home/restricted_folder username
制限シェルがなくても、明示的にこのユーザを sudoer のリストや特別なグループに追加しなければ、デフォルトで制限されます。
Restricted Shellを使用すると、以下のことが禁止されるか、実行されません。
cd でディレクトリを変更する
SHELL, PATH, ENV, BASH_ENV の値を設定または解除する
/ を含むコマンド名を指定する
.builtin コマンドの引数として / を含むファイル名を指定する
.builtin コマンドの引数として / を含むファイル名を指定する
… builtinコマンド
ハッシュ builtinコマンドへの-pオプションへの引数として、スラッシュを含むファイル名を指定する
起動時にシェル環境から関数定義をインポートする
起動時にシェル環境からSHELLOPTSの値を解析する
起動時にシェル環境からSHELLOPTSの値をリダイレクトする
出力をリダイレクトすることを指定することを指定することを指定することを指定することを指定することを指定することを指定することを指定することを指定することを指定することを指定することを指定することを指定することを指定することを指定する。
シェルを別のコマンドに置き換えるためにexec builtinコマンドを使用する
enable builtinコマンドに-fと-dオプションを指定して builtinコマンドを追加または削除する
無効なシェル・ビルドインを有効にするために enable builtinコマンドを使用する
command builtinコマンドに-pオプションを指定する
set +rまたはset +o restrictedで制限モードをオフにする
これらの制限は、任意の起動ファイルの後に適用される。
これらの制限は、スタートアップファイルの後に適用されます。
さらに、オプションとして、ユーザが使用するコマンドを制限/選択して制限するために、そのユーザに対して読み取り専用の .bash_profile を
PATH=$HOME/bin
で作成し、そのユーザに対して ~/bin フォルダに許可したコマンドをシンボリックリンクすることができます。
ln -s /bin/ls /home/restricted_folder/bin/ls
ln -s /bin/mkdir /home/restricted_folder/bin/mkdir
ln -s /bin/rm /home/restricted_folder/bin/rm
など。
0x1&
など