我需要通过 SFTP 连接到远程 Linux 服务器并读取服务器的整个文件夹结构。我想列出所有目录,甚至是没有读取权限的目录,并且最好不更改目录的权限。
我想避免使用 root,并且我认为一个好的解决方案可能是创建“只读”root。在网上寻找解决方案时,我发现了这个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
由 root 拥有并具有700
权限。
如果您的客户端无法请求自定义 sftp 服务器二进制文件,这里有一个可能未经测试的解决方案:
Match User someuser
Subsystem sftp /usr/libexec/openssh/sftp-server.super