我对 Linux 的经验不是很丰富,而且我犯了一个很大很大的错误。我运行了以下命令:
chown -R [ftpusername]:[ftpusername] /
我本来想运行这个:
chown -R [ftpusername]:[ftpusername] ./
看到问题了吗?
我试图通过将所有文件的所有者更改为来纠正我的错误root
:
chown -R root:root /
现在,我在尝试访问我的网站时遇到权限错误,但我最担心的是我想确保我没有在这里造成任何安全漏洞。
问题:
- 改变一切的所有权是
root
正确的做法吗? - 我认为运行
chown
导致某些文件夹和文件权限被更改。这正常吗?这会导致任何安全漏洞吗?
答案1
将所有东西的所有权更改为 root 是正确的做法吗?
不。然而,这是我能想到的让系统恢复正常状态的最快方法。
- 有很多进程需要某些目录/文件由其用户拥有。示例包括日志、缓存、某些进程(如 MySQL、LightDM 等)的工作/主目录。尤其是日志文件可能会产生很多问题。
- 有些应用程序是
setuid
/setgid
,因此需要它们的所有者/组是特定的。示例包括/usr/bin/at
、/usr/bin/crontab
等。
我认为运行 chown 导致某些文件夹和文件权限被更改。这正常吗?
我怀疑模式已经改变了。如果是的话,那绝对是不正常的。
这会导致任何安全漏洞吗?
由于您刚刚设置总的来说,我建议简单地重新安装系统 - 或者希望您有全盘备份。/usr/bin/crontab
为 拥有root
,因此您现在拥有一个打开编辑器的 setuid 应用程序。我怀疑与此相比是否存在任何漏洞。当然,这是一个公然的漏洞,因此现在可能会出现更阴险的情况。
显然,chown(3)
如果正在运行的进程没有适当的权限,则应该清除 setuid 和 setgid 位。和man 2 chown
对于 Linux 来说:
当非特权用户更改可执行文件的所有者或组时,模式位
S_ISUID
和S_ISGID
模式位将被清除。 POSIX 没有指定当 root 执行chown()
;时是否也应该发生这种情况Linux 的行为取决于内核版本。如果是非组可执行文件(即S_IXGRP
未设置该位的文件),则该S_ISGID
位指示强制锁定,并且不会被chown()
.
因此,开发人员和标准委员会似乎已经提供了保障措施。
答案2
您有姐妹系统或备份吗?即,您是否有一个可以复制所有权的系统?
如果是这样:复制所有权并找到不在姊妹系统中的文件,然后手动设置这些文件的所有权。