web-dev-qa-db-ja.com

そのディレクトリの名前によってディレクトリの所有者を再帰的に変更します

Ubuntu 16.04では、/var/www/html/の下にいくつかのWebサイトディレクトリがあります。

各ディレクトリの所有者がディレクトリの名前と同じになることを望みます。

そのディレクトリ名でディレクトリの所有者を再帰的に変更するにはどうすればよいですか?

ノート:

1)すでに各ディレクトリごとにユーザーを作成しています:

useradd ${domain} --gecos --disabled-password --disabled-login

2)この操作の目的はセキュリティ上の理由です-すべてのディレクトリが同じ所有者を持つことを防ぐためです。

1
Arcticooling

作業スクリプト

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に触発されましたが、私の編集は拒否されました

4
Robert Riedl

/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にはサブディレクトリ(publiccssdataなど)があり、それらは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
0
PerlDuck

あなたの計画が良いものかどうかはわかりませんが、次のスクリプトで仕事をすることができます(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))は、直接の「親」ディレクトリの名前を提供します。

0
muclux