具有写权限的二进制可执行文件从 vim 获取只读

具有写权限的二进制可执行文件从 vim 获取只读

首先我知道vim不建议使用编写二进制可执行程序。所以,我不想在这里谈论它的合理性。

我有一个二进制程序,权限为 755(所有者是 root),所以作为用户root,我希望我可以写入它。该程序未运行,使用命令lsoffuser,没有输出返回,然后我使用 打开它vi,然后键入:wq仅写入并退出,然后vi警告我E45: 'readonly' option is set (add ! to override)。问题是谁设置的readonly选项? Linux内核?

然后我添加一个!,这是:wq!现在,程序现在无法运行,这是预期的。

并且在具有相同操作系统和内核版本的另一台计算机上具有相同权限的相同文件。这次,我可以用 写入它:wq,这里的神奇之处在于我可以在这台机器上运行该程序,尽管md5sum给出了不同的结果。

系统是RHEL 6.4。vi事实上是vim

编辑:按照@ctrl-alt-delor的建议添加一些命令输出。

[root@localhost x]# uname -r
2.6.32-431.29.2.2.ky3.1.x86_64
[root@localhost x]# whoami 
root
[root@localhost x]# lsof XXX 
[root@localhost x]# fuser XXX 
[root@localhost x]# ls -l XXX 
-rwxr-xr-x. 1 root root 5178556 Apr 19 13:27 XXX
[root@localhost x]# ls -la
total 5080
drwxr-xr-x.  5 root root    4096 Apr 21 19:23 .
drwxr-xr-x. 10 root root    4096 May 18  2018 ..
-rwxr-xr-x.  1 root root 5178556 Apr 19 13:27 XXX
drwxr-xr-x.  5 root root    4096 Apr 18 17:24 blabla
drwxr-xr-x.  2 root root    4096 Apr 15 18:59 blabla2
drwxr-xr-x.  8 root root    4096 Apr 22 10:36 blabla3

编辑:根据@Wildcard 的评论。

[root@localhost x]# getfacl XXX 
# file: XXX
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

[root@localhost x]# lsattr XXX 
-------------e- XXX

编辑:添加 SELINUX 信息

[root@localhost x]# getenforce 
Permissive
[root@localhost x]# cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

[root@localhost x]# ls -Z XXX 
-rwxr-xr-x. root root unconfined_u:object_r:usr_t:s0   XXX

答案1

奖励应该给予@Murray Jensen。

简而言之,答案就是~/.vimrc有所作为。

在我无法保存的机器上:wq

[root@localhost x]# cat ~/.vimrc 
set fileencodings=utf-8,gb18030,ucs-bom,cp936

vim将检查utf-8有效性,如果发现非法字节,则设置该readonly选项。它不会readonly在二进制模式下设置该选项。

注释完这一行后,我现在可以保存文件了:wq

相关内容