사용자 도트 파일이 그룹이 아니거나 전역적으로 쓰기 가능한지 확인해야 합니다. 다음 명령은 모든 파일을 나열합니다.
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 ~/.*