![사용자 도트 파일이 그룹이 아니거나 전역적으로 쓰기 가능한지 확인하세요.](https://linux55.com/image/70577/%EC%82%AC%EC%9A%A9%EC%9E%90%20%EB%8F%84%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EA%B7%B8%EB%A3%B9%EC%9D%B4%20%EC%95%84%EB%8B%88%EA%B1%B0%EB%82%98%20%EC%A0%84%EC%97%AD%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%93%B0%EA%B8%B0%20%EA%B0%80%EB%8A%A5%ED%95%9C%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EC%84%B8%EC%9A%94..png)
사용자 도트 파일이 그룹이 아니거나 전역적으로 쓰기 가능한지 확인해야 합니다. 다음 명령은 모든 파일을 나열합니다.
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 ~/.*