私のユーザーは、LDAPを介して複数のマシンで共有されています。
oneこれらのマシン(「fileserf」と呼びましょう)については、someユーザーが実行できることを制限したいと思います(実際には、インタラクティブにログインできないようにしますssh経由のセッション)。 otherマシンでは、これらのユーザーは通常sshを使用できるはずです。
したがって、私の最初のアイデアは、次のようにinternal-sftp
サブシステムを使用することでした。
Match group sftponly
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
単一のホストsftponly
の(ローカル)グループfileserf
のメンバーのみを制限するため、これは問題なく機能しますが、残念ながら、internal-sftp
サブシステムonlyはsftp
(またはscp
)ではなくrsync
を許可します。
そこで、さらに調査を行ったところ、rssh
が見つかりました。これにより、自分がやりたいことを正確に行うことができます(アクセス許可の観点から)。
問題は、LDAPでこれらのユーザーのログインシェルを/usr/bin/rssh
に設定できないことです。これは、fileserf
だけでなくallマシンで制限されることを意味するためです。
だから私の考えは、fileserfのsshd_config
の設定を介してログインシェルを上書きすることです。
Match group sftponly
X11Forwarding no
AllowTcpForwarding no
ForceCommand /usr/bin/rssh
残念ながら、これは機能していないようです。ユーザーがsftp
をマシンに挿入しようとすると、いつでもConnection closed
が取得されるためです。
$ ssh user@fileserf
This account is restricted by rssh.
Allowed commands: scp sftp
If you believe this is in error, please contact your system administrator.
Connection to fileserf closed.
$ sftp user@fileserf
Connection closed
$
ForceCommand
をrssh
と連携させるにはどうすればよいですか?
または、ユーザーグループのログインシェルを上書きするようにsshd
を設定するにはどうすればよいですか?
rssh
manpage は、これらのユーザーのログインシェルである必要があることを示しています。
The system administrator should install the Shell on the restricted
system. Then the password file entry of any user for whom it is
desireable to provide restricted access should be edited, such that
their Shell is rssh. For example:
luser:x:666:666::/home/luser:/usr/bin/rssh
ForceCommand
では、そのコマンドのみが実行されます。 scp
またはsftp
を実行すると、コマンドはSSH(scp
、/usr/lib/openssh/sftp-server
、それぞれ))、そしてもちろん、ForceCommand
によって実行されるプログラムがSSH_ORIGINAL_COMMAND
そうするために。したがって、rssh
がその機能を実行するには、ForceCommand
ではなく、ログインシェルである必要があります。
関連:
代わりに、ログインシェルの代わりにrssh
を使用してコマンドを実行するラッパースクリプトを使用できます。例えば:
/usr/local/bin/wrapper-Shell
:
#! /bin/sh
rssh -c "$SSH_ORIGINAL_COMMAND"
そして/etc/ssh/sshd_config
:
Match group sftponly
X11Forwarding no
AllowTcpForwarding no
ForceCommand /usr/local/bin/wrapper-Shell
/usr/local/bin/wrapper-Shell
実行可能である必要があります。
同じ問題がありました。サーバーは、すべてのユーザーに対してscp sftpおよびrsyncを許可する必要がありますが、コマンドラインとの接続は許可しません。ユーザーデータベースはLDAPにあり、/ etc/passwdをローカルで変更することはできません。したがって、rsshはオプションではありませんでした。
私が見つけた1つの解決策は、ForceCommand
とシェルスクリプトを使用することです。/etc/ssh/sshd_configに次の行を追加します。
Match user *
X11Forwarding no
AllowTcpForwarding no
ForceCommand /usr/local/bin/wrapper-Shell user1 user2 user3
ここで、userX
は、ssh経由でのログインが許可されている特別なユーザーです。実際のフィルタリングを行うラッパーシェルスクリプトは次のとおりです。
#!/bin/sh
SSHCMD=`echo "$SSH_ORIGINAL_COMMAND" | awk '{ print $1 }'`
ME=`id -u -n`
DOIT=Maybe
# Root is always allowed in order to not being locked out
for n in root $*
do
if [ "$ME" = "$n" ]
then
DOIT=YES
break
fi
done
if [ "$DOIT" = YES -o "$SSHCMD" = "scp" -o "$SSHCMD" = "rsync" -o "$SSHCMD" = /usr/lib/openssh/sftp-server ]
then
sh -c "$SSH_ORIGINAL_COMMAND"
else
cat <<EOF 1>&2
This account is restricted and the command is not allowed.
User $ME is locked out.
If you believe this is in error, please contact your system administrator.
EOF
exit 1
fi