現在位置: ホーム / OSSブログ / SCP 接続専用のアカウントの設定

SCP 接続専用のアカウントの設定

こんにちは、岩本です。 本日は SCP 接続専用のアカウントの設定方法を紹介します。 SFTP 接続専用のアカウントを作成する方法に関しては、書籍やインターネット上で情報が多く掲載されているのですが、SCP 接続専用のアカウントを作成する方法については、私が調べた限りでは情報がありませんでした。今回、SCP 接続専用のアカウントを用意する設定をしてみたので、以下に紹介します。

SCP 接続専用とする設定は SFTP 接続専用の場合と違い、chroot 先のディレクトリ配下にライブラリファイルを置く必要があったり、ForceCommand パラメータ内で scp 送信先のディレクトリを固定する必要があるといった制約があります。

  • SCP 接続受信専用アカウントが所属するグループ (例: scponly) を作成します。
    # groupadd scponly
    
  • sshd_config に以下を追記して、sshd サービスを再起動します。scp 送信先ディレクトリは、例として /recv としています。
    Match Group scponly
        ChrootDirectory /home/%u
        ForceCommand /usr/bin/scp -t /recv
    
    この設定で、scponly グループのユーザは、scp 接続専用になります。
    ForceCommand ディレクティブを使用しているので、/recv 以外のディレクトリには scp 出来ません。
  • scp 接続受信専用アカウント (例: ruser1) を作成し、ホームディレクトリを作成します。
    # useradd -G scponly -d /recv -M ruser1
    # passwd ruser1
    (パスワードの設定を行ってください)
    # mkdir /home/ruser1
    
  • chroot 環境に必要なディレクトリを作成します。
    # mkdir -p /home/ruser1/{dev,etc,bin,lib64,usr/bin,usr/lib64,recv}
    
  • 必要なデバイスファイルを作成します。
    # mknod -m 666 /home/ruser1/dev/null c 1 3
    # mknod -m 666 /home/ruser1/dev/zero c 1 5
    # mknod -m 666 /home/ruser1/dev/tty c 5 0
    # mknod -m 666 /home/ruser1/dev/ptmx c 5 2
    
  • 必要なバイナリファイルをコピーします。
    # cp -p /bin/bash /home/ruser1/bin/
    # cp -p /usr/bin/scp /home/ruser1/usr/bin/
    
  • 必要なライブラリファイルが多いため、スクリプトを作成して実行します。
    # cat cp_binary_file1.sh
    #!/bin/sh
    TARGET_USER=ruser1
    cp -p /lib64/ld-linux-x86-64.so.2 /home/$TARGET_USER/lib64/
    for LIBS in `ldd /bin/bash | awk '{print $3}'`
    do
        if [[ $LIBS == /* ]]; then
            cp -p $LIBS /home/$TARGET_USER$LIBS
        fi
    done
    for LIBS in `ldd /usr/bin/scp | awk '{print $3}'`
    do
        if [[ $LIBS == /* ]]; then
            cp -pn $LIBS /home/$TARGET_USER$LIBS
        fi
    done
    
  • 作成したスクリプトを実行して、バイナリを実行するために必要なライブラリファイルをコピーします。
    # chmod 755 cp_binary_file1.sh
    # ./cp_binary_file1.sh
    # cp -p /lib64/{ld-linux-x86-64.so.2,libnss_files.so.2} /home/ruser1/lib64/
    
  • PAM 認証に必要なファイルをコピーします。
    # cp -p /etc/passwd /home/ruser1/etc/
    
    ※passwd ファイルがないと、scp 接続の際に "unknown user <ユーザID>" とエラーが出ます。
  • scp 送信先ディレクトリの所有者を変更します。
    # chown ruser1:ruser1 /home/ruser1/recv/
    
    ※/home/ruser1 の所有者、グループ、パーミッションは、root.root 755 のまま変更しないでください。所有者、グループ、パーミッションを変更すると、想定通りに動作しません。