로그인한 사용자와 다른 사용자로 작업하기(sudo 기능)


SFTP 프로토콜에는 접속 후 사용자를 변경할 수 있는 기능이 없습니다.
하지만 사용자 정의 SFTP 서버 기능을 사용하면 변경된 사용자로 작업할 수 있습니다. 

전자는 sudoers 파일 편집을 위해 시스템 관리자 계정인 root의 권한이 필요하고 후자는 root로 계정 전환을 하지 않을 거라면 root 권한은 필요하지 않습니다.
다음은 이 두 가지 방법에 대한 안내입니다.

먼저 자신이 사용하는 서버의 sftp-server 프로그램의 위치를 확인해 둡니다.
$ sudo cat /etc/ssh/sshd_config | grep sftp
Subsystem sftp /usr/libexec/openssh/sftp-server

Sudo를 사용하여 sftp-server를 구동하는 방법

  1. 시스템의 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 파일에서 경로를 확인할 수 있습니다.

  2. Xftp 프로그램에서 사용자 지정 sftp-server 옵션을 설정하여 세션 파일을 만듭니다. 
    해당 세션 등록 정보 -> 일반 탭 -> 프로토콜: SFTP -> 설정 -> 사용자 정의 SFTP 서버 사용



    '-u' 옵션을 적용하면 원하는 사용자로 변경할 수 있습니다.

  3. 세션 파일을 실행합니다.

  4. 접근이 제한된 파일이나 디렉토리에 접근이 가능한지 확인합니다.

chmod를 이용하여 파일 모드를 변경하는 방법


이 방법은 시스템의  sudoers 파일을 변경할 필요가 없으며 sudo에 비해 덜 위험합니다. 변경할 사용자가 root가 아니라면, 설정을 위해 root 권한도 필요치 않습니다. 
다음은 사용자 'foo'가 사용자 'bar'의 권한으로 작업을 하는 예입니다.

  1. '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
  2. Xftp에서는 사용자 지정 SFTP 서버 옵션을 설정한 세션 파일을 만듭니다.
    이 경우에는 sudo 명령이 필요 없습니다. 또한 root로 하는 계정 전환이 아니라면 root의 권한은 필요하지 않습니다.





  3. 사용자 'foo'는 /tmp 디렉토리에 있는 sftp-server를 구동합니다. 대신 이 sftp-server는 사용자 'bar'의 권한으로 작동합니다.

  4. 세션 파일을 저장한 후 실행합니다.

  5. 'bar' 사용자게만 허용된 파일이나 디렉토리에 접근해 봅니다.