如果我执行脚本
#!/usr/bin/expect
set pass [lindex $argv 0]
spawn encfs -v {CRIPT_DIR} {MNT_DIR} -o nonempty
expect "*EncFS Password:*"
send "$pass\r"
expect eof
期望脚本输出:
zz@zz-com:/media/truecrypt5/mmm$./e.sh 1
spawn encfs -v /media/truecrypt5/mmm/cr /media/truecrypt5/mmm/mn -o nonempty
10:25:11 (main.cpp:523) Root directory: /media/truecrypt5/mmm/cr/
10:25:11 (main.cpp:524) Fuse arguments: (daemon) (threaded) (keyCheck) encfs /media/truecrypt5/mmm/mn -o nonempty -s -o use_ino -o default_permissions
10:25:11 (FileUtils.cpp:177) version = 20
10:25:11 (FileUtils.cpp:181) found new serialization format
10:25:11 (FileUtils.cpp:199) subVersion = 20100713
10:25:11 (Interface.cpp:165) checking if ssl/aes(3:0:2) implements ssl/aes(3:0:0)
10:25:11 (SSL_Cipher.cpp:370) allocated cipher ssl/aes, keySize 24, ivlength 16
10:25:11 (Interface.cpp:165) checking if ssl/aes(3:0:2) implements ssl/aes(3:0:0)
10:25:11 (SSL_Cipher.cpp:370) allocated cipher ssl/aes, keySize 24, ivlength 16
10:25:11 (FileUtils.cpp:1620) useStdin: 0
EncFS Password:
10:25:11 (Interface.cpp:165) checking if ssl/aes(3:0:2) implements ssl/aes(3:0:0)
10:25:11 (SSL_Cipher.cpp:370) allocated cipher ssl/aes, keySize 24, ivlength 16
10:25:12 (FileUtils.cpp:1628) cipher key size = 44
10:25:12 (Interface.cpp:165) checking if nameio/block(3:0:1) implements nameio/block(3:0:0)
ls 命令:
zz@zz-com:/media/truecrypt5/mmm$sudo ls -la
[sudo] password for zz:
ls: cannot access mn: Permission denied
total 24
drwx------ 4 zz zz 4096 2012-08-31 14:40 .
drwx------ 10 zz zz 4096 1970-01-01 03:00 ..
drwx------ 2 zz zz 4096 2012-08-30 18:56 cr
-rwx------ 1 zz zz 73 2012-08-30 18:54 e2.sh
-rwx------ 1 zz zz 178 2012-08-30 19:10 e.sh
d????????? ? ? ? ? ? mn
-rwx------ 1 zz zz 40 2012-08-30 18:52 u.sh
我无权访问 {MNT_DIR}。 Sodo 用户无权访问。但是命令或 shell scipt
#!/bin/sh
encfs -v {CRIPT_DIR} {MNT_DIR} -o nonempty
工作正确。
操作系统:Ubuntu 11.10
我的期望脚本有什么问题?
答案1
您的预期脚本没有任何问题。但看起来您使用普通用户来挂载加密目录,然后您尝试使用 root 使用 sudo 查看挂载的文件。那是行不通的,而这正是 encfs 的全部意义所在。
在您的示例中,目录cr
是encfs
.这里面的内容不是什么大秘密,都是加密数据。您正在将这些数据装载到 上mn
,以便您可以以人类可读的方式查看其内容,作为 下的文件mn
。
只有安装的用户cr
才能读取里面的内容mn
。连root都不能。如果您想root
查看内容,那么您应该将./e.sh 1
示例中的 更改为sudo ./e.sh 1
。
答案2
encfs
在执行命令时,在expect脚本中使用是不同的,因为encfs
fork了一个后台进程,但是当expect脚本退出时,encfs
守护进程就会失效。迟早它会被 init 回收。
因此,您可能想尝试使用encfs -f
保持encfs
在前台运行并且不退出脚本。