SSH 서버가 루트 컨텍스트에서 실행 중인 경우 SFTP는 어떻게 특정 사용자 파일에만 액세스할 수 있습니까?

SSH 서버가 루트 컨텍스트에서 실행 중인 경우 SFTP는 어떻게 특정 사용자 파일에만 액세스할 수 있습니까?

이 질문은 매우 구체적으로 들릴 수 있지만 이는 제가 직접 SSH 서버를 만들고 있고(회사에서는 특정한 것이 필요함) SFTP가 있기 때문입니다. 하지만 서버가 루트로 실행되기 때문에 SFTP 서비스를 사용하는 모든 사용자에게 액세스가 허용됩니다. 콘텐츠.

Bash 세션의 경우 이렇게 실행하므로 문제가 되지 않습니다.

sudo -H -u $USER bash

그런데 저는 사용자 인증 없이 SFTP를 사용하고 있습니다.

기본 SSH 서버도 루트로 실행되고 있다고 생각하기 때문에 SSH가 이를 어떻게 처리하는지 궁금합니다. 하지만 아마도 SSH에서 사용하는 SFTP 서비스가 인증을 허용할 수도 있습니다.

나는 사용자가 로그인할 때마다 다른 서버를 생성할 수 있다고 생각했지만 이와 같은 SFTP에만 해당됩니다.

sudo -u $USER bash -c "my_server -sftponly

그러면 SFTP 서버는 해당 사용자의 파일에만 액세스할 수 있지만 이는 중복된다고 생각합니다.

도서관

golang.org/x/crypto/ssh
github.com/pkg/sftp

답변1

다른 사용자에게 루트 권한을 양도하는 도구는 단순히 이 목적을 위해 제공된 시스템 호출을 사용하는 것 같습니다.

$ man setuid
SETUID(2)                 FreeBSD System Calls Manual                SETUID(2)

NAME
     setuid, seteuid, setgid, setegid - set user and group ID

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <unistd.h>

     int
     setuid(uid_t uid);

     int
     seteuid(uid_t euid);

     int
     setgid(gid_t gid);

     int
     setegid(gid_t egid);

DESCRIPTION
     The setuid() system call sets the real and effective user IDs and the
     saved set-user-ID of the current process to the specified value.  The
     setuid() system call is permitted if the specified ID is equal to the
     real user ID or the effective user ID of the process, or if the effective
     user ID is that of the super user.

     The setgid() system call sets the real and effective group IDs and the
     saved set-group-ID of the current process to the specified value.  The
     setgid() system call is permitted if the specified ID is equal to the
     real group ID or the effective group ID of the process, or if the
     effective user ID is that of the super user.

     The seteuid() system call (setegid()) sets the effective user ID (group
     ID) of the current process.  The effective user ID may be set to the
     value of the real user ID or the saved set-user-ID (see intro(2) and
     execve(2)); in this way, the effective user ID of a set-user-ID
     executable may be toggled by switching to the real user ID, then re-
     enabled by reverting to the set-user-ID value.  Similarly, the effective
     group ID may be set to the value of the real group ID or the saved set-
     group-ID.

RETURN VALUES
     Upon successful completion, the value 0 is returned; otherwise the
     value -1 is returned and the global variable errno is set to indicate the
     error.

ERRORS
     The system calls will fail if:

     [EPERM]            The user is not the super user and the ID specified is
                        not the real, effective ID, or saved ID.

관련 정보