Sudo
駐留在 SSHFS 掛載上時如何使用 sudo 執行腳本?
我不是在詢問掛載 SSHFS 掛載點,這是我發現的所有類似問題的主題。
我的掛載點 (
/path/to/sshfs/mount/
) 已正確掛載,我可以作為我的使用者列出、讀取、寫入所有預期的文件。我確實有權將腳本複製到本地目錄。但是,因為該腳本需要幾個包含庫文件和資源的子目錄,所以我更喜歡在它所在的位置執行該腳本,而不是在本地複制它。此外,無需將其複製到本地機器即可完成其預期工作。
不幸的是,對於 SSHFS 掛載,該腳本需要 root 權限才能進行許多操作,因為它必須將一些文件安裝到系統目錄並更新系統中存在的不同使用者的文件。
這是我的錯誤:
$ cd /path/to/sshfs/mount/ $ sudo ./myscript.sh sudo: unable to execute ./myscript.sh: Permission denied
以下是我執行的檢查:
$ ls -la -rwxr-x--- 1 myuser team 8173 Dec 15 06:33 myscript.sh $ sudo -i [sudo] password for myuser: # $ cat /etc/fstab myuser@myserver:/path/to/sshfs/mount/ /path/to/sshfs/mount/ fuse.sshfs x-systemd.automount,_netdev,user,follow_symlinks,identityfile=/path/to/.ssh/key_file,allow_other,default_permissions 0 2
這表明所需的 fuse.conf 選項已啟用:
$ cat /etc/fuse.conf user_allow_other
什麼 SSHFS 配置將允許我執行:
$ sudo /path/to/sshfs/mount/myscript.sh
mount 命令支持
exec
和noexec
掛載選項:
- exec:允許執行二進製文件。
- noexec:不允許在已掛載的文件系統上直接執行任何二進製文件。
即使您沒有指定其中任何一個掛載選項,
noexec
如果您指定了掛載選項,也將應用users
掛載選項。
- users:允許任何使用者掛載和解除安裝文件系統,即使其他普通使用者掛載了它。
users 選項意味著選項 noexec、nosuid 和 nodev(除非被後續選項覆蓋,如選項行 users,exec,dev,suid)。
此命令顯示
noexec
正在隱式應用:findmnt /path/to/sshfs/mount myuser@myserver:/path/to/sshfs/mount/ fuse.sshfs rw,nosuid,nodev,noexec,relatime,user_id=0,group_id=0,default_permissions,allow_other
因此,這個問題的解決方案就是添加
exec
掛載選項。