如果我创建一个文件,然后将其权限更改为444(只读),如何rm删除它?
如果我这样做:
echo test > test.txt
chmod 444 test.txt
rm test.txt
Run Code Online (Sandbox Code Playgroud)
...rm会问我是否要删除写保护的文件test.txt。我原以为rm不能删除这样的文件,我必须先做一个chmod +w test.txt。如果我这样做rm -f test.txt,然后rm将删除文件,甚至没有要求,即使它是只读的。
任何人都可以澄清吗?我正在使用 Ubuntu 12.04/bash。
登录后,我可以执行以下操作:
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
Run Code Online (Sandbox Code Playgroud)
然后我可以打开 vim (不是 as root),编辑bar,用 强制写入w!,然后修改文件。
如何让操作系统禁止任何文件修改?
2017 年 3 月 2 日更新
chmod 500 foo是一个红鲱鱼:目录的写权限与修改文件内容的能力无关——只有创建和删除文件的能力。
chmod 400 foo/bar实际上确实可以防止文件的内容被更改。但是,它并不能阻止更改文件的权限——文件的所有者始终可以更改其文件的权限(假设他们可以访问该文件,即对所有祖先目录具有执行权限)。事实上,strace(1) 揭示了这就是 vim (7.4.576 Debian Jessie) 正在做的事情——vim 调用 chmod(2) 来临时添加文件所有者的写权限,修改文件,然后调用 chmod( 2)再次删除写权限。这就是为什么使用chattr +i作品——只有 root 可以调用chattr -i. 理论上,如果以 root 身份运行,vim(或任何程序)可以对 chattr 执行与对不可变文件中的 chmod 执行相同的操作。
在我的 Arch Linux 系统(Linux Kernel 3.14.2)上,绑定挂载不遵守只读选项
# mkdir test
# mount --bind -o ro test/ /mnt
# touch /mnt/foo
Run Code Online (Sandbox Code Playgroud)
创建文件/mnt/foo。相关条目/proc/mounts是
/dev/sda2 /mnt ext4 rw,noatime,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)
安装选项不符合我要求的选择,但这样做同时匹配绑定的读/写性能和安装使用的选项最初安装/dev/sda2上/
/dev/sda2 / ext4 rw,noatime,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)
但是,如果我重新安装挂载,则它尊重只读选项
# mount --bind -o remount,ro test/ /mnt
# touch /mnt/bar
touch: cannot touch ‘/mnt/bar’: Read-only file system
Run Code Online (Sandbox Code Playgroud)
和相关条目 /proc/mounts/
/dev/sda2 /mnt ext4 ro,relatime,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)
看起来像我所期望的(尽管实际上我希望看到test目录的完整路径)。on/proc/mounts/的原始挂载入口也没有变化,保持读/写/dev/sda2//
/dev/sda2 / ext4 rw,noatime,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)
这种行为和解决方法至少从 …
不知何故,我的 Debian 只能在根文件系统中读取。我不知道这是怎么发生的。
例如,当我在/root文件夹中并键入命令nano,然后按下Tab以列出该文件夹中可能的文件时,我收到消息:
root@debian:~# nano -bash: cannot create temp file for here-document: Read-only file system
Run Code Online (Sandbox Code Playgroud)
cd当我键入cd /home并按下Tab以列出路径时,命令也是如此:
root@debian:~# cd /home -bash: cannot create temp file for here-document: Read-only file system
Run Code Online (Sandbox Code Playgroud)
我也有类似apt和其他软件的问题。甚至无法 apt-get 更新。我有很多这样的错误:
Err http ://ftp.de.debian.org wheezy-updates/main Sources
406 Not Acceptable
W: Not using locking for read only lock file /var/lib/apt/lists/lock
W: Failed to fetch http ://ftp.de.debian.org/debian/dists/wheezy/Release rename failed, Read-only file system (/var/lib/apt/lists/ftp.de.debian.org_debian_dists_wheezy_Release -> /var/lib/apt/lists/ftp.de.debian.org_debian_dists_wheezy_Release).
W: …Run Code Online (Sandbox Code Playgroud) chmod 777 -R /mnt
rm -rf /mnt/*
rm: cannot remove 'omitted': Read-only file system
rm: cannot remove 'omitted': Read-only file system
Run Code Online (Sandbox Code Playgroud)
请告诉我如何做到这一点?
我想强制一个磁盘分区为只读模式并保持只读超过 30 分钟。
我尝试过的:
mount -o remount,ro (partition-identifier) (mount-point) -t (filesystem)
问题:由于某些进程正在使用分区,这会导致设备繁忙错误。我不想杀死使用磁盘的进程。我想模拟磁盘在进程仍在使用时突然变为只读。
使用魔法 sysrq 键,如下所示
echo u > /proc/sysrq-trigger
Run Code Online (Sandbox Code Playgroud)
问题:这将使所有磁盘分区为只读(尽管设备正忙)。但是 20-30 分钟后,机器会自行重新启动。执行此命令后,某些机器会立即重新启动。不确定是什么导致了这次重启。我不希望机器自行重启并且需要将磁盘保持在只读模式超过 30 分钟。
问题:有没有更好的方法可以强制单个磁盘分区为只读并保持该状态半小时,然后将其恢复为读写模式,而不会在此过程中导致任何重新启动?
是否可以将环回文件挂载为只读,并将所有写入重定向到 RAM?
这个问题暂时没有答案。
通常在读取或写入块设备出现问题后,内核决定将整个设备的标志切换为只读。在此之后,对位于该设备上的任何分区/文件系统的任何写入都会导致将其与设备状态一起切换为只读,因为任何写入都是不可能的。
来自 dmesg 的示例,这是在碎片整理获取来宾设备映像时使用 VirtualBox 在 windows8 上模拟来宾 linux:
[11903.002030] ata3.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x6 frozen
[11903.003179] ata3.00: failed command: READ FPDMA QUEUED
[11903.003364] ata3.00: cmd 60/08:00:a8:77:57/00:00:00:00:00/40 tag 0 ncq 4096 in
[11903.003385] res 40/00:01:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
[11903.004074] ata3.00: status: { DRDY }
[11903.004248] ata3: hard resetting link
[11903.325703] ata3: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[11903.327097] ata3.00: configured for UDMA/133
[11903.328025] ata3.00: device reported invalid CHS sector 0
[11903.329664] …Run Code Online (Sandbox Code Playgroud) 我想为用户授予只读访问权限,但我希望他/她只能看到我授予访问权限的确切文件夹。例如,他/她不应该走遍所有服务器并浏览所有用户文件夹等。即使他/她只向上、向上、向上,我希望他/她只访问我允许的这些特定文件夹。那么首先我怎样才能让特定用户访问特定文件夹,然后将符号链接放到他/她的主文件夹会有所帮助?所以他们可以直接进入必要的文件夹,但不能向上或向下?
readonly ×10
linux ×6
filesystems ×4
mount ×3
permissions ×3
files ×2
rm ×2
bind-mount ×1
ubuntu ×1
vim ×1