如何找到可按组或其他人写入的主目录?
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) 对文件具有 r
ead、w
rite 和 ex
ecute 权限。同样,下一组 3 个指定 组(用户) 具有 r
ead 和 ex
ecute 权限,但没有 w
rite 权限。 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
命令有简单的基本用法,只需指定新的owner
和group
,用冒号分隔:
。例如,要将上面显示的文件更改为用户 david
和组 samba
拥有,命令将是 chown david:samba filename
有两种方法可以使用chmod
更改权限或(模式)。您可以同时指定特殊位的八进制等效位和 3 组所有者、组和世界位的数字。示例:要为 user 和 group 创建目录 rwx
,您可以发出以下命令:
chmod 0775 filename # to set all permissions as desired at once
0
只是说明目录没有特殊位设置,第一个 7
表示 用户 的二进制 111
(或 rwx
),第二个 7
group 和最后的 5
表示相同,表示 world 应该具有(二进制 101
)r_x
权限。虽然并不总是需要,但建议提供前导 0
,即使不会更改特殊权限位以消除任何歧义。
您还可以将 chmod 与 +/-/= r
、w
、x
(对应的 rwx
位)用于u
、g
或o
u
ser、g
roup 或o
wner 权限(您可以使用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
别名 [
的手册页。
【讨论】:
以上是关于如何找到可按组或其他人写入的主目录?的主要内容,如果未能解决你的问题,请参考以下文章