Linux

防止寫入未掛載的 sshfs 掛載點

  • September 30, 2019

假設我有一個文件夾/mnt/mountpoint用作某些sshfs-mounted 目錄的掛載點:

sshfs user@host /mnt/mountpoint

現在,我想阻止應用程序在/mnt/mountpoint解除安裝時寫入。我在這里這裡找到的問題有暗示使用的答案

sudo chattr +i /mnt/mountpoint

這可以很好地防止任何寫訪問。不幸的是,它也阻止了我sshfs作為普通使用者安裝。

什麼是最好的解決方案?我更喜歡單個 sshfs-command 或至少不需要 root 權限的東西。我應該放棄這種chattr方法並嘗試完全不同的方法嗎?

掛載點預設權限

創建掛載點

mkdir --mode=0500 -p /mnt/mountpoint

只有創建使用者才能對其進行寫入。您可以從 rc.local 預填充它。當您在該掛載點之上掛載任何文件系統時,它將獲取您在掛載時設置的該覆蓋的權限。

附帶說明一下,我會避免chattr +i這樣做,因為如果不是每個人都知道你這樣做了,那會使人們感到困惑並導致故障排除的樂趣。

我通過chattr +i使用IdentityFile.sshfs

為此,您需要生成密鑰並將其添加到遠端主機。

ssh-keygen && ssh-copy-id username@host

完成後,您可以使用 sudo 和 sshfs 來掛載主機。

# If not running the sshfs command from a script,
# you need to save the following values prior to running sshfs.
# If you don't, they will be interpreted as the root user's env variables.

sshfs_uid="$UID"
sshfs_gid="$GID"
sshfs_key"$HOME/.ssh/id_rsa"

# Please note that all options passed to sshfs are required.
# Using these options will allow your user to read + write to the mounted dir.
# If they are not passed, your user won't be able to access the mounted dir.

sudo sshfs -o uid=$sshfs_uid -o gid=$sshfs_gid -o IdentityFile=$sshfs_key -o allow_other username@host:/path /path/to/mountpoint

如果您想將此作為腳本的一部分添加或使其在登錄時自動進行,您可能不想每次都輸入密碼。

要解決這個問題:

sudo visudo

# Assuming your sudo group is "wheel".
# And assuming the permissions for your wheel group look something like this.
%wheel ALL=(ALL) ALL

# Add this line after the above line to allow sshfs mounting without a password
%wheel ALL=(ALL) NOPASSWD:/usr/bin/sshfs*

引用自:https://serverfault.com/questions/761566