Ubuntu 16.04では、/var/www/html/
の下にいくつかのWebサイトディレクトリがあります。
各ディレクトリの所有者がディレクトリの名前と同じになることを望みます。
そのディレクトリ名でディレクトリの所有者を再帰的に変更するにはどうすればよいですか?
1)すでに各ディレクトリごとにユーザーを作成しています:
useradd ${domain} --gecos --disabled-password --disabled-login
2)この操作の目的はセキュリティ上の理由です-すべてのディレクトリが同じ所有者を持つことを防ぐためです。
www-dataがWebサーバーの正しいグループであると仮定
chown_www.sh
のお気に入りのエディターで次を入力します
#!/bin/bash
for directory in `find /var/www/html/ -mindepth 1 -maxdepth 1 -type d`
do
user=$(basename $directory)
chown -R $user:www-data $directory
done
実行可能にする
chmod +x /path/to/script/chown_www.sh
rootとして、またはSudo経由で実行します
Sudo /path/to/script/chown_www.sh
免責事項:これには、ディレクトリ名が実行可能なユーザー(および/またはクリーンな名前)であるかどうかを確認するエラーチェックがありません。
最小/最大の深さが1のfind
は、/var/www/html
の下に直接配置されているディレクトリのみを検索します-これが目的です。
-type d
にいくつかのファイルがある場合の/html
。
次に、basename
を使用してディレクトリの名前を取得し、必要に応じて再帰的にchown
を実行します。
免責事項:これはユーザーmucluxに触発されましたが、私の編集は拒否されました
/var/www/html
の下にN個のディレクトリがあり、これらの最上位ディレクトリの所有者のみを(再帰的に)変更することを想定しています。
/var/www/html/domain1 # -> change owner to "domain1" for this dir and below
/var/www/html/domain2 # -> change owner to "domain2" for this dir and below
/var/www/html/domain3 # -> change owner to "domain3" for this dir and below
たとえば/var/www/html/domain1
にはサブディレクトリ(public
、css
、data
など)があり、それらはnotユーザーに属するpublic
などになります。 、ユーザーdomain1
にも。
この前提条件を考慮すると、次のスクリプトレットが機能します(ユーザーroot
として):
#!/usr/bin/env bash
cd /var/www/html
GLOBIGNORE=. # to catch hidden directories
for dir in *; do
test -d $dir && chown -R $dir $dir;
done
あなたの計画が良いものかどうかはわかりませんが、次のスクリプトで仕事をすることができます(Sudoで呼び出されます)。既存のユーザーIDのみを所有者として使用できることに注意してください。
#!/bin/bash
cd /var/www
for file in `find html/*`
do
d=`dirname $file`
p=`basename $d`
chown $p:www-data $file
done
スクリプトはファイルとサブディレクトリを同様に扱うため、再帰の必要はありません。
basename(dirname(file))は、直接の「親」ディレクトリの名前を提供します。