이 질문은 매우 구체적으로 들릴 수 있지만 이는 제가 직접 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.