• 短网址资料-nginx非root用户启动-systemctl启动脚本-分割root权限



    https://www.cnblogs.com/aspnethot/articles/3492191.html
    https://www.cnblogs.com/aspnethot/articles/3492253.html
    http://www.cnblogs.com/sunli/archive/2010/03/25/1696183.html
    https://c7sky.com/yourls.html


    wget http://nginx.org/download/nginx-1.8.1.tar.gz

    tar xvf nginx-1.8.1.tar.gz
    cd nginx-1.8.1
    [root@Server1 nginx-1.8.1]$ ls
    mkdir /var/tmp/nginx/client -p
    /usr/local/nginx/sbin/nginx

    /usr/local/nginx/sbin/nginx -s reload
    useradd zsl2
    passwd zsl2
    123456
    su zsl2

    chmod -R 777 /var/log/nginx
    chmod -R 777 /var/run/nginx #注意给普通用户写入权限

    [zsl2@node62 nginx-1.8.1]$ /usr/local/nginx/sbin/nginx #虽然有报警但是执行成功了
    nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /usr/local/nginx/conf/nginx.conf:2

    root@node62 ~]# ps -aux | grep nginx
    zsl2 13060 0.0 0.0 43656 1100 ? Ss 09:55 0:00 nginx: master process /usr/local/nginx/sbin/nginx
    zsl2 13061 0.0 0.0 44104 1568 ? S 09:55 0:00 nginx: worker process

    80端口启动报错
    [zsl2@node62 nginx-1.8.1]$ /usr/local/nginx/sbin/nginx
    nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /usr/local/nginx/conf/nginx.conf:2
    nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

    setcap cap_net_bind_service=+eip /usr/local/nginx/sbin/nginx #使命令在非root用户下支持1024以下端口启动 注意在root下执行此命令

    然后启动nginx

    -r是清除附加权限:

    setcap -r nginx

     分割权限参考

    https://www.cnblogs.com/nf01/articles/10418141.html

    手写nginx以systemclt命令启动 脚本

    vi /usr/lib/systemd/system/nginx.service

    [Unit]
    Description=nginx
    After=network.target remote-fs.target nss-lookup.target
    [Service]
    Type=forking
    User=nginx
    Group=nginx
    PIDFile=/var/run/nginx/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=false #注意这里为false不然报错创建文件夹也不行
    
    [Install]
    WantedBy=multi-user.target

    CentOS7自定义系统服务

    CentOS7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,需要开机不登陆就能运行的程序,存在系统服务里,即:/usr/lib/systemd/system目录下.
    CentOS7的每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]

    [Unit]部分主要是对这个服务的说明,内容包括Description和After,Description 用于描述服务,After用于描述服务类别

    [Service]部分是服务的关键,是服务的一些具体运行参数的设置.
    Type=forking是后台运行的形式,
    User=users是设置服务运行的用户,
    Group=users是设置服务运行的用户组,
    PIDFile为存放PID的文件路径,
    ExecStart为服务的具体运行命令,
    ExecReload为重启命令,
    ExecStop为停止命令,
    PrivateTmp=True表示给服务分配独立的临时空间
    注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!
    [Install]部分是服务安装的相关设置,可设置为多用户的
    首先,使用systemctl start [ 服务名(也是文件名) ] 可测试服务是否可以成功运行,如果不能运行则可以使用systemctl status [ 服务名(也是文件名) ]查看错误信息和其他服务信息,然后根据报错进行修改,直到可以start,如果不放心还可以测试restart和stop命令。

    接着,只要使用systemctl enable xxxxx就可以将所编写的服务添加至开机启动即可。

    实例:服务用于开机运行tomcat项目:

    #vi /usr/lib/systemd/system/tomcat.service

    [Unit]
    Description=java tomcat project
    After=tomcat.service
    [Service]
    Type=forking
    User=users
    Group=users
    PIDFile=/usr/local/tomcat/tomcat.pid
    ExecStart=/usr/local/tomcat/bin/startup.sh
    ExecReload=
    ExecStop=/usr/local/tomcat/bin/shutdown.sh
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    添加可执行权限:
    chmod 754 /usr/lib/systemd/system/tomcat.service
    设置为开机自启动:
    #systemctl enable tomcat.service
    常用指令(以tomcat服务为例):
    启动某服务
    systemctl start tomcat.service
    停止某服务
    systemctl stop tomcat.service
    systemctl restart tomcat.service
    使某服务自动启动(如tomcat服务)
    systemctl enable tomcat.service
    使某服务不自动启动
    systemctl disable tomcat.service
    检查服务状态
    systemctl status tomcat.service (服务详细信息)
    systemctl is-active tomcat.service(仅显示是否Active)
    显示所有已启动的服务
    systemctl list-units --type=service

    另一种方式传递权限但是守护进程还是root

    [root@node62 ~]# chmod u+s /usr/local/nginx/sbin/nginx
    [root@node62 ~]# ll /usr/local/nginx/sbin/nginx
    -rwsr-xr-x 1 root root 5250016 Apr 23 09:15 /usr/local/nginx/sbin/nginx

    编译安装nginx

    https://www.cnblogs.com/zhang-shijie/p/5294162.html

  • 相关阅读:
    MFC中,什么是CALLBACK函数,什么是WINAPI函数,二者有什么区别和联系?
    浙江移动话费计算-js代码
    [转]C#网页自动登录和提交POST信息的多种方法
    JavaScript小数四舍五入toFixed
    C#.NET应用程序实现网页自动登录
    VC改变对话框按钮字体颜色和背景的解决方案(转)
    WPF窗口阴影
    用MVVM模式开发中遇到的零散问题总结(1)
    NPOI之Excel——合并单元格、设置样式、输入公式
    近距离接触RAC DRM
  • 原文地址:https://www.cnblogs.com/zsl-find/p/10887324.html
Copyright © 2020-2023  润新知