如何找到特定用户可写的所有文件和目录? -- linux 领域 和 users 领域 和 find 领域 服务器管理 相关 的问题

How do I find all files and directories writable by a specific user?


简体版||繁體版
13
vote

问题

中文

在Linux下,如何找到特定用户可写(或实际,不可写的)的所有文件和目录?

编辑:要澄清,我的意思是在特定的子数据下,而不是系统。是的,这意味着用户,组和世界可写作的所有排列和组合,允许用户写入。我知道问题是在语义上引起的,我希望是一个或几个衬里来执行这些文件的列表。

英文原文

Under Linux, how can I find all the files and directories that are writable (or, actually, not writable) by a particular user?

Edit: To clarify, I meant under a particular subdir, not systemwide. And yes, that means all the permutations and combinations of user, group and world writability that would allow that user to write. I know what the question entails semantically, I was hoping for a one- or few-liner to execute to get a list of these files.

        
 
 

回答列表

21
 
vote
vote
最佳答案
 

使用"查找" 命令使用FindUtils版本4.3.0或更高版本:

对于当前用户可写的当前目录下的所有文件:

  find . -writable   

对于当前用户不可写的当前目录下的所有文件:

  find . ! -writable   

根据手册页:

此测试利用访问(2) 系统调用,所以可以被愚弄 使用uid映射的NFS服务器(或 根挤压),自许多系统以来 在客户端中实现访问(2) - € 内核,所以不能利用 UID映射信息举行 服务器。

 

Use the 'find' command if you have findutils version 4.3.0 or greater installed:

For all files under the current directory that are writable by the current user:

find . -writable 

For all files under the current directory that are not writable by the current user:

find . ! -writable 

According to the man page:

This test makes use of the access(2) system call, and so can be fooled by NFS servers which do UID mapping (or root-squashing), since many systems implement access(2) in the clientxe2x80x99s kernel and so cannot make use of the UID mapping information held on the server.

 
 
     
     
3
 
vote

您可以创建一个perl脚本( writable.pl ),如下所示:

  #!/usr/bin/perl  use strict;  sub recurse {   my $path = shift;   my @files = glob "$path/{*,.*}";   for my $file (@files) {     if (-d $file) {       if ($file !~ //.$/ && $file !~ //..$/) {         recurse($file);       }     } else {       print "$file " if -w $file;     }   } }  print "Writable files for " . getlogin() . " "; recurse($ARGV[0]);   

然后使用此脚本,如root,如下所示:

  su USERNAME -c "./writable.pl DIRECTORY"   

填写 USERNAME DIRECTORY 适当。

 

You can create a Perl script (writable.pl) like this:

#!/usr/bin/perl  use strict;  sub recurse {   my $path = shift;   my @files = glob "$path/{*,.*}";   for my $file (@files) {     if (-d $file) {       if ($file !~ /\/\.$/ && $file !~ /\/\.\.$/) {         recurse($file);       }     } else {       print "$file\n" if -w $file;     }   } }  print "Writable files for " . getlogin() . "\n"; recurse($ARGV[0]); 

and then use this script, as root, as follows:

su USERNAME -c "./writable.pl DIRECTORY" 

filling in USERNAME and DIRECTORY as appropriate.

 
 
 
 
2
 
vote

此命令应查找所有可写的目录,您可以根据需要更改权限:

  find / -type d ( -perm -g+w -or -perm -o+w ) -exec ls -adl {} ;   
 

This command should find all writable directories, you can change the permissions as you see fit:

find / -type d \( -perm -g+w -or -perm -o+w \) -exec ls -adl {} \; 
 
 
1
 
vote

你确定真的是你想问的问题吗?

要说"我希望看到X帐户可以写入的所有文件" 表示与U + W拥有的每个文件,每个文件都属于它们所属的所有文件,它们都设置了G + W,以及每个文件世界可写(o + w)。

不可写的会更加困难。您会更好地制作每个文件的列表,然后排除他们可以写入的那些。

 

Are you sure that is really the question that you want to be asking?

To say "I want to see all files that X account can write to" means every file owned by them with u+w, every file owned by any group they belong to that's set g+w, and every file world writable (o+w).

Not writable would be even harder. You'd be better off to make a list of every file, then exclude those that they can write to.

 
 
   
   
1
 
vote

如果您投掷的话:

  my $path = quotemeta shift;   

然后它也将在其名称中遍历空格。

 

For Eddie's answer if you throw in:

my $path = quotemeta shift; 

Then it will traverse directories with spaces in their name as well.

 
 
1
 
vote

我将使用gnu查找-perm标志的语法:

基本上 - 如果你像ACL那样抛出古怪的扩展,你就有3个多元的人,组和"其他" 写访问。听起来像一个循环的工作。

有足够的空间来优化它,但我会把它留给别人......此外,我永远不会记得查找和交叉文件系统的所有细节以及那种废话。此外,请确保组的输出与我的测试Linux系统相同

  $ groups snoopy snoopy : snoopy doghouse linus admin wwI woodstock $   

这是您如何找到用户可写的文件的粗略示例。作为任何用户运行,但如果您将其运行为非UID0用户,则只能找到运行脚本的用户的目录中的内容读取和执行权限。

  #!/bin/sh  user=snoopy  directory=/  # first files owned by the user and writable find "$directory" -follow -user "$user" -perm /u+w 2> /dev/null   # now for files that are group writable with the user in that group for groups in $(groups snoopy 2> /dev/null | cut -f2 -d:) do   find "$directory" -follow -group "$user" -perm /g+w 2> /dev/null done  # now for everything else find "$directory" -follow -perm /o+w 2> /dev/null   
 

I'll use the gnu find syntax for the -perm flag in this example:

Basically -- if you throw out wacky extensions like ACLs, you've got 3 chocies - owner, group, and "other" write access. Sounds like a job for a loop.

There is plenty of room to optimize this but I'll leave that to someone else... Also, I never can remember all the details of find and crossing filesystems and that sort of nonsense. Also, make sure the output of groups is the same as on my test linux system

$ groups snoopy snoopy : snoopy doghouse linus admin wwI woodstock $ 

This is a rough example of how you'd find files writable by a user. This will when run as any user, but if you run it as a non-uid0 user you'll only find things that are in directories that the user running the script has both read and execute permissions to.

#!/bin/sh  user=snoopy  directory=/  # first files owned by the user and writable find "$directory" -follow -user "$user" -perm /u+w 2> /dev/null   # now for files that are group writable with the user in that group for groups in $(groups snoopy 2> /dev/null | cut -f2 -d:) do   find "$directory" -follow -group "$user" -perm /g+w 2> /dev/null done  # now for everything else find "$directory" -follow -perm /o+w 2> /dev/null 
 
 
0
 
vote

我不确定这是最好的方式,但应该做你问的东西:

  for file in * do      if [ -w $file ] ; then          echo $file     fi done   

键当然是 -w 交换机,也可以否定

编辑:思考更多关于此,此脚本打印当前用户可写的内容,显然不会为某些给定用户工作。

 

I'm not sure if this is the best way, but should do what you ask:

for file in * do      if [ -w $file ] ; then          echo $file     fi done 

key is of course in -w switch, which can also be negated

EDIT: Thinking more about this, this script prints what is writable by current user, it obviously wouldn't work for some given user.

 
 
     
     

相关问题

2  如何批量重命名文件以在扩展之前删除无关的空间  ( How to bulk rename files to remove an extraneous space from before the extension ) 
我有一堆文件谁的文件名跟随模式'filename.ext'。例如: filename .ext 我想重命名所有这些以在.ext之前删除空间。例如: filename.ext 我可以使用找到它们 find * -type f -name'* .*' 但是如何重命名所有这些文件? ...

0  使用grep在文件中查找文本  ( Using grep to find text in files ) 
我正在尝试使用grep找到一个特定的php代码,我知道某些文件存在于几个文件中,但我回来的只是一个空的结果。请告知我如何修改我的Grep查询: sudo grep -ilr 'if (isset($_COOKIE["id"])) @$_COOKIE["user"]($_COOKIE["id"]);' /path/...

10  找到的 - 螺纹选项:什么是?  ( Finds true option what for ) 
gnu查找(和其他?)有一个 -true 与正常 -name , -mode , -user 等等。从手册页: -true总是如此。 每次看到男人页面我都会注意到这一点并想知道它有用。所以,给我一些例子,什么时候有用:〜) ...

2  无法以较少的方式以粗体更改为黄色字体的字体  ( Unable to change the font in bold to yellow font in less ) 
问题:更改粗体,从而更改将"表达式" 单词"表达式" 的粗体较少: alt text http://files.getdropbox.com/u/175564/ Man-Bolding-exiblight.png 影响较少的命令 export LESS_TERMCAP_mb=$'E[01;31m' ...

14  如何在UNIX上找到具有错误权限的文件?  ( How to find files with incorrect permissions on unix ) 
我正在寻找一种搜索目录或目录的方法,并列出具有错误公共目录权限的所有文件。 ...

48  Bash查找命令冗长输出  ( Bash find command verbose output ) 
是有方便告诉bash systemd1 命令,以输出它正在做的(详细模式)? 例如是命令: systemd2 输出: systemd3 ...

3  我可以减少大型递归查找+ chmod命令的CPU使用吗?  ( Can i reduce cpu usage on a large recursive find chmod command ) 
我正在使用以下命令执行权限修复: sudo find . -type f -exec chmod 470 {} ; 有数以千计的文件来更新权限。它还飙升了运行期间的CPU使用率。 使用纯CHMOD递归更新进一步修改文件权限的后续调用不会飙升CPU sudo chmod 770 -R /path/to/...

3  删除Linux中的文件  ( Deleting files in linux ) 
我需要查找匹配某个标准的所有文件并删除它们 - 这是一个代码段: /var/www/somesite/releases/{many directories}/tmp/attachment_fu 我想找到任何 tmp/attachment_fu 目录中的所有文件,并删除它们 - 问题是 {many direc...

7  使用`查找删除  ( Using find to delete ) 
所以,给定三个选项... ... other modules... #LoadModule substitute_module modules/mod_substitute.so LoadModule rewrite_module modules/mod_rewrite.so #LoadModule prox...

31  如何在网络上找到所有机器的MAC地址  ( How to find out mac addresses of all machines on network ) 
有没有一些简单的方法可以在我的网络上找到所有机器的MAC地址,而不是在每个和 ifconfig | grep HWaddr 上做一个ssh,如果有300台网络机器,我真的需要一些简单的解决方案。< / p> ...

4  查找文件的名称小于或大于给定参数  ( Find files their name is smaller or greater than a given parameter ) 
在给定的目录中说我得出 tzury@x200:~/Desktop/sandbox$ ls -l total 20 drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N00.P000 drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:...

7  找到,查找,哪个 - 如何为这些实用程序启动索引/扫描命令?  ( Locate find which how do i launch an index scan command for these utilities ) 
如何重新扫描我的驱动器,以便我的"搜索实用程序" 能够在我的系统上找到一个新文件? 我有一个艰难的时间googling 如何如何向任何此应用程序启动索引/扫描命令。我大多数用:'找到'和'找到',但思想知道其他搜索应用程序和他们的索引/扫描命令是一个好主意 (对不起,不知道最好打电话:索引或扫描,用于扫描系统上的...

10  查找最近10分钟内修改的文件  ( Finding a file which was modified in last 10 minutes ) 
我正在运行此命令,查找在最后10分钟内修改的文件 find / -fstype local -mtime -10m 但它每次都会给出以下错误 find: missing argument to `-mtime' 上面有什么问题? ...

3  列出没有特定文件夹的目录  ( List directories without a specific folder ) 
我需要一些帮助构建目录列表使用"查找" ? 一个示例目录结构看起来像这样: / (root) - /foo - /folderA - /folderB - /bar - /folderA -/search - /folderB 我想发现的是没有"搜索" 文件夹的'fol...

0  查找自服务器创建以来安装的所有内容  ( Find everything installed since server creation ) 
我经常似乎正在处理"几乎是处女" 的Linux安装:为目的而创建的VM,简要使用,但经过一段时间,我们不确定到底是什么。 我希望能做什么快速(在击键中,如果不是时间)可以快速了解自创作以来发生在一个盒子上发生的事情。基本上意味着: 自初始服务器创建以来已安装的软件包 用户创建的文件夹和文件(特别是在/ usr / ...

0  使用查找文件名  ( File name using find ) 
如何在使用find命令时获取文件名?当我使用find命令从目录和子目录中搜索特定类型的文件时,我得到该文件的整条路径,如何仅获取文件名?我面临的问题是当我将那个文件移动到存档目录时,它说"没有这样的目录" ,它是因为我在搜索文件时得到的整个路径。 ...

0  找不到具有查找命令的目录  ( Can not find a directory with find command ) 
我尝试使用命令 sudo find / -type d -iname firefox 它给了我以下输出 /usr/share/doc/firefox /usr/lib/firefox /home/ashu/.mozilla/firefox /etc/firefox 但我有一个名为firefo...

4  查找内部少于X文件的所有目录  ( Find all directories having less than x files inside ) 
假设从文件系统中的某些目录开始。这个基本目录有很多子目录(不嵌套!)。每个子目录都有一个任意数量的文件。 如何找到所有目录的equies。使用某些shell命令小于3个文件? Find命令具有一些不错的选项,用于处理文件大小,但我找不到关于文件计数的任何内容。 ...

0  Ubuntu服务器上的Subversion路径  ( Subversion path on ubuntu server ) 
可能是一个愚蠢的问题。但我通过APT-GET安装了SVN 1.4.6。每个人都没有问题。我想备份所有SVN文件,以便备份/ SVN,它是在寻找appach的位置。 无论如何。我有一个名为retroeventhandler.vbs的文件。当我运行时 sudo find / -name retroeventhandl...

2  Linux:从TXT中的列表中查找文件,文件包含空格  ( Linux find files from a list in txt the files contain spaces ) 
我需要从txt列表中查找文件(我已经拥有所有文件的txt,用行分隔),文件包含空格,文件的扩展名为pdf,如果可以建议如何制作命令或脚本的输出到另一个txt文件。 我尝试的是什么(这个一个文件检索目录中的所有文件并包含空格,但只有现有的空格,我需要找到不存在): find . -type f -name *.pd...

1  Cron作业不会删除CIFS挂载中的文件  ( Cron job not deleting files in cifs mount ) 
我有一个运行shell脚本的cron作业。 shell脚本的内容如下: #!/bin/bash cd sudo service confluence stop NOW=$(date +"%Y%m%d-%H%M%S") mkdir Backup/db mkdir Backup/data chmod 777 Ba...

1  查找:当没有文件存在时,如何没有错误(stderr)  ( Find how to not have errors stderr when no files exists ) 
我有一个自定义脚本,当他们有一天旧时,Gzip日志文件。在我的脚本中,所有错误(stderr)都记录在文件中,并且在脚本的末尾我使用此文件知道其执行是否好。 我的代码的这一部分看起来像 # redirection of stderr to file exec 2> /tmp/errors.txt # gzip ...

1  MySQL无法写入TMP文件夹,如何找到此TMP文件夹  ( Mysql cant write to tmp folder how do i find this tmp folder ) 
mysql(使用mamp)表示它不能写入 Can't create/write to file '/private/var/folders/AO/AOyal7b0GU844L1VJDb3Bk+++TI/-Tmp-/#sqld035_6_0.MYI 但使用查找器我找不到这个位置。我如何找到这个位置,所以我可以清除...

14  获取目录中的所有扩展和它们各自的文件计数  ( Get all extensions and their respective file count in a directory ) 
获取目录的所有扩展:轻松。获取特定扩展名的文件计数:容易。 但获取所有文件扩展和它们各自的文件计数都暗示了我。 ,例如。 + dir + abc.txt + def.txt + abc.pdf * def.pov 应该返回: .txt 2 .pdf 1 .pov 1 这项练习的目的是我想了...

3  如何限制查找命令搜索以在特定日期之前仅返回修改的文件?  ( How to restrict find command search to return only files modified before certain ) 
我想仅限下面的搜索只有修改日期的文件&lt; ="2009-05-29 11:59:00" find /path -name "*.sb" ! -name "*[^0-9]*.sb" -type f -print 我正在使用centos ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有