sshdがユーザーグループのログインシェルを覆うことを許可する

sshdがユーザーグループのログインシェルを覆うことを許可する

私のユーザーは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-serverForceCommandSSH_ORIGINAL_COMMANDrsshForceCommand

関連:


代わりに、ラッパースクリプトを使用してログインシェルの代わりに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

関連情報