终端:列出用户或组具有写许可权的所有目录

Elrobis

我想列出用户或组具有写权限的所有目录。

在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),各种配置文件在哪里以及现在创建了哪些不同的组和用户-包括他们被允许写入的目录。通常我可以在askubuntu上找到这样有用的终端命令,但是找不到我认为应该继续问的命令。

确切的系统是Ubuntu 10.04.2,但我们也支持Ubuntu 12.04.5,因此与版本无关的最佳解决方案将是最佳选择。在此先感谢您的帮助。


[更新:两个快速解答的初步结果]

值得注意的是,我以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>查看他们是否可以写。这不像查看inode那样快,但是可以使用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子shell中来最小化xargs执行的子shell数量。对于大型搜索而言,这无疑是更快的。

sudo find / -type d -print0 | sudo -u oli xargs -0 sh -c 'for p; do [ -w "$p" ] && echo "$p"; done' -

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

终端:列出用户或组具有写许可权的所有目录

来自分类Dev

如何使用户没有对所有磁盘文件和目录的写许可权?

来自分类Dev

为所有人或特定用户安装具有写许可权的USB驱动器

来自分类Dev

为所有人或特定用户安装具有写许可权的USB驱动器

来自分类Dev

具有用户保留写许可权的Linux共享文件夹

来自分类Dev

对于具有750许可权的文件,哪个组具有“ 5”许可权?

来自分类Dev

如何列出在unix / linux中组有权访问的所有目录

来自分类Dev

是否可以在azure blob存储中为给定目录生成具有写许可权的SAS(共享访问签名)

来自分类Dev

使用Puppet创建具有多个组所有权的目录?

来自分类Dev

列出用户有权访问的文件和目录

来自分类Dev

制定一个mysqli查询,列出列出具有单独表的组,以确定用户是否有权访问视图组

来自分类Dev

Steam不能使用具有写许可权的EXT4分区

来自分类Dev

在具有特定组所有权的远程计算机上创建目录树

来自分类Dev

更改文件的组所有权-用户管理

来自分类Dev

更改文件作为组用户的所有权

来自分类Dev

查找所有具有组只写权限的文件

来自分类Dev

制定一个mysqli查询,该查询列出了具有单独表的组,这些表用于确定用户是否有权访问视图组

来自分类Dev

是否可以实现:-两个用户对一个文件夹具有完全许可权,其中一个是所有者?

来自分类Dev

列出目录中具有其编码的所有文件

来自分类Dev

如何在仅具有根写许可权的文件中添加一行并继续执行脚本

来自分类Dev

如何恢复/ var下所有文件的默认组/用户所有权?

来自分类Dev

如何使用Azure DevOps API列出有权访问项目存储库的组/用户?

来自分类Dev

命令列出所有具有其UID的用户?

来自分类Dev

命令列出所有具有其UID的用户?

来自分类Dev

列出用户所属的所有组。使用macOS和CentOS

来自分类Dev

列出用户及其所属的所有组的脚本

来自分类Dev

获取所有有权访问协作的用户/组:BOX API

来自分类Dev

如何授予用户更改目录中文件/目录所有权的权限

来自分类Dev

按用户列出文件空间所有权

Related 相关文章

  1. 1

    终端:列出用户或组具有写许可权的所有目录

  2. 2

    如何使用户没有对所有磁盘文件和目录的写许可权?

  3. 3

    为所有人或特定用户安装具有写许可权的USB驱动器

  4. 4

    为所有人或特定用户安装具有写许可权的USB驱动器

  5. 5

    具有用户保留写许可权的Linux共享文件夹

  6. 6

    对于具有750许可权的文件,哪个组具有“ 5”许可权?

  7. 7

    如何列出在unix / linux中组有权访问的所有目录

  8. 8

    是否可以在azure blob存储中为给定目录生成具有写许可权的SAS(共享访问签名)

  9. 9

    使用Puppet创建具有多个组所有权的目录?

  10. 10

    列出用户有权访问的文件和目录

  11. 11

    制定一个mysqli查询,列出列出具有单独表的组,以确定用户是否有权访问视图组

  12. 12

    Steam不能使用具有写许可权的EXT4分区

  13. 13

    在具有特定组所有权的远程计算机上创建目录树

  14. 14

    更改文件的组所有权-用户管理

  15. 15

    更改文件作为组用户的所有权

  16. 16

    查找所有具有组只写权限的文件

  17. 17

    制定一个mysqli查询,该查询列出了具有单独表的组,这些表用于确定用户是否有权访问视图组

  18. 18

    是否可以实现:-两个用户对一个文件夹具有完全许可权,其中一个是所有者?

  19. 19

    列出目录中具有其编码的所有文件

  20. 20

    如何在仅具有根写许可权的文件中添加一行并继续执行脚本

  21. 21

    如何恢复/ var下所有文件的默认组/用户所有权?

  22. 22

    如何使用Azure DevOps API列出有权访问项目存储库的组/用户?

  23. 23

    命令列出所有具有其UID的用户?

  24. 24

    命令列出所有具有其UID的用户?

  25. 25

    列出用户所属的所有组。使用macOS和CentOS

  26. 26

    列出用户及其所属的所有组的脚本

  27. 27

    获取所有有权访问协作的用户/组:BOX API

  28. 28

    如何授予用户更改目录中文件/目录所有权的权限

  29. 29

    按用户列出文件空间所有权

热门标签

归档