web-dev-qa-db-ja.com

誤ってディスクのアクセス許可構造を無効にした-なぜですか?

chown/optと何らかの理由でchownが親に飛びつき、すべてをかき立てました。

誰がなぜ/どのようにこれが起こるのか、そして将来的にそれを避ける方法を提案できますか?特定のディレクトリでコマンドを実行すると、効果的にジャンプしてルートディレクトリで実行できるというのは少し心配です。

ubuntu: /opt > Sudo chown -R root:www-data .*
chown: changing ownership of '../var/lib/lxcfs/proc/cpuinfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/meminfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/stat': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/uptime': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/diskstats': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/swaps': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/devices': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/blkio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/hugetlb': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/rdma': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/pids': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/freezer': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpuset': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/memory': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/perf_event': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpu,cpuacct': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/net_cls,net_prio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/name=systemd': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/unified': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs': No such file or directory
^C
:ubuntu: /opt >
23
Duke Dougal

これは、次を使用したために起こりました。

Sudo chown -R root:www-data .*

代わりにこれを使用する必要があった場合:

Sudo chown -R root:www-data ./*

まず、-Rは、ターゲットディレクトリの下のすべてのディレクトリに対して再帰的です。

さらに、*は、現在のディレクトリの下にあるすべてのファイルとディレクトリに一致します。次に、.*はすべてのファイルとディレクトリに一致します1レベル上の現在のディレクトリ。

これを今後回避するために、lsコマンドを使用して、次の例のようにchownコマンドを実行する前にパスを確認できます。

ls -a ./*
ls -a *
ls -a .*
ls -a ../*

これを回避する別の方法は、コマンドを実行するディレクトリへの絶対パスを常に使用することです。

次に例を示します。

Sudo chown -R root:www-data /opt/*

編集:

次のコマンドを使用して、/optの直下にあるすべての非表示のファイルまたはディレクトリをchmodできます(非表示にする.の後の最初の文字が、文字、数字、ダッシュ、またはアンダースコアであると想定し、ほとんどのファイル)。

for i in /opt/.[A-Za-z0-9-_]*; do Sudo chmod root:www-data "/opt/$i"; done

次のコマンドを実行することで、これがどのファイルを確認することができますchmod

ls /opt/.[A-Za-z0-9-_]*

コマンドの最初の部分for i in /opt/.[A-Za-z0-9-_]*は、 glob/opt/.[A-Za-z0-9-_]*のすべての結果について、各結果を変数に割り当てることを示しています"私"。

このグロブでは、最初の文字は.である必要があり、次の文字[A-Za-z0-9-_]はA-Zまたはa-zである任意の文字であるか、0-9である任意の文字であるか、または-または_である必要があると述べています。

これにより、現在のディレクトリと現在のディレクトリの上のディレクトリを表す...の結果が除外され、非表示のファイルとディレクトリのみが含まれます。

コマンドの2番目の部分do Sudo chmod root:www-data "/opt/$i"は、$iの現在の値に一致するすべての変数に対してコマンドを実行することを示します。

コマンドの3番目の部分doneは、終了したことを示しています。


さらに、-Rオプションをchmodとともに使用しました。-Rオプションは再帰的であり、すべてのディレクトリに適用されますandファイル。

オプションなしでchmodコマンドのみを使用する場合、コマンドは指定した特定のファイルまたはディレクトリにのみ適用され、ディレクトリには再帰的に適用されません。

25
mchid

シェルグロブ.*..(親ディレクトリ)と一致しますが、この場合は残念ながら/です。

steeldriver@t400s:/opt$ ls .*
.:

..:
bin  boot  cdrom  dev  etc  home  initrd.img  initrd.img.old  lib  lib32  lib64
libx32  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  swapfile  sys
tmp  usr  var  vmlinuz  vmlinuz.old

追加のディスカッションについては、以下を参照してください。

45
steeldriver

ドットで始まる.*すべてと一致するため、問題が発生しました。この式にはパスが含まれていないため、コンテキストは現在のディレクトリです。したがって、現在のディレクトリに.gitのような隠しファイルまたは隠しフォルダーがある場合は、それらを照合します。しかし、(そのフォルダでls -aを実行するとわかるように).および..にも一致します

もちろん、..は親ディレクトリなので、chmod -Rは親ディレクトリ内のすべてを再帰的にターゲットにします。

5
alexis