web-dev-qa-db-ja.com

sshdがユーザーグループのログインシェルを上書きするようにする

私のユーザーは、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サブシステムonlysftp(または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
$

ForceCommandrsshと連携させるにはどうすればよいですか?

または、ユーザーグループのログインシェルを上書きするようにsshdを設定するにはどうすればよいですか?

3
umläute

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実行可能である必要があります。

4
muru

同じ問題がありました。サーバーは、すべてのユーザーに対して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
2
ppoilbarbe