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내가 찾은 한 가지 해결책은 쉘 스크립트를 사용하는 것입니다 . /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

관련 정보