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


23

私はchown内にしようとし/optていたが、何らかの理由でchown親に飛びついて、すべてをownった。

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

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 >

2
私はこのようにそれを行っているでしょう。sudo chown -R root:wwwdata /optいくつかの問題を引き起こし、おそらくそのパイプを使用して--helpダイアログ...ごとに???
ジョシュア・ベスネッテ


7
@steeldriverは回答として投稿されるべきだと思われます;)
Joshua Besneatte

2
それでは、隠しファイルにアクセス許可を設定する正しい方法は何ですか?
デュークダガル

4
@JoshuaBesneatte /で始まる引数に対して再帰的なコマンドを実行しないようにしています。ほとんどのキーボードはEnterキーの近くに配置されているため、コマンドの残りの部分を入力する前に誤ってEnterキーを押すのは簡単すぎます。このリスクを軽減するcdには、ルートディレクトリに移動して/を省略するか、またはでコマンドを開始します(。つまり、一致)が入力されるまでコマンドは実行されず、Ctrl-Cを押して脱出することができます。悪い間違い(rm -rf /tmp/foo-installTの代わりにEnterを押すなど)。
モンティハーダー

回答:


25

これは次を使用したために発生しました:

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/*

編集:

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

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-_]*、そのすべての結果について述べているグロブ /opt/.[A-Za-z0-9-_]*「i」は、各結果割り当て変数に。

ここでのグロブは、最初の文字がである必要が.あり、次の文字 [A-Za-z0-9-_]はAZまたはazまたは0-9またはa -またはaの数字でなければならないことを示してい_ます。

これは、結果を除外します.と、..これは現在のディレクトリとカレントディレクトリ上のディレクトリを表し、隠されたファイルとディレクトリをのみが含まれます。

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

コマンドの3番目の部分はdone私は終了していたという。


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

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


5
私の目的は、隠しファイルをターゲットにすることでした。stackoverflow.com/questions/10375689/…で説明されている隠しファイルのgrepに使用される構文は、一般的に隠しファイルの有効な構文であると誤って想定していました。そうではないようです。
デューク・ドゥガル

2
@DukeDougal最初に出てくる答えをすぐに受け入れてはいけません。一般的に、受け入れる前に、たとえば24時間待つ方が良いでしょう。その間に、受け入れるに値する他のより有用なまたはより良い書面による回答が出てくるかもしれません。役に立つと思うすべての答えに賛成票を投じることができます。StackExchangeは、「誰が最初に回答するか」ではなく(「そうするべきではない」)、「誰が最良の回答を提供するか」(内容と明確さの両方の観点から)についてです。
ジャコモアルゼッタ

11
編集はひどいです。ls出力を解析することを示唆していて、答えが使用されてfindいる間は非常に遅いです。
valは、モニカを

9
(1)を除くbash **では、ワイルドカード(glob / pattern)は再帰的ではなく、明示的に有効にする必要があります。私見、あなたの役割についてより明確にする必要があり  -Rます。(2)で*始まるファイル名と一致する可能性があるため、プレーンとして使用することは避けてください-。これはオプションとして解釈されます。  それに対して保護する必要がありますが、すべてのコマンドがその規則を尊重するかどうかはわかりません。…(続き)command -- *
スコット

6
(続き)…(3)  *、  オプションが設定されていない限り、 「ドットファイル」()の検索に失敗すること./* さえ  あります。 ジョシュアBesneatteと  ilkkachuは言う、そして優れています。…(続き)/opt/*.*dotglobchown -R /optchown -R .
スコット

45

この場合、残念ながらシェルglobは(親ディレクトリ)に.*一致します:../

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

詳細については、以下を参照してください。


6
これは、正しい、とはるかに簡単な答えである
abligh

5

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

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


/opt/.*役に立たないような絶対パス/opt/..は、..CWD = と同じ/optです。
ピーター・コーデス

@Peter:はい、正しいです。式にパスが含まれていた場合、現在のディレクトリではなく、コンテキスト(開始点)が得られます。OPは.コンテキストとして使用することを意味していましたが、スラッシュがないためにうまく
いき
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.