SFTP를 통해 원격 Linux 서버에 연결하고 서버의 전체 폴더 구조를 읽어야 합니다. 모든 디렉토리를 나열하고 싶습니다. 심지어 읽기 권한이 없는 디렉토리도 나열하고 싶습니다. 디렉토리의 권한을 변경하지 않는 것이 좋습니다.
루트 사용을 피하고 싶고 "읽기 전용" 루트를 만드는 것이 좋은 해결책이 될 수 있다고 생각합니다. 온라인에서 솔루션을 찾다가 이 CAP_DAC_READ_SEARCH
기능을 발견했습니다. 하지만 기능을 사용하려면 파일 이름을 지정해야 하는데 SSHD 프로세스에 해당 기능을 적용하고 싶지는 않을 것 같습니다.
필요한 권한이 있는 사용자를 어떻게 생성합니까?
답변1
sftpsrv=/usr/libexec/openssh/sftp-server
cp -a ${sftpsrv} ${sftpsrv}.super
chmod 500 ${sftpsrv}.super
chown someuser ${sftpsrv}.super
/sbin/setcap cap_dac_read_search+ep ${sftpsrv}.super
다음을 통해 서버에 연결해야 합니다.
sftp -s /usr/libexec/openssh/sftp-server.super address
효과가있다!
ls -la /tmp | grep TEST
drwx------. 2 root root 60 Oct 29 13:08 TEST
sftp -s /usr/libexec/openssh/sftp-server.super localhost
user@localhost^s password:
Connected to localhost.
sftp> cd /tmp/TEST
sftp> ls
123
/tmp/TEST
700
루트가 소유하고 권한을 부여합니다.
클라이언트가 사용자 정의 SFTP 서버 바이너리를 요청할 수 없는 경우 테스트되지 않은 솔루션은 다음과 같습니다.
Match User someuser
Subsystem sftp /usr/libexec/openssh/sftp-server.super