사용자 도트 파일이 그룹이 아니거나 전역적으로 쓰기 가능한지 확인하세요.

사용자 도트 파일이 그룹이 아니거나 전역적으로 쓰기 가능한지 확인하세요.

사용자 도트 파일이 그룹이 아니거나 전역적으로 쓰기 가능한지 확인해야 합니다. 다음 명령은 모든 파일을 나열합니다.

find /home/ -name "\.*" -perm /g+w,o+w

산출:

/home/system/.java
/home/ldap/.java

내 질문은 SSH를 통해 머신(여러 가상 머신)에 연결한 후 위 명령을 사용하여 이러한 파일을 찾고 다음 명령을 사용하여 수정하는 방법입니다.

chmod go-w /home/<\USER><\FILE>
chmod go-w /home/<\USER>/<\DIRECTORY>

쉘 스크립트를 작성해야 합니다.

답변1

for 루프를 사용하여 find 명령에서 반환된 모든 파일/폴더에 대해 chmod를 실행할 수 있습니다.

for i in `find /home/ -name ".*" -perm /g+w,o+w`; do chmod go-w $i; done

그러면 find 명령을 사용하여 찾은 모든 파일/폴더에 대해 chmod go-w가 실행됩니다.

이것이 bash 스크립트의 모습입니다.

#!/bin/bash
for i in `find /home/ -name ".*" -perm /g+w,o+w`; do chmod go-w $i; done

편집하다:

Drav Sloan이 질문 주석에서 제안했듯이 -exec chmod g-w,o-w "{}" \;find 끝에 추가하는 것이 for 루프보다 더 효율적입니다.

그래서 당신은 사용할 수 있습니다

find /home/ -name ".*" -perm /g+w,o+w -exec chmod g-w,o-w "{}" \;

또는 bash 스크립트로:

#!/bin/bash
find /home/ -name ".*" -perm /g+w,o+w -exec chmod g-w,o-w "{}" \;

script.sh로 저장하면 다음을 사용하여 실행할 수 있습니다.

bash script.sh

for 루프를 원격으로 실행하려는 경우 모든 컴퓨터에 script.sh를 넣으면 다음과 같이 작동합니다.

ssh machine "bash script.sh"

아니면 로컬에만 있는 경우

ssh machine 'bash -s' < script.sh

여러 서버에서 스크립트를 실행하려면 ssh를 for 루프에 넣거나 pssh 유틸리티를 사용할 수 있습니다.

모든 서버를 serverlist 파일에 넣으면 pssh를 사용하여 모든 서버에서 로컬 스크립트를 실행할 수 있습니다.

pssh -h serverlist -i -I < script.sh

또는 for 루프와 ssh를 사용하십시오.

for i in `cat serverslist`; do ssh $i 'bash -s' < script.sh; done

답변2

파일을 쓸 수 없도록 강제하려면 다음으로 충분하지 않습니까?

$ chmod g-w,o-w ~/.*

관련 정보