![文件系统所有权的安全影响](https://linux22.com/image/557981/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%89%80%E6%9C%89%E6%9D%83%E7%9A%84%E5%AE%89%E5%85%A8%E5%BD%B1%E5%93%8D.png)
给予非 root 用户文件系统的所有权是否会造成安全隐患?
例如,目录/var/lib/pgsql/9.0/data
及其内容需要由 postgres 用户拥有。如果我想将其内容放在自己的文件系统上,那么
- 直接将该文件系统挂载到
/var/lib/pgsql/9.0/data
或者
- 创建一个由 root 拥有的目录(例如
/mnt/pgsql_data
),将文件系统挂载到那里,在该文件系统上创建一个由 postgres 拥有的目录(例如/mnt/pgsql_data/data
),并创建/var/lib/pgsql/9.0/data
指向该目录的符号链接
我所看到的前者的唯一潜在安全问题是它使 postgres 用户能够更改目录lost+found
(如果它是 ext2、ext3 或 ext4 文件系统),但我不认为这会产生严重影响。
促使我问这个问题的原因是,如果文件系统安装在数据目录上,则不支持创建 postgres 数据库;请参阅此 pgsql-hackers 讨论。我之前没有考虑过该帖子的第一点。
答案1
取决于文件系统。据我所知,ext3 等不会识别挂载点所有者的 uid,而只会识别挂载分区根的 uid。
无论如何,想象一下你正在使用一些会尊重所有权并跟随我的蹩脚文件系统......
根据文件系统的层次结构和内容,可能会存在严重的安全隐患。
让我举例说明一下(对于艺术自由的程度表示歉意,但我不会考虑可能的文件锁定问题...... 8D)
#mkdir /opt/postgres
#mount /dev/sdf1 /opt/postgres
#chown postgres:portgres /opt/postgres
#ls - /opt/postgres/8.3/
drwxr-xr-x 4 postgres postgres 1024 2011-08-11 23:14 .
drwxr-xr-x 7 root root 48 2011-08-11 23:11 ..
drwxr-xr-x 2 root root 1024 2011-08-11 23:14 bin
drwxr-xr-x 2 root root 1024 2011-08-11 23:14 lib
drwxr-xr-x 2 root root 1024 2011-08-11 23:14 doc
drwxr-xr-x 2 root root 1024 2011-08-11 23:14 contrib
drwx------ 2 root root 12288 2011-08-11 23:13 lost+found
现在假设有人拥有 Postgres 访问权限并想要后门/opt/postgres/8.3/bin/createdb
$cd /opt/postgres
$cp -R 8.3 .hackme
$cd .hackme/bin
$echo 'rm -rf /' > createdb
$cd ..
$mv 8.3 .old; mv .hackme 8.3
这种特权升级攻击有点过时了……变体在过去相当常见。我必须补充一点,这种错误方法是标准建议将配置文件(例如 httpd.conf)归用户所有而不是由进程使用的主要原因之一。
希望能帮助到你
答案2
我不知道这是否真的存在安全隐患。我认为关键点在于 Linux 挂载完全取代了目录中已有的内容(除非你正在执行联合挂载,但那是另一个话题)。
为了简单和惯例,我只需将data
目录归为 root 所有,然后在那里进行挂载。