スクリプトが思ったように動作しません。
すべてのrwx権限をxx5権限に変更するすべてのスクリプトを見つけることができますが、
#!/bin/bash
# the / makes find inclusive
for file in `find . -perm /007 `
do
permissions=`stat -c %a $file`
permissions=${permissions:0:2}5
echo $permissions $file
chmod $permissions $file
done
#find . -perm /007
私の意図は、少なくともいくつかのファイルを保護することです。
答え1
chmod -R o-w .
書き込み権限が削除されます。他の人すべてのファイルを安全に処理してください。ただし、以下を含むすべてのファイルのctimeを更新します。他の人これ以上書き込み権限がありません。
GNUでは、chmod
-cオプションを使用して更新が必要なファイルを表示できます。
$ chmod -cR o-w .
mode of `./a' changed from 0777 (rwxrwxrwx) to 0775 (rwxrwxr-x)
ただw
削除したい場合他の人彼らがいる場所では、rwx
次のことができます。
find . ! -type l -perm -7 -exec chmod o-w {} +
(詳細については-vv
GNUまたはFreeBSDを追加してください)。chmod
しかし、(特に世界で書くことができるファイルを扱っているので)悪い意図を持つ誰かがそこにあるすべてのディレクトリへの書き込みアクセス権を持っている可能性があり、その間に他のファイルを指すファイルを使用することができる競合状態があるという点で注意してください。代替ファイルを使用find
してこれを確認して実行すると、ファイルへの書き込み権限を削除して混乱を招く可能性があります(chmod
たとえば、シンボリックリンクを考えてみてください)。/tmp
GNU構文を使用しているので、GNUであるstat
可能性が高いです。 GNUは、GNUが出てくる以前からファイル属性を表示することができたので、両方は必要ありません。find
find
find
stat
find . ! -type l -perm -7 -printf '%m %p\n' -exec chmod o-w {} +
答え2
/007
には、owner
あなたが持っていない唯一のファイルとの権限が表示されます。group
other
あなたはもっと幸運を楽しむことができます/o=rwx
。これはother
ファイルの権限とのみ一致します。
正確さのために編集しなさい。
-perm -o=rwx
これは/o
包括的なフィルタであり、、、、、または権限のあるother
ファイルと一致するため、必ず使用してください。フィルタを排他的に作成してフィールドのファイルのみを一致させるには、フィルタの先行文字をからに変更します。x
w
xw
r
rx
rw
rwx
/
-
rwx
other
答え3
あなたのアプローチはパフォーマンス上の悪夢です。各ファイルに対して2つのプロセスを作成します!find
情報はすでにそこにあり、簡単に印刷できるため、1つはまったく役に立ちません。より良い解決策は次のとおりです。
find . -perm -o=rwx -printf "%m %p_\0" 2>/dev/null |
while read -r -d '' perms path; do
path="${path%_}"
echo "${perms} '${path}'" >&2
printf "%s\0" "$path"
done | xargs -0 chmod o=rx