安装软件安全考虑尽量不安装在root用户下。比如数据库mysql建立mysql用户,oracle建立oracle账号,MongoDB建立MongoDB账号,数据比较重要所以都独立一个账号,对于不存储数据的中间件可以在需要用的普通站号里面安装,还可能存在不同程序需要不同版本的中间件。
docker比较特别,默认不能使用非root用户,可以给普通用户加入到docker组。在普通用户下安装的话得有sudo权限,docker的目录得这样分配root:docker权限。
非root用户安装软件一般都是采用源码安装。
相关基础概念
bashrc
bash 在每次启动时都会加载 .bashrc
文件的内容。每个用户的 home 目录都有这个 shell 脚本。它用来存储并加载你的终端配置和环境变量。也就是可以设置命令别名,配置命令的环境变量路径。
使修改生效:source ~/.bashrc
wheel组
类似于一个管理员的组,还可以进一步控制,只允许wheel组的用户su到root
1 | 相关配置 |
/etc/subuid /etc/subgid
Linux 命名空间为运行中的进程提供了隔离,限制他们对系统资源的访问,而进程没有意识到这些限制。
防止容器内的特权升级攻击的最佳方法是将容器的应用程序配置为作为非特权用户运行。对于其进程必须作为容器中的 root 用户运行的容器,可以将此用户重新映射到 Docker 主机上权限较低的用户。映射的用户被分配了一系列 UID,这些 UID 在命名空间内作为从 0 到 65536 的普通 UID 运行,但在主机上没有特权。
docker:100300:65536
这意味着 docker将从 100300开始,在后面的 65536 个整数中按顺序为用户分配一个 ID。例如,命名空间中的 UID 100300映射到容器中的 UID 0(root),UID 100301映射为 UID 1,依此类推。如果某个进程尝试提升特权到命名空间外部,则该进程将作为主机上无特权的高数字 UID 运行,该 UID 甚至不映射到真实用户。这意味着该进程完全没有主机系统的权限。
Docker
Docker 19.03中发布了一个重要的特性 “Rootless Container”,支持非root用户,稳定性待验证。
1 | 1.创建用户 |
卸载:
1 | sudo yum remove docker-ce docker-ce-cli containerd.io |
MySQL
比如用RPM包安装的MySQL,启用的时候也是会用MySQL用户的。其他信息参考MySQL章节
在MySQL启动的时候,单进程mysqld,该进程的就是mysql用户启动的。
这样就保证了mysql服务的独立性,即使mysql服务被黑掉,得到了mysql用户权限,也不会影响整个系统的安全。
mysqld_safe与mysqld区别,直接运行mysqld程序来启动MySQL服务的方法很少见,mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。所以mysqld的pid是mysqld_safe。mysqld_safe相当于多了一个守护进程。
用mysqld_safe脚本来启动MySQL服务器的做法在BSD风格的unix系统上很常见,非BSD风格的UNIX系统中的 mysql.server脚本其实也是调用mysqld_safe脚本去启动MySQL服务器的。
1 | [root@test lib]# ps -ef|grep mysql |
NodeJS
1 | 新建站号设置密码 |
比如安装yapi的时候v16是不行的,改用v13就可以安装并且启动起来。所以可能需要多个版本的NodeJS
MongoDB
方法一:非root用下载tgz包的方式
方法二:rpm包
添加阿里源vi /etc/yum.repos.d/mongodb-org.repo
1 | [mongodb-org-5.0] |
1 | sudo yum install -y mongodb-org |
1 | [yapi@aiot-host ~]$ cat /usr/lib/systemd/system/mongod.service |
nginx源码安装
1 | ./configure --prefix=/usr/local/nginx # 不需要太多参数配置下面这种并不可取 ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre |
问题
CentOS7 Error downloading packages 解决办法?
1 | systemctl restart network |
其他问题:重点关注防火墙,网络是否会通
安装nginx
安装nginx如果想用普通用户启动,里面nginx默认是80端口,普通用户不能直接使用80端口,会导致程序启动失败。