ユーザーまたはグループが書き込み権限を持っているすべてのディレクトリを一覧表示したいと思います。
この質問はServerFaultで見つけましたが、Windows Serverに対応しているので、Linuxコミュニティにはもっと良いものがあると楽観視しています。同時に、この質問には再帰的なひねりがあり、長時間実行されるスクリプトがないと不可能になる可能性があることを認識しています。
私は次の便利なコマンドを知っています:
cut -d : -f 1 /etc/group
cut -d : -f 1 /etc/passwd
getent passwd user-name| cut -d: -f 6
ls -la
ただし、ユーザーの目的がわからない場合は、書き込み権限のあるすべてのディレクトリのリストを取得して、そこから探し始めるとよいでしょう。他に何もないとしても、それは非常に便利な監査です。
私の目的を理解するのに役立つ場合は、SysAdminが新しい役職に就いた後、いくつかのシステムを継承しました(または少なくともベビーシッターですか?)。そのため、インストールされているソフトウェア、インストールされているソフトウェア、さまざまな構成ファイルが存在する場所(..ugh)、作成されているさまざまなグループやユーザーなど、これら2つのシステムの進化を理解しようとしています。書き込みが許可されているディレクトリ。通常、このような便利なターミナルコマンドはaskubuntuで見つけることができますが、これが見つからない場合は、先に進んで質問すると思いました。
正確なシステムはUbuntu10.04.2ですが、Ubuntu 12.04.5もサポートしているため、バージョンに依存しないソリューションが最適です。助けてくれてありがとう。
[更新:2つのクイックアンサーの初期結果]
これらのrootとしてログインし/
ていて、作業ディレクトリであったことは注目に値します。また、実行には同等の時間がかかりました。
@Rinzwindの組み合わせコマンドは、約5.5分で次の出力を取得しました。
root@tatooine:/# sudo find -type d \( \( -user ftpgisdata -perm /u=w \) -o \( -group ftpgisdata -perm /g=w \) -o -perm /o=w \)
./tmp
./tmp/.ICE-unix
./tmp/.X11-unix
find: `./proc/6594/task/6594/fd/5': No such file or directory
find: `./proc/6594/task/6594/fdinfo/5': No such file or directory
find: `./proc/6594/fd/5': No such file or directory
find: `./proc/6594/fdinfo/5': No such file or directory
./var/tmp
./var/lib/php5
./var/crash
./var/lock
./home/ftpgisdata
./home/ftpgisdata/.ssh
./home/ftpgisdata/.cache
./home/sitename-i-changed.com/wp-content/profile-pics
./dev/shm
@Oliの改訂されたコマンドは、約5.5分で非常によく似たものになります。
root@tatooine:/# sudo find / -type d -print0 | sudo -u ftpgisdata xargs -0 sh -c 'for p; do [ -w "$p" ] && echo "$p"; done' -
/tmp
/tmp/.ICE-unix
/tmp/.X11-unix
find: `/proc/15541': No such file or directory
find: `/proc/15542': No such file or directory
find: `/proc/15543': No such file or directory
find: `/proc/15567': No such file or directory
find: `/proc/15568/task/15568/fd/5': No such file or directory
find: `/proc/15568/task/15568/fdinfo/5': No such file or directory
find: `/proc/15568/fd/5': No such file or directory
find: `/proc/15568/fdinfo/5': No such file or directory
/var/tmp
/var/lib/php5
/var/crash
/var/lock
/home/ftpgisdata
/home/ftpgisdata/.ssh
/home/ftpgisdata/.cache
/home/sitename-i-changed.com/wp-content/profile-pics
/dev/shm
@PeterCordesの回答でも、約5.5分で同様の結果が返されました。
root@tatooine:~# username_to_check=ftpgisdata base_dir=/ # for example
root@tatooine:~# sudo -u "$username_to_check" find "$base_dir" -type d -writable 2>/dev/null ## GNU find, not POSIX
/tmp
/tmp/.ICE-unix
/tmp/.X11-unix
/proc/7159/task/7159/fd
/proc/7159/fd
/proc/7159/map_files
/var/tmp
/var/lib/php5
/var/crash
/var/lock
/home/ftpgisdata
/home/ftpgisdata/.ssh
/home/ftpgisdata/.cache
/home/sitename-i-changed.com/wp-content/profile-pics
/dev/shm
あなたがそのユーザーでない場合、ユーザーが何ができるかを理解するのは難しいです。さまざまなもの(所有者、同じグループなど)をテストできますが、ACLが適用される可能性があり、マウントに権限がない可能性があります。それは難しい。
あなたができる場合に変わるそのユーザは、次の操作を実行できtest -w <path>
、彼らが書くことができるかどうかを確認するために。これは、iノードを見るほど速くはありませんが、で可能sudo
です。
sudo -u oli test -w <path> && echo "HOORAY"
次に、それをのバックエンドにスカーリングできfind
ます。-exec
oliユーザーに何度も何度も変更するために使用するのではなく(過去のリビジョンを参照)、すべてをoliとして実行されているxargsインスタンスにパイプします。これははるかに高速です。
sudo find / -type d -print0 | sudo -u oli xargs -0 -I{} sh -c 'test -w "$0" && echo "$0"' {}
これのいくらか最適化された(しかし視覚的に不安定な)バージョンは、パスのストリームを少数のbashサブシェルにパイプすることによってxargsが実行するサブシェルの量を最小化することを含みます。これは間違いなく大規模な検索の方が高速です。
sudo find / -type d -print0 | sudo -u oli xargs -0 sh -c 'for p; do [ -w "$p" ] && echo "$p"; done' -
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加