我有一个自己编写的 FUSE 文件系统,我安装在我的 NFS 服务器上的 mountpoint 上/export/example/mount
。然后我通过 NFS 导出 FUSE 的父目录。该/etc/exports
所包含的选项nohide,crossmnt,subtree_check,ro,no_root_squash
,并允许所有人免费使用:
/export/example *(nohide,crossmnt,subtree_check,ro,no_root_squash)
Run Code Online (Sandbox Code Playgroud)
我可以在我的 NFS 客户端上安装这个导出并访问它。一旦我在 NFS 中访问 FUSE,我的客户端就会挂起,直到我umount
进入 NFS(我需要使用选项-f
来完成它)。
我已经尝试以我的工作用户和 root 身份安装 FUSE。结果是一样的。
服务器运行的是 Ubuntu 12.04,客户端运行的是 SuSE 9.3。FUSE 是用 Python 编写的,可以在本地运行,没有任何问题。只有通过 NFS 导出失败。我没有安全限制,因为所有这些都在只有受信任用户的专用网络上。
有没有人知道什么会导致我的麻烦或(甚至更好)如何解决问题?
我曾考虑用 SSHFS 替换 NFS 来解决这个问题,但这不起作用,因为客户端系统太旧而无法支持 SSHFS(因为它基于 FUSE,并且不支持 FUSE)。
我正在设置保险丝,以便我可以在我的 Galaxy nexus 上使用 mtp 系统。我正在学习一个教程,该教程告诉我在编辑fuse.conf
user_allow_other
.
但我根本不相信我真的必须重新启动 =P
有没有办法让系统在不重启的情况下重新读取fuse.conf文件?
我想定义要在远程安装的文件系统上使用的本地 ACL。文件系统通过 autofs 和 sshfs FUSE 挂载。
我们的想法是,我们可以在跳转服务器上设置一个被监禁的用户,该用户有权读取环境中其他服务器上的文件,并使用标准命令而无需大量暴露,当然也无需授予 ssh 访问权限。
问题是,sshfs 将始终以同一用户身份运行,因此无论向哪个用户公开这些文件,远程系统上的路径中的文件都会公开。
我已经探索过将安全检查直接编码到 sshfs 中,但在我走这条路之前,我想看看是否有任何其他包可以向其他只读文件系统添加 ACL 支持。
编辑:@peterph 当远程文件系统为只读时,您将如何为 NFS 共享设置 ACL?
sshfs 真的很容易拆开,所以我在写这篇文章几天后将 ACL 检查直接添加到 sshfs 本身。用户在通过 OpenSSH 和 jailkit 登录时被监禁,并从那里以非特权用户的身份访问只读 sshfs 自动挂载。每个 dir/file stat 或 read 都会生成一个 syslog 事件。它一直在工作,就像一个魅力,用户对一个被监禁的盒子没有任何权利。
假设我有一个用户完全可以读取的文件夹。我希望将其安装到我的主文件夹中。我无法使用符号链接,因为我希望文件公开,~/
并且我希望其他程序“不知道”它是一个挂载。有没有一个fuse程序可以实现这个功能?问题mount
是它需要 root 权限。
我也很感激,如果我能够挂载这个目录,不是在启动时,而是在需要时挂载 - 这是因为除非我登录,~/
否则我的目录是加密的。
LoggedFS配置文件的语法是什么?
官方文档只有loggedfs
命令的使用说明和配置文件示例。好的,它是 XML,但是所有可能的标签和属性是什么?它们是什么意思?
我刚刚从 Ubuntu 12.04 升级到 12.10。在此之前,我备份了运行良好的 autofs 配置。我将旧行附加/etc/auto.master
到新行:
+dir:/etc/auto.master.d
+auto.master
/mnt /etc/auto.sshfs uid=1000,gid=1000,--timeout=30,--ghost,--verbose
Run Code Online (Sandbox Code Playgroud)
我/etc/auto.sshfs
看起来像这样:
mymount -fstype=fuse,rw,nodev,nonempty,noatime,allow_other,max_read=65536 :sshfs\#myuser@mydomain:/mnt/mymount
Run Code Online (Sandbox Code Playgroud)
我手动尝试了这个,Connetion reset by peer
所以我添加了选项IdentityFile=/home/myuser/.ssh/id_rsa
。现在,当我尝试访问/mnt
(使用手动和自动文件)时会发生这种情况:
myuser@laptop /mnt % la
ls: cannot access mymount: No such file or directory
total 4
drwxr-xr-x 3 root root 0 Oct 19 10:34 ./
drwxr-xr-x 25 root root 4096 Oct 18 23:17 ../
d????????? ? ? ? ? ? mymount/
Run Code Online (Sandbox Code Playgroud)
我的相关条目/var/log/syslog
是这样的:
Oct 19 00:17:56 laptop automount[1250]: attempting to …
Run Code Online (Sandbox Code Playgroud) 我有一个令人尴尬的并行过程,它创建了大量几乎(但不完全)相同的文件。有没有办法“即时”存档文件,以便数据不会占用不必要的空间?
进程本身接受命令行参数并将创建的每个文件的名称打印到标准输出。我正在调用它,parallel --gnu
它负责分配输入(来自另一个进程)和收集输出:
arg_generating_process | parallel --gnu my_process | magic_otf_compressor
Run Code Online (Sandbox Code Playgroud)
管道第一部分的简单示例bash
:
for ((f = 0; $f < 100000; f++)); do touch $f; echo $f; done
Run Code Online (Sandbox Code Playgroud)
怎么可能magic_otf_compressor
长得像?它应该将每个输入行视为文件名,将每个文件复制到压缩.tar
存档(处理所有文件的存档相同!),然后将其删除。(实际上,打印每个处理文件的名称应该就足够了,另一个| parallel --gnu rm
可以负责删除文件。)
有没有这样的工具?我不考虑单独压缩每个文件,这会浪费太多空间。我已经研究过archivemount
(将文件系统保留在内存中 -> 不可能,我的文件太大太多)和avfs
(无法让它与 FUSE 一起工作)。我错过了什么?
我离自己破解这样一个工具只有一步之遥,但之前肯定有人做过......
编辑:基本上我想我正在寻找一个标准输入前端libtar
(而不是从命令行tar
读取参数的命令行前端)。
如何获取 FUSE 文件系统驱动程序的进程 ID?
例如,我目前在 Linux 机器上安装了两个 SSHFS 文件系统:
$ grep sshfs /proc/mounts
host:dir1 /home/gilles/net/dir1 fuse.sshfs rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
host:dir2 /home/gilles/net/dir2 fuse.sshfs rw,nosuid,nodev,relatime,user_id=1000,group_id=1000 0 0
$ pidof sshfs
15031 15007
Run Code Online (Sandbox Code Playgroud)
我怎么知道 15007 和 15031 中哪个是 dir1,哪个是 dir2?理想情况下,我想自动化,即运行somecommand /home/gilles/net/dir1
并让它显示 15007(或 15031,或“非 FUSE 挂载点”,视情况而定)。
请注意,我正在寻找一个通用的答案,而不是特定于 SSHFS 的答案,例如跟踪sshfs
进程连接到哪个主机和端口,以及服务器端进程打开了哪些文件——这甚至可能根本不可能由于连接共享。
我主要对 Linux 答案感兴趣,但适用于所有支持 FUSE 的系统的通用答案将是理想的。
为什么我想知道:跟踪它的操作,在出现问题时杀死它等。
我想将一个 NTFS 卷本地附加到我的 unix (Ubuntu) 计算机,并使用 rsync 将一些 unix 目录复制到其中,以便结果在 Windows 下可读。
\n\n我不关心所有权和权限。如果能保留修改日期就好了。我只需要目录和文件(符号链接也很好;但如果它们无法复制则不是问题)。
\n\n两个明显的问题是:区分大小写,以及 Windows 文件名中的非法字符。例如,在Linux中我可以有两个文件“a”和“A”;我可以将它们复制到 NTFS 卷,但在 Windows 中我将能够访问(最多?)其中之一。但我很高兴忽略这个问题。我感兴趣的是Windows文件名中的非法字符,它们是<、>、:、"、/、\\、|、?和*(好吧,实际上也是ascii 0-31,但我不关心这个) . 以“.”结尾的文件也可能有问题?)。
\n\n我希望 rsync 自动“重命名”,例如,一个名为“a:”的文件,例如 a(COLON),以合法名称结束(并且理想情况下,将 a(COLON) 翻译回 a :)
\n\nrsync 是否可以自动重命名文件以避免 Windows 中禁止的字符?
\n\n更新: …
看起来要安装我的 Android 手机,我需要添加 user_allow_other
到/etc/fuse.conf
.
我研究了它的作用:
根据手册页:
user_allow_other
允许非 root 用户指定allow_other或allow_root安装选项(见下文)。
&
allow_other
此选项会覆盖限制用户安装文件系统的文件访问的安全措施。所以所有用户(包括root)都可以访问这些文件。默认情况下,此选项仅允许 root,但可以使用上一节中描述的配置选项删除此限制。
根据这个:
它只是允许单个文件系统实现请求允许其他用户访问
所以它看起来像是一个我不想绕过的安全功能。
我想知道它是否也可以作为单用户个人计算机的安全功能。例如,通过防止非 root(非物理)用户在挂载时访问加密的 VeraCrypt 卷,或者使限制文件访问的安全措施通常更容易受到攻击。
有没有替代方法?(用于安装 Android 设备,而不是使用 SD 卡或 KDE Connect 等外部存储设备来交换数据。)例如,仅允许非 root 用户指定 allow_root 选项或仅允许一次具体操作还是通过使用 sudo 或在某个时候指定特定用户?