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