这里使用的非root用户是admin
,授权
#所有者更改为root,这样其他用户即可以root权限操作该文件
chown root /usr/local/nginx/sbin/nginx
#解决sudo方式执行
chmod u+s /usr/local/nginx/sbin/nginx
创建target文件,如admin.target
vim /usr/lib/systemd/system/admin.target
添加内容
[Unit]
#描述
Description=user admin target
[Install]
WantedBy=multi-user.target
enable这个target
cd /usr/lib/systemd/system
sudo systemctl enable admin.target
创建文件夹
sudo mkdir /usr/lib/systemd/system/admin.target.wants
chown -R admin /usr/lib/systemd/system/admin.target.wants
在admin.target.wants
下创建自启动服务,例如nginx服务
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/home/admin/app/server/nginx/nginx4his/sbin/nginx
ExecReload=/home/admin/app/server/nginx/nginx4his/sbin/nginx -s reload
ExecStop=/home/admin/app/server/nginx/nginx4his/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=admin.target
cd /usr/lib/systemd/system/
chmod 754 nginx.service
sudo systemctl enable nginx.service
服务脚本按照上面编写完成后,以754的权限保存在/usr/lib/systemd/system目录下,这时就可以利用systemctl进行测试了
#查看执行状态
systemctl status nginx.service
#查看执行详情
journalctl -xe
nginx启动失败systemctl start nginx.service
启动nginx失败,报错信息如下:Starting nginx: nginx: [emerg] bind() to 0.0.0.0:**** failed (13: Permission denied)
SELinux is preventing /usr/lib/systemd/systemd from execute access on the file nginx
这通常是因为开启了SELinux的原因,使用命令 getenforce 可以查看SELinux状态,如果输出为 enforcing 表示已开启。
用以下方法关闭[不建议]:
1、临时关闭selinux
setenforce 0 ##设置SELinux 成为permissive模式
setenforce 1 ##设置SELinux 成为enforcing模式
2、永久关闭selinux修改 /etc/selinux/config 文件
将 SELINUX=enforcing 改为 SELINUX=disabled
3、重启机器即可
添加selinux白名单
yum install policycoreutils-python cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx semodule -i mynginx.pp
总结:
非root用户下权限对软件的影响比较大,软件安装需要根据实际环境来处理
评论区