私のユーザーはLDAPを介して複数のコンピュータで共有されます。
~のため一つこれらのマシン(「fileserf」と呼びます)を制限したいと思います。一部ユーザーができること(実際にはSSHを介して対話型セッションにログインするのを防ぐ)優れたその他マシンでは、これらのユーザーはSSHを正常に使用できる必要があります。
internal-sftp
だから私の初期のアイデアは、このサブシステムを次のように使用することでした。
Match group sftponly
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
sftponly
これは単一ホスト上の(ローカル)グループのメンバーシップのみを制限するのでうまく機能しますfileserf
が、残念ながらinternal-sftp
サブシステムはただ許可sftp
および許可されていないscp
(またはrsync
)。
だから私はもう少し調査し、rssh
これが私が望むものを正確にできるようにすることを発見しました(権限の面で)。
これで問題は、LDAPでこれらのユーザーのログインシェルを設定できないことです。/usr/bin/rssh
これは、そのユーザーが制限されるという意味だからです。みんなfileserf
.
だから私の考えは、fileserfのいくつかの設定を介してログインシェルをオーバーライドすることですsshd_config
。
Match group sftponly
X11Forwarding no
AllowTcpForwarding no
ForceCommand /usr/bin/rssh
残念ながら、これはあなたがコンピュータに入ろConnection closed
うとするたびに次のことsftp
を受け取るので、うまくいかないようです。
$ 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
ユーザーグループのログインシェルを上書きするように構成するにはどうすればよいですか?
答え1
これrssh
マンページ次のユーザーのログインシェルであることを示します。
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
動作します。
答え2
同じ問題がありました。サーバーはすべてのユーザーに対してscp sftpとrsyncを許可する必要がありましたが、コマンドライン接続は許可しませんでした。ユーザーデータベースはldapにあり、/ etc / passwdをローカルに変更することはできません。したがって、rsshはオプションではありません。
ForceCommand
私が見つけた1つの解決策はシェルスクリプトを使用することです。 /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