우선 나는 vim
바이너리 실행 프로그램을 작성하는 것이 권장되지 않는다는 것을 알고 있습니다. 그래서 저는 여기서 그 타당성에 대해 이야기하고 싶지 않습니다.
권한이 755(소유자는 루트)인 바이너리 프로그램이 있으므로 사용자로서 root
이 프로그램에 쓸 수 있기를 바랍니다. 명령을 사용하여 프로그램이 실행되지 않고 lsof
출력 fuser
이 반환되지 않습니다. 다음을 사용하여 연 다음 쓰기 전용 및 종료를 vi
입력 하면 경고가 표시됩니다 . 문제는 누가 옵션을 설정했는가 하는 것입니다. 리눅스 커널?:wq
vi
E45: '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
vim
UTF-8 유효성을 검사하고 잘못된 바이트가 발견되면 이 readonly
옵션이 설정됩니다. readonly
바이너리 모드에서는 이 옵션을 설정 하지 않습니다 .
이 줄에 주석을 달고 나면 이제 파일을 저장할 수 있습니다 :wq
.