是否可以允许某些特定用户(例如组成员)在 Linux 上没有超级用户权限的情况下挂载任何文件系统?
另一个问题可能是“用户可以通过哪些方式通过挂载文件系统来损害系统?”
如果我使用这样的find命令:
find /mydir/mysubdir -executable -type f
Run Code Online (Sandbox Code Playgroud)
列出所有可执行文件(不包括目录),包括可执行脚本文件(如 script.sh 等)。我想要做的是只列出二进制可执行文件。
我可以在没有 root 权限的情况下挂载文件系统映像吗?通常我会这样做:
mount -o loop DISK_IMAGE FOLDER
Run Code Online (Sandbox Code Playgroud)
不使用 sudo 或设置 suid on mount,有没有合适的方法来做到这一点?
我知道我可以使用fusermount一些 ISO 映像,但这非常有限,即使对于 ISO 映像,我的某些映像也无法安装,但mount始终有效。
如何使用 qemu 设置从主机到来宾的 ssh?我可以在没有任何特殊参数的情况下启动 VM 时使用端口重定向,如下所示:
/usr/bin/qemu-system-x86_64 -hda ubuntu1204 -m 512 -redir tcp:7777::8001
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用以下内容启动时:
/usr/bin/qemu-system-x86_64 \
-m 1024 \
-name vserialtest \
-hda ubuntu1204 \
-chardev socket,host=localhost,port=7777,server,nowait,id=port1-char \
-device virtio-serial \
-device virtserialport,id=port1,chardev=port1-char,name=org.fedoraproject.port.0 \
-net user,hostfwd=tcp:7777::8001
Run Code Online (Sandbox Code Playgroud)
我收到以下错误并且 VM 无法启动:
qemu-system-x86_64: -net user,hostfwd=tcp:7777::8001: invalid host
forwarding rule 'tcp:7777::8001'
qemu-system-x86_64: -net user,hostfwd=tcp:7777::8001: Device 'user'
could not be initialized
Run Code Online (Sandbox Code Playgroud)
请注意,我可以在没有-net参数的情况下启动 VM,没有任何问题,但是,我想设置从主机到来宾的 ssh。从来宾到主机的 ssh 按预期工作正常。
我试过使用
-net user,hostfwd=tcp::7777-:8001
Run Code Online (Sandbox Code Playgroud)
也
-net user,hostfwd=tcp::7777:8001
Run Code Online (Sandbox Code Playgroud)
但错误仍然存在并且虚拟机无法启动。
我最近了解到(至少在 Fedora 和 Red Hat Enterprise Linux 上),编译为位置独立可执行文件 (PIE) 的可执行程序会获得更强的地址空间随机化 (ASLR) 保护。
那么:如何在 Linux 上测试特定的可执行文件是否被编译为位置无关的可执行文件?
我必须挂载一个 .img 文件,但我不知道它是什么类型的 .img。我怎样才能弄清楚它是什么类型的 .img 文件?
# mount -t auto -o ro,loop gmapsupp.img /mnt/iso/
mount: you must specify the filesystem type
# file -k gmapsupp.img
gmapsupp.img: x86 boot sector, code offset 0x0
#
Run Code Online (Sandbox Code Playgroud) 我开始在 Linux 内核邮件列表上的礼仪上下文中考虑这个问题。作为世界上最著名、可以说是最成功和最重要的自由软件项目,Linux 内核受到了很多媒体的关注。项目创始人兼领导者 Linus Torvalds 在这里显然不需要介绍。
Linus 偶尔会因为他在 LKML 上的火爆而引起争议。他自己承认,这些火焰经常与破坏用户空间有关。这让我想到了我的问题。
我可以从历史的角度来解释为什么破坏用户空间是一件坏事吗?据我了解,破坏用户空间需要在应用程序级别进行修复,但如果它改进了内核代码,这是一件坏事吗?
据我了解,Linus 声明的政策是不破坏用户空间胜过其他一切,包括代码质量。为什么这如此重要,这种政策的利弊是什么?
(这种一贯适用的政策显然有一些缺点,因为 Linus 偶尔会与他在 LKML 上的高级副手在这个话题上发生“分歧”。据我所知,他在这件事上总是有自己的方式。)
根据维基百科
http://en.wikipedia.org/wiki/Unix_directory_structure
http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
不应该/mnt/根据第一个链接安装额外的磁盘,但根据第二个链接不应该接缝。
两人都说认为他们不应该在/media。
题
那么应该在哪里安装额外的永久磁盘呢?
我最近遇到了一些这样的脚本:
( set -e ; do-stuff; do-more-stuff; ) || echo failed
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来不错,但它不起作用!将set -e不适用,当你添加的||。没有它,它工作正常:
$ ( set -e; false; echo passed; ); echo $?
1
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加||,set -e则忽略:
$ ( set -e; false; echo passed; ) || echo failed
passed
Run Code Online (Sandbox Code Playgroud)
使用真正的、单独的 shell 可以按预期工作:
$ sh -c 'set -e; false; echo passed;' || echo failed
failed
Run Code Online (Sandbox Code Playgroud)
我已经在多个不同的 shell(bash、dash、ksh93)中尝试过这个,并且都以相同的方式运行,所以这不是一个错误。有人可以解释一下吗?
我知道通过ps我可以看到系统中运行的当前进程的列表或树。但我想要实现的是“跟随”使用计算机时创建的新进程。
打个比方,当您使用tail -f跟踪附加到文件或任何输入的新内容时,我想保留当前正在创建的进程的跟踪列表。
这甚至可能吗?
linux ×4
mount ×4
binary ×1
executable ×1
fedora ×1
files ×1
filesystems ×1
find ×1
freebsd ×1
history ×1
linux-kernel ×1
networking ×1
partition ×1
process ×1
qemu ×1
security ×1
shell ×1
shell-script ×1
ssh ×1