GNU/Linux >> Linux の 問題 >  >> Linux

ユーザーが読み取れないファイルを見つけますか?

特定のユーザーが読み取れないファイルを見つけたい。

ユーザー名が「user123」であり、「user123」というグループに属していると想定します。 user123が所有している場合、u+rがオンになっているファイルを見つけたい。ファイルがグループuser123の場合、g+rをオンにする必要があります。 o+r​​をオンにできることに失敗しました。

GNU findには「読み取り可能」があるので、これを行うことができます:

sudo -u user123 find /start ! -readable -ls

ただし、プロセスはsudoアクセス権を持たないユーザーが実行する必要があります。したがって、私はこれを試しました:( o + rはチェックしませんが、現時点では重要ではありません)

find /start ( -user user123 ! -perm -u=r  ) -o ( -group user123 ! -perm -g=r  ) -ls

しかし、それはこのファイルをリストします:

272118    4 -rw-------   1 user123   user123       3243 Jul  3 19:50 /start/blah/blah/file.txt

このファイルは、/startの下にある唯一のファイルです g=rのuser123が所有しています オフ。これは、findが-u=rを解釈しているようです。 -g=rとして 。

ロジックを逆にして、代わりにnot ( truth )をテストすることにしました。 代わりに:

find /etc/puppet ! ( ( -user puppet -perm -u=r  ) -o ( -group puppet -perm -g=r ) -o ( -perm -o=r ) )  -ls

それはうまくいきます!

元のfindを見つけたのはなぜですか 不合格? findのバグですか (ありそうもない)または論理が間違っていますか?

更新: 論理が間違っていました。以下に指摘するように、
! (A || B || C)==(!A &&!B &&!C)
これらは2つの同等のステートメントです:

find /start ! ( ( -user user123 -perm -u=r ) -o ( -group user123 -perm -g=r ) -o ( ! ( -user user123 -o -group user123 ) -perm -o=r ) ) -ls
find /start ! ( -user user123 -perm -u=r ) ! ( -group user123 -perm -g=r ) ! ( ! ( -user user123 -o -group user123 ) -perm -o=r ) -ls

私の目標は、ユーザー/グループを2回テストする必要がないことでした。私が本当に必要としているのは、より複雑なif-then-else構造です。これは、おそらく-xor演算子が存在する場合にのみ可能です。 xorを構築することはできますが、上記の2つのソリューションよりも複雑になります。

承認された回答:

論理が間違っています。このファイルはuser123が所有しているため、リストに表示されるべきではないと考えています。 ユーザーのrがあります ビットセット。ただし、2番目の基準(グループuser123が所有)に一致するため、リストされています。 グループのrがあります ビット未設定)。

2番目のバージョンは、ド・モルガンの法則の1つが原因で機能します。つまり、ステートメントのグループの論理ORを否定することは、個々のステートメントの否定をANDすることと論理的に同等です。言い換えれば:

 ! ( A || B || C ) == ( !A && !B && !C )

したがって、機能するfind

のファイルを探しています
  • そうではありません(ユーザーuser123が所有しています およびそのユーザーが読み取り可能)AND
  • そうではありません(グループuser123が所有しています および上記のグループが読み取り可能)AND
  • 誰でも読めるわけではありません。
関連:Linux – git commitハッシュが与えられた場合、どのカーネルリリースにそれが含まれているかを確認する方法は?

最初のfind

のファイルを探しています
  • ユーザーuser123が所有しています 上記のユーザーが読み取れない、または
  • グループuser123が所有しています そして、そのグループによって読めない、または(あなたがそれを完了した場合)
  • 世界中で読めるわけではありません

したがって、上記の3つの基準のいずれかに一致するファイル(必ずしもすべてではない)が、これまで見てきたようにリストされます。

編集

ちなみに(あなたのプロフィールを見た後)、私はあなたのO’Reillyの本の大ファンです🙂


Linux
  1. 特定の日に変更されたすべてのファイルを取得しますか?

  2. スクリプトは実行可能であるが読み取り可能ではありませんか?

  3. 最大のファイルを再帰的に検索しますか?

  1. Linux – 1人のユーザーが複数のCrontabファイルを持つことができますか?

  2. read(2) は EOF でないときにゼロを返すことができますか?

  3. 特定のユーザーが所有していないファイルを探しています

  1. Linuxでテキストを含まないテキストファイルを見つける方法は?

  2. 所有者に特定の権限しかないファイルを見つけるにはどうすればよいですか?

  3. bzip されていないすべてのファイルを再帰的に bzip2 するにはどうすればよいですか?