로그인한 사용자와 다른 사용자로 작업하기(sudo 기능)
SFTP 프로토콜에는 접속 후 사용자를 변경할 수 있는 기능이 없습니다.
하지만 사용자 정의 SFTP 서버 기능을 사용하면 변경된 사용자로 작업할 수 있습니다.
sudo 명령을 사용하는 것과 setuid 비트를 사용하는 방법이 있습니다.
전자는 sudoers 파일 편집을 위해 시스템 관리자 계정인 root의 권한이 필요하고 후자는 root로 계정 전환을 하지 않을 거라면 root 권한은 필요하지 않습니다.
다음은 이 두 가지 방법에 대한 안내입니다.
먼저 자신이 사용하는 서버의 sftp-server 프로그램의 위치를 확인해 둡니다.
$ sudo cat /etc/ssh/sshd_config | grep sftp Subsystem sftp /usr/libexec/openssh/sftp-server
Sudo를 사용하여 sftp-server를 구동하는 방법
시스템의 sudo에 사용자를 등록합니다.
sudo 명령을 사용할 사용자를 sudoers 파일에 등록합니다.:$ sudo vi /etc/sudoers ... # 레드햇 계열의 리눅스라면 다음을 주석처리하여야 합니다. #Defaults requiretty ... User_Alias SFTPUSER = john,jane SFTPUSER ALL=(ALL) NOPASSWD:full_path_of_your_sftp_server # NOPASSWD는 필수적입니다. # sftp-server의 위치는 시스템마다 다를 수 있습니다.
설정 설명:
- requiretty => !requiretty. requiretty는 tty가 할당된 상태, 즉 로그인한 상태를 의미합니다. SFTP 서브시스템을 사용하기 위해서는 로그인한 상태가 아니므로 !requiretty여야 합니다. 참고로 할당하지 않는 것(!requiretty)이 기본값입니다.
- SFTPUSER => sudo를 실행할 수 있는 계정 목록 이름입니다. 모두 대문자로 설정하여야 합니다. 예로 든 위 설정에서는 john과 jane 계정이 포함됩니다.
- ALL => sudo를 실행하기 위한 호스트입니다. ALL을 선택하여 모든 호스트 이름에서도 실행할 수 있도록 하였습니다.
- (ALL) => sudo 명령을 대신한 사용자 계정입니다. ALL을 선택하여 root를 포함한 어떤 계정이라도 대신하여 명령을 수행할 수 있도록 하였습니다. 특정 사용자만을 대상으로 할 경우 해당 사용자 이름을 입력합니다. ','(콤마) 로 여러 사용자를 지정할 수 있습니다.
- NOPASSWD: => sudo 명령을 실행할 때 암호를 입력하지 않도록 합니다. 이 때의 암호는 위 ADMINISTRATOR(test)의 암호입니다. 기본값은 암호를 묻는 PASSWD입니다.
- full_path_of_your_sftp_server => SFTP 서브시스템을 구동하는 명령의 전체 경로를 입력합니다. /etc/ssh/sshd_config 파일에서 경로를 확인할 수 있습니다.
- Xftp 프로그램에서 사용자 지정 sftp-server 옵션을 설정하여 세션 파일을 만듭니다.
해당 세션 등록 정보 -> 일반 탭 -> 프로토콜: SFTP -> 설정 -> 사용자 정의 SFTP 서버 사용
'-u' 옵션을 적용하면 원하는 사용자로 변경할 수 있습니다. - 세션 파일을 실행합니다.
- 접근이 제한된 파일이나 디렉토리에 접근이 가능한지 확인합니다.
chmod를 이용하여 파일 모드를 변경하는 방법
이 방법은 시스템의 sudoers 파일을 변경할 필요가 없으며 sudo에 비해 덜 위험합니다. 변경할 사용자가 root가 아니라면, 설정을 위해 root 권한도 필요치 않습니다.
다음은 사용자 'foo'가 사용자 'bar'의 권한으로 작업을 하는 예입니다.
다음은 사용자 'foo'가 사용자 'bar'의 권한으로 작업을 하는 예입니다.
'bar'의 권한으로 실행할 수 있도록 setuid 비트를 설정한 sftp-server를 'foo'가 실행할 수 있도록 합니다.
[[bar@myserver ~] $ whoami
bar
[bar@myserver ~] $ cp /usr/libexec/openssh/sftp-server /tmp
[bar@myserver ~] $ chmod u+s /tmp/sftp-server
[bar@myserver ~] $ ls -l /tmp/sftp-server
-rwsr-xr-x. 1 bar bar 83984 Mar 29 18:01 sftp-server- Xftp에서는 사용자 지정 SFTP 서버 옵션을 설정한 세션 파일을 만듭니다.
이 경우에는 sudo 명령이 필요 없습니다. 또한 root로 하는 계정 전환이 아니라면 root의 권한은 필요하지 않습니다. - 사용자 'foo'는 /tmp 디렉토리에 있는 sftp-server를 구동합니다. 대신 이 sftp-server는 사용자 'bar'의 권한으로 작동합니다.
- 세션 파일을 저장한 후 실행합니다.
- 'bar' 사용자게만 허용된 파일이나 디렉토리에 접근해 봅니다.