Spr*_*dzy 17 security users administration software-installation group
大多数情况下,从源代码安装程序时,建议创建一个新用户和一个新组,并赋予/usr/local/<myapp>
最近创建的用户和组所有权。
为什么这种做法被认为是一种好的做法?
它有什么改进?
示例:MySQL 数据库服务器的 mysql 用户/mysql 组。
Gil*_*il' 15
实践不是为每个应用程序创建一个用户和组,而是为每个服务创建一个用户和组。也就是说,由本地用户执行的程序不需要以 root 以外的用户身份安装。它是守护进程,在后台运行并执行通过网络或其他通信方式发出的请求的程序,应该作为专用用户运行。
守护程序作为专用用户运行,因此如果它行为不端(由于错误,可能由攻击者触发),它可以造成的损害是有限的:只有守护程序的数据文件受到影响(除非攻击者设法找到本地根漏洞,这可能发生)。例如,数据库守护程序mysqld
作为专用用户和组运行,并且mysql:mysql
数据库 ( /var/lib/mysql/*
)的数据文件属于mysql:mysql
.
注意守护进程可执行文件和其他使用但不应被守护进程修改的静态数据和配置文件不得属于专用用户;它们应该由 拥有root:root
,就像大多数程序和配置文件一样。该mysqld
过程没有业务覆盖/usr/sbin/mysqld
或者/etc/mysql/my.cnf
,所以这些文件必须不属于mysql
用户或者是被写入mysql
用户或mysql
组。如果某些文件需要仅由守护程序和管理员读取,则它们应由用户 root 和专用组拥有,并具有模式 0640 ( rw-r-----
)。
一类特殊的可执行文件不能归其所有,root:root
是由用户调用但需要以额外权限运行的程序。如果这些可执行文件需要(至少部分地)以 root 身份运行,它们必须是setuid root;那么可执行文件必须具有模式 4755 ( rwsr-xr-x
)。如果程序需要额外的权限而不是 root,那么应该将程序设置为 setgid,这样额外的权限来自组而不是用户。然后可执行文件具有模式 2755 ( rwxr-sr-x
)。原因有二:
它被认为是良好实践的原因是防止系统的其他用户覆盖特定应用程序的数据和配置文件。
例如mysql
,mysql
作为 mysql 数据库文件存储的所有者,可以防止任何不使用应用程序 API 的人损坏数据库。另外,用户mysql
通常没有真正的 shell,因此也没有人可以以该用户身份登录。