ユーザーのドットファイルがグループでないか、グローバルに書き込み可能であることを確認してください。

ユーザーのドットファイルがグループでないか、グローバルに書き込み可能であることを確認してください。

ユーザードットファイルがグループでないか、グローバルに書き込み可能であることを確認する必要があります。次のコマンドは、すべてのファイルを一覧表示します。

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

おすすめ記事