如何为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)时,您将不受任何限制。
但请注意保留您的身份。例如,如果您上传一个新文件,默认情况下,该文件将归您所有。让普通用户拥有系统文件是一种不好的做法。