如何找到可按组或其他人写入的主目录?

Posted

技术标签:

【中文标题】如何找到可按组或其他人写入的主目录?【英文标题】:how do I find home directories that are writable by group or other? 【发布时间】:2014-07-08 00:34:40 【问题描述】:

我真的是 Bash 脚本的新手,所以如果这个问题听起来很愚蠢,请多多包涵。我也不太确定要在 Internet 上搜索什么。如果我需要编写一个 shell 脚本来列出一个用户的主目录可以被其他用户修改的任何目录,我该怎么办?我我无法理解这个“其他用户修改的意思”是什么意思。请帮忙。谢谢!

【问题讨论】:

你的问题没有任何意义。 一个用户的主目录可以被其他用户修改是什么意思 了解文件权限。 man chmod 是一个开始的地方,并在网上查看。在执行此操作之前,您需要了解 Unix 文件权限的工作原理。然后阅读find 命令。 @ElliottFrisch 。感谢回复。那是我无法理解的确切内容! @Noob find /home -type d -print | grep -v $(whoami)? 又快又脏cut -d: -f6 /etc/passwd | while read home; do if (( 0$(stat -c %a $home 2>/dev/null) & 022 )) > 0; then echo $home; fi; done 【参考方案1】:

对您的问题的简短回答是:不需要脚本,只需:

ls -al /home

这将为您列出所有用户以及每个用户主目录的相应权限。 Linux 文件权限由10 bits 控制,代表 具有访问权限以及什么(如果有)与给定文件相关联的特殊权限。权限位通常表示为drwxrwxrwx 以供讨论。第一个或特殊的位含义如下:

     _: (unset) indicates a regular file with no special properties
     d: directory,
     l: link,
     s: the directory is setuid/setgid
     t: sticky bit

接下来的九位rwxrwxrwx(3 组rwx)控制owner group world 对相关文件的访问。那么所有者 世界是谁?我们来看一个来自ls -al /home的例子:

drwxr-xr-x  15 deborah users  4096 Mar 11  2011 deborah

查看信息我们可以将10位和信息分开如下:

d  rwx  r-x  r-x  ..  deborah  users  ..... deborah
    |    |    |       \        \            \
  owner  |  world      owner    group        filename
       group

特殊权限位上方是d,表示文件名(在最右侧deborah)是一个目录。第一组 3 位指定 所有者 (deborah) 对文件具有 read、write 和 execute 权限。同样,下一组 3 个指定 组(用户) 具有 read 和 execute 权限,但没有 write 权限。 NOTE: with a directory, the execute bit also control whether the (owner, group or world) can descend into the directory。同样,world (everybody)group (users) 具有相同的权限。

要操作位,请使用chmod(更改模式)命令。要操作用户或组,请使用chown(更改所有者)命令。 chown 命令有简单的基本用法,只需指定新的ownergroup,用冒号分隔:。例如,要将上面显示的文件更改为用户 david 和组 samba 拥有,命令将是 chown david:samba filename

有两种方法可以使用chmod 更改权限或(模式)。您可以同时指定特殊位的八进制等效位和 3 组所有者、组和世界位的数字。示例:要为 usergroup 创建目录 rwx,您可以发出以下命令:

chmod 0775 filename    # to set all permissions as desired at once

0 只是说明目录没有特殊位设置,第一个 7 表示 用户 的二进制 111(或 rwx),第二个 7 group 和最后的 5 表示相同,表示 world 应该具有(二进制 101r_x 权限。虽然并不总是需要,但建议提供前导 0,即使不会更改特殊权限位以消除任何歧义。

您还可以将 chmod 与 +/-/= rwx(对应的 rwx 位)用于ugouser、group 或owner 权限(您可以使用a 来表示all)。要将它们放在一起并使用八进制位设置与上面相同的模式,您只需执行以下操作:

chmod g+w filename      # to add the single write bit to group 'users'

使用此方法,您可能需要多次调用chmod 才能根据需要设置所有权限,但与使用八进制权限相比,您可以在一次调用中设置所有权限字段.

显然,它的功能远不止于此,但为了进行良好的介绍,这应该足以让您开始管理权限和所有权。 (显然,这篇文章的发布时间也比最初预期的要长,请欣赏)。

【讨论】:

很有帮助且呈现精美,但 OP 专门要求提供 脚本。然而,为了完善您的帖子,我建议为您在此处解释的事情添加资源链接(setuid,sticky bit,...)。声明 the execute bit also controls whether the (owner, group or world) can descend into the directory 有点模棱两可,因为它可以解释为对于目录,它控制 更多 而不是递归到其子树的能力(而我认为 also 指的是bit 双重职责:基于文件类型的不同含义)。 是的。感谢您的评论。我用粗体表示执行位的控制下降到原图正下方的目录中。这通常会抓住人。我想我应该将 ls 命令包装在一个循环中,并在其后加上 test -w,但显然 OP 需要更早地开始理解 ;-)【参考方案2】:

其他用户可以在哪里修改一个用户的主目录?

可以是:

    如果 user1 和 user2 在同一个组中并且主目录是组可写的,或者 如果用户有全局可写目录

您确实需要了解类 unix 权限的工作原理。 (或在更广泛的背景下 - ACL 的一般工作方式)

对于(部分)解决方案(多种方式 - 其中之一是下一个):

    您可以从/etc/passwd 文件中获取主目录的路径。 可以循环读取它们,(使用cut 命令过滤/etc/passwd),并且 测试,如果它们对你来说是可写的(为此,请阅读关于 shell 内置函数 if 和命令 test 别名 [ 的手册页。

【讨论】:

以上是关于如何找到可按组或其他人写入的主目录?的主要内容,如果未能解决你的问题,请参考以下文章

如何查找托管我的主目录和托管我的主目录的存储系统技术

在 ubuntu 的另一个分区中设置文档根目录

oracle11g安装时 在注册表中没有找到指定的主目录名

FTP用户隔离

更改Jenkins的主目录

linux环境下如何快速切换到用户tom的主目录