방금 chmod -x chmod를 수행했습니다.


답변:


43

리눅스에서 :

/lib/ld-linux.so.2 /bin/chmod +x /bin/chmod

http://www.slideshare.net/cog/chmod-x-chmod


bindbn, 나는 같은 링크를 게시하려고했다 :-) 그러나 나는 유닉스 / 리눅스 물건을 처음 접했을 때 나 자신을 읽고 있었다!
rihatum

2
64 비트 배포판에서는 /lib64/ld-linux-x86-64.so.2대신 사용해야 합니다. ldd /bin/chmod실행할 링커를 정확하게 나열해야합니다.
goldPseudo

나는 chmod (2)를 사용하는 최소한의 프로그램을 작성 하겠지만 더
멋지다

1
@Stefan : From man ld-linux.so: "ld.so [및 ld-linux.so]는 프로그램에 필요한 공유 라이브러리를로드하고 프로그램 실행 준비를 한 다음 실행합니다." ( ld.so위한 a.out포맷 및 실행 ld-linux.soELF 포맷이다.)
상기 통지가있을 때까지 일시 중지.

1
@Stefan : 커널은 동적으로 연결된 실행 파일을로드하고 실행하는 방법을 실제로 알지 못합니다. 커널은 매우 복잡하고 커널이 아닌 glibc를 따르기 때문입니다. ld-linux.so일종의 실행 가능 / 라이브러리 하이브리드, 정적으로 정렬 된 정렬, 사용자 공간에서 실행되며 동적으로 연결된 실행 파일과 모든 종속 항목을로드 한 다음 실행합니다.
Juliano

18

파이썬 사용 :

# python
Python> import os
Python> os.chmod("/bin/chmod",0755)

4
그리고 하나의 라이너로 :python -c "import os; os.chmod('/bin/chmod', 0755)"
Thanatos

18

이는 대상 파일을 복사 할 때 소스 파일이 아닌 대상 파일의 권한이 유지된다는 사실에 의존합니다. 우리는 다음의 권한을 "차용"하고 있습니다 ls:

cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod

처음으로 cp-p 플래그를 설정해야 한다고 생각합니다
Riking

@Riking :이 목적에는 필요하지 않습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

이것은 내가 생각해 낸 해결책과 비슷하지만 cp실행 파일을 exe 한 후 cat내용을 chmod임시 파일 에 넣었습니다.
철자 D


7

setfacl -m u::rx /bin/chmod

... 소유자에게 실행 권한을 부여합니다.

그러나 /lib/ld-linux.so.2속임수는 깔끔합니다. :)


5

이것은 이상하다. 며칠 전에 누군가의 트윗을 통해 이와 같은 것을 보았다 ...

http://www.slideshare.net/cog/chmod-x-chmod


링크가 특정 시점에서 끊어 지므로 다른 사이트에 대한 링크는 도움이되지 않습니다. 이것은 누군가에게 구글에게 답을 알려주는 것과 같습니다.
Phil Hannent

@ Phil Hannent : 3 일 전에 슬라이드 쇼도 보았으므로 OP가 지원자 중 한 명인 경우 첫 생각이었습니다.
Boldewyn

며칠 전에 레딧에서 이것을 보았습니다.
Dentrasi

4

/bin/chmod동적 링커에서로드 할 수없는 시스템에있는 경우 :

# /bin/mv /bin/chmod /bin/chmod.tmp
# install -p -m 755 /bin/chmod.tmp /bin/chmod

이것은 내 MacOS X 시스템에서 작동합니다.


2

/ rescue / chmod 555 / bin / chmod

mtree를 사용할 수도 있다고 생각합니다.


이것은 내가 가장 좋아하는 솔루션입니다. 불행히도 리눅스에서는 작동하지 않습니다.


1

새로운 chmod를 생성하고 원본에 사용하십시오

umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod

umask를 000으로 설정하면 파일을 작성할 때 파일 실행 권한이 부여되지 않습니다. 기껏해야 rw-rw-rw- 권한을 갖습니다.
Barry Brown

2
@ Barry : 실제로 creat (2) / open (2) / mkdir (2) / etc에 전달 된 모드에 따라 다릅니다. umask == 0이고 파일을 작성하는 syscall에 모드에 대해 0777이 제공되면 파일에 실행 비트가 설정됩니다. 예를 들어, 링커 / 컴파일러는 "실행 파일"을 작성할 때 0777을 전달합니다 (예 : with 모드 777을 (umask 000;gcc -o foo foo.c)생성 함 foo). 그러나 많은 (대부분의) 쉘은 리디렉션을 위해 파일을 열거 나 만들 때 0666을 전달 하므로이 답변은 많은 쉘에서 작동하지 않습니다.
Chris Johnsen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.