SFTP 向用户授予所有权限

SFTP 向用户授予所有权限

如何为SFTP用户授予所有权限?我的意思是可以访问所有文件夹,根据需要删除和上传。(我在 ubuntu 20.04 上)

答案1

请注意,没有这样的东西SFTP用户,有些用户可以通过控制台、ssh 或 ftp 等方式访问系统。这些用户一旦经过身份验证,就可以运行某些应用程序,例如 shell 或 ssh 的 sftp 子系统,但他们运行的进程将仍然受到系统访问控制的限制。

有一种用户不受访问控制限制:全能root用户。这是您在运行管理任务时通常想要模拟的用户。例如,可以使用sudo该用户,但您也可以通过ssh.

由于该用户是全能的,因此需要注意以安全的方式执行身份验证。当通过ssh访问时,默认情况下不允许使用不太安全的密码认证。您可以改用密钥身份验证。

为了能够sftp使用root( sftp root@user:/path),您需要将公共 ssh 密钥添加为文件中的新行~root/.ssh/authorized_keys。您还可以通过以下方式限制使用该密钥的 ssh 身份验证仅用于 sftp:

restrict,command="internal-sftp" your-public-key-here

(并不是说它会限制使用该公钥在该系统上可以执行的操作;如果您可以修改系统上的任何文件,则可以让系统执行任何操作)

如果您确实想以您的身份进行身份验证,但像 root 一样,在使用 SFTP 子系统时不受任何限制,那么仍然可以使用 Linux 功能。

例如,做:

sudo dpkg-divert --local --rename /usr/lib/openssh/sftp-server

将原件转移sftp/usr/lib/openssh/sftp-server.distrib.

sudo install -m 0110 -g yourusername /usr/lib/openssh/sftp-server.{distrib,unrestricted}

使副本只能通过yourusername.

sudo setcap 'cap_dac_override+ep cap_chown+ep cap_fowner+ep cap_fsetid+ep' /usr/lib/openssh/sftp-server.unrestricted

为该可执行文件设置功能以消除文件系统访问方面的所有限制。

然后创建/usr/lib/openssh/sftp-server为脚本,例如:

#! /bin/bash -
if [ "$LOGNAME" = yourusername ]; then
  cmd=$0.unrestricted
else
  cmd=$0.distrib
fi
exec -a "$0" -- "$cmd" "$@"

(不要忘记使用 使其可执行sudo chmod a+x /usr/lib/openssh/sftp-server)。

然后,当您使用 sftp 服务(通常通过 ssh)时,您将不受任何限制。

但请注意保留您的身份。例如,如果您上传一个新文件,默认情况下,该文件将归您所有。让普通用户拥有系统文件是一种不好的做法。

相关内容