I am solving the problem of binding the SFTPGo server,
to the resources of NextCloud users.
The script uses Rclone, it must connect via WebDAV
mount the user folder in /mnt/sftpgo/$USERNAME
If the script starts the SFTPGo server - mounting does not work.
If the script is started manually - everything works.
For 3 days I compared and looked for the problem in:
- the user and group are the same.
- copied all the environment variables.
- SELinux and AppArmor are missing.
- tried to use sudo adding to /etc/sudoers: sftpgo ALL=(ALL) NOPASSWD: ALL
I'm using Ubuntu 24.04.1 LTS on a Huper-V VM
When starting automatically - it doesn't work:
Mon Mar 17 16:37:15 2025 - Start /etc/sftpgo/auth_nc.sh
Mon Mar 17 16:37:15 2025 - Script running as user: sftpgo
Mon Mar 17 16:37:15 2025 - Script running as group: sftpgo fuse
Mon Mar 17 16:37:15 2025 - USERNAME = t.test01
Mon Mar 17 16:37:15 2025 - MOUNT_POINT= /mnt/sftpgo/t.test01
Mon Mar 17 16:37:15 2025 - RCLONE_CONFIG_DIR = /etc/sftpgo/rclone_configs
Mon Mar 17 16:37:15 2025 - RCLONE_CONFIG = /etc/sftpgo/rclone_configs/t.test01.conf
Mon Mar 17 16:37:15 2025 - Attempting to authenticate user: t.test01
Mon Mar 17 16:37:16 2025 - Response code: 200
Mon Mar 17 16:37:16 2025 - Authentication successful for user: t.test01
Mon Mar 17 16:37:16 2025 - Call /etc/sftpgo/test.sh
Mon Mar 17 16:37:16 2025 - Start /etc/sftpgo/test.sh
Mon Mar 17 16:37:16 2025 - Script running as user: sftpgo
Mon Mar 17 16:37:16 2025 - Script running as group: sftpgo fuse
Mon Mar 17 16:37:16 2025 - USERNAME = t.test01
Mon Mar 17 16:37:16 2025 - MOUNT_POINT= /mnt/sftpgo/t.test01
Mon Mar 17 16:37:16 2025 - RCLONE_CONFIG_DIR = /etc/sftpgo/rclone_configs
Mon Mar 17 16:37:16 2025 - RCLONE_CONFIG = /etc/sftpgo/rclone_configs/t.test01.conf
2025/03/17 16:37:16 mount helper error: fusermount: fuse device not found, try 'modprobe fuse' first
2025/03/17 16:37:16 Fatal error: failed to mount FUSE fs: fusermount: exit status 1
2025/03/17 16:38:16 Fatal error: mount not ready
$sudo modprobe fuse
$lsmod | grep fuse
no answer.
$dmesg | grep fuse
[0.115670] fuse: init (API version 7.39)
[ 1.442094] systemd[1]: Starting modprobe@fuse.service - Load Kernel Module fuse...
$cat /boot/config-$(uname -r) | grep FUSE
CONFIG_FUSE_FS=y
CONFIG_FUSE_DAX=y
$fusermount -V
fusermount3 version: 3.14.0
cat /etc/fuse.conf
user_allow_other
#mount_max = 1000
$ sudo -u sftpgo ls -l /dev/fuse
crw-rw-rw- 1 root root 10, 229 Mar 17 16:29 /dev/fuse
When started manually - everything works:
$sudo -u sftpgo -g sftpgo ./test.sh
Mon Mar 17 16:39:13 2025 - Start /etc/sftpgo/test.sh
Mon Mar 17 16:39:13 2025 - Script running as user: sftpgo
Mon Mar 17 16:39:13 2025 - Script running as group: sftpgo fuse
Mon Mar 17 16:39:13 2025 - USERNAME = t.test01
Mon Mar 17 16:39:13 2025 - MOUNT_POINT= /mnt/sftpgo/t.test01
Mon Mar 17 16:39:13 2025 - RCLONE_CONFIG_DIR = /etc/sftpgo/rclone_configs
Mon Mar 17 16:39:13 2025 - RCLONE_CONFIG = /etc/sftpgo/rclone_configs/t.test01.conf
Mon Mar 17 16:39:13 2025 - Mount successful for user: t.test01
$sudo -u sftpgo -g sftpgo fusermount -u /mnt/sftpgo/t.test01
I think the problem is in rclone
In automatic mode it does not find the built-in fuse
$rclone version
rclone v1.60.1-DEV
- os/version: ubuntu 24.04 (64 bit)
- os/kernel: 6.8.0-55-generic (x86_64)
- os/type: linux
- os/arch: amd64
- go/version: go1.22.2
- go/linking: dynamic
- go/tags: none
/etc/sftpgo/test.sh
#!/bin/bash
USERNAME="t.test01"
MOUNT_POINT="/mnt/sftpgo/$USERNAME"
RCLONE_CONFIG_DIR="/etc/sftpgo/rclone_configs"
RCLONE_CONFIG="$RCLONE_CONFIG_DIR/$USERNAME.conf"
echo "$(date) - Start /etc/sftpgo/test.sh" >> /var/log/sftpgo_scr.log
echo "$(date) - Script running as user: $(whoami)" >> /var/log/sftpgo_scr.log
echo "$(date) - Script running as group: $(groups)" >> /var/log/sftpgo_scr.log
echo "$(date) - USERNAME = $USERNAME" >> /var/log/sftpgo_scr.log
echo "$(date) - MOUNT_POINT= $MOUNT_POINT" >> /var/log/sftpgo_scr.log
echo "$(date) - RCLONE_CONFIG_DIR = $RCLONE_CONFIG_DIR" >> /var/log/sftpgo_scr.log
echo "$(date) - RCLONE_CONFIG = $RCLONE_CONFIG" >> /var/log/sftpgo_scr.log
#env >> /var/log/hand_run.log
#sudo modprobe fuse
#sudo rclone mount --allow-other --config "$RCLONE_CONFIG" "nextcloud_$USERNAME:" "$MOUNT_POINT" --daemon --log-file /var/log/hand_run.log
#rclone mount --allow-other --config "$RCLONE_CONFIG" "nextcloud_$USERNAME:" "$MOUNT_POINT" >> /var/log/hand_run.log &
#sudo rclone mount --allow-other --config "$RCLONE_CONFIG" "nextcloud_$USERNAME:" "$MOUNT_POINT" >> /var/log/hand_run.log &
rclone mount --allow-other --vfs-cache-mode full --config "$RCLONE_CONFIG" "nextcloud_$USERNAME:" "$MOUNT_POINT" --daemon --log-file /var/log/sftpgo_scr.log
#sleep 2-10-20
if mountpoint -q "$MOUNT_POINT"; then
echo "$(date) - Mount successful for user: $USERNAME" >> /var/log/sftpgo_scr.log
else
echo "$(date) - Mount failed for user: $USERNAME" >> /var/log/sftpgo_scr.log
exit 1
fi