쓰기 권한이 있는 바이너리 실행 파일은 vim에서 읽기 전용이 됩니다.

쓰기 권한이 있는 바이너리 실행 파일은 vim에서 읽기 전용이 됩니다.

우선 나는 vim바이너리 실행 프로그램을 작성하는 것이 권장되지 않는다는 것을 알고 있습니다. 그래서 저는 여기서 그 타당성에 대해 이야기하고 싶지 않습니다.

권한이 755(소유자는 루트)인 바이너리 프로그램이 있으므로 사용자로서 root이 프로그램에 쓸 수 있기를 바랍니다. 명령을 사용하여 프로그램이 실행되지 않고 lsof출력 fuser이 반환되지 않습니다. 다음을 사용하여 연 다음 쓰기 전용 및 종료를 vi입력 하면 경고가 표시됩니다 . 문제는 누가 옵션을 설정했는가 하는 것입니다. 리눅스 커널?:wqviE45: 'readonly' option is set (add ! to override)readonly

그런 다음 하나를 추가하면 !이제 :wq!프로그램이 예상대로 실행되지 않습니다.

그리고 동일한 OS 및 커널 버전을 사용하는 다른 컴퓨터에서 동일한 권한을 가진 동일한 파일. 이번에는 를 사용하여 쓸 수 있으며 , 여기서 놀라운 점은 비록 다른 결과가 나오 :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

vimUTF-8 유효성을 검사하고 잘못된 바이트가 발견되면 이 readonly옵션이 설정됩니다. readonly바이너리 모드에서는 이 옵션을 설정 하지 않습니다 .

이 줄에 주석을 달고 나면 이제 파일을 저장할 수 있습니다 :wq.

관련 정보