История изменений
Исправление firkax, (текущая версия) :
Или ещё вариант как оставить nginx под рутом, выдать права его перезапускать, и не пользоваться не понравившимся тебе sudo (мне он тоже не нравится).
Пишешь прогу например nginx-runner.c
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <grp.h>
!!! тут заменяешь пути на другие если у тебя другие
#define NGINX_BIN "/usr/sbin/nginx"
#define NGINX_CONF "/etc/nginx/nginx.conf"
int main(int argc, char **argv) {
char *args[10], *envp[10], *sig;
if(argc==1) sig = NULL;
else if(argc!=2) { usage:
fprintf(stderr, "Usage: %s [start|stop|quit|reopen|reload]\n", argv[0]);
return -1;
} else if(!strcmp(argv[1],"start")) sig = NULL;
else if(!strcmp(argv[1],"stop") || !strcmp(argv[1],"quit") || !strcmp(argv[1],"reopen") || !strcmp(argv[1],"reload")) sig = argv[1];
else goto usage;
if(setgroups(0,NULL)<0 || setgid(0)<0 || setuid(0)<0) {
fprintf(stderr, "failed to set superuser, error %d (%s)\n", errno, strerror(errno));
return -1;
}
args[0] = NGINX_BIN;
if(!sig) args[1] = NULL;
else { args[1] = "-s"; args[2] = sig; args[3] = NULL; }
envp[0] = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
envp[1] = NULL;
execve(args[0], args, envp);
fprintf(stderr, "exec(%s) error %d (%s)\n", args[0], errno, strerror(errno));
return -1;
}
Компилируешь её и кладёшь на место (от рута):
gcc -Wall -o /usr/local/bin/nginx-runner nginx-runner.c
chgrp группа_твоего_юзера /usr/local/bin/nginx-runner
chmod 4750 /usr/local/bin/nginx-runner
nginx-runner (запустить nginx)
nginx-runner start (запустить nginx)
nginx-runner stop (остановить nginx)
nginx-runner reload
nginx-runner reopen
nginx-runner quit
Учти только что если у тебя nginx запускается из systemd то скорее всего start он будет делать ему сам автоматически и команда start отсюда всегда будет ругаться что он уже запущен. Можно отключить в systemd его целиком и тогда управление останется целиком у юзера (если надо).
Исправление firkax, :
Или ещё вариант как оставить nginx под рутом, выдать права его перезапускать, и не пользоваться не понравившимся тебе sudo (мне он тоже не нравится).
Пишешь прогу например nginx-runner.c
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <grp.h>
!!! тут заменяешь пути на другие если у тебя другие
#define NGINX_BIN "/usr/sbin/nginx"
#define NGINX_CONF "/etc/nginx/nginx.conf"
int main(int argc, char **argv) {
char *args[10], *envp[10], *sig;
if(argc==1) sig = NULL;
else if(argc!=2) { usage:
fprintf(stderr, "Usage: %s [start|stop|quit|reopen|reload}\n", argv[0]);
return -1;
} else if(!strcmp(argv[1],"start")) sig = NULL;
else if(!strcmp(argv[1],"stop") || !strcmp(argv[1],"quit") || !strcmp(argv[1],"reopen") || !strcmp(argv[1],"reload")) sig = argv[1];
else goto usage;
if(setgroups(0,NULL)<0 || setgid(0)<0 || setuid(0)<0) {
fprintf(stderr, "failed to set superuser, error %d (%s)\n", errno, strerror(errno));
return -1;
}
args[0] = NGINX_BIN;
if(!sig) args[1] = NULL;
else { args[1] = "-s"; args[2] = sig; args[3] = NULL; }
envp[0] = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
envp[1] = NULL;
execve(args[0], args, envp);
fprintf(stderr, "exec(%s) error %d (%s)\n", args[0], errno, strerror(errno));
return -1;
}
Компилируешь её и кладёшь на место (от рута):
gcc -Wall -o /usr/local/bin/nginx-runner nginx-runner.c
chgrp группа_твоего_юзера /usr/local/bin/nginx-runner
chmod 4750 /usr/local/bin/nginx-runner
nginx-runner (запустить nginx)
nginx-runner start (запустить nginx)
nginx-runner stop (остановить nginx)
nginx-runner reload
nginx-runner reopen
nginx-runner quit
Учти только что если у тебя nginx запускается из systemd то скорее всего start он будет делать ему сам автоматически и команда start отсюды всегда будет ругаться что он уже запущен. Можно отключить в systemd его целиком и тогда управление останется целиком у юзера (если надо).
Исправление firkax, :
Или ещё вариант как оставить nginx под рутом, выдать права его перезапускать, и не пользоваться не понравившимся тебе sudo (мне он тоже не нравится).
Пишешь прогу например nginx-runner.c
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <grp.h>
!!! тут заменяешь пути на другие если у тебя другие
#define NGINX_BIN "/usr/sbin/nginx"
#define NGINX_CONF "/etc/nginx/nginx.conf"
int main(int argc, char **argv) {
char *args[10], *envp[10], *sig;
if(argc==1) sig = NULL;
else if(argc!=2) { usage:
fprintf(stderr, "Usage: %s [start|stop|quit|reopen|reload}\n", argv[0]);
return -1;
} else if(!strcmp(argv[1],"start")) sig = NULL;
else if(!strcmp(argv[1],"stop") || !strcmp(argv[1],"quit") || !strcmp(argv[1],"reopen") || !strcmp(argv[1],"reload")) sig = argv[1];
else goto usage;
if(setgroups(0,NULL)<0 || setgid(0)<0 || setuid(0)<0) {
fprintf(stderr, "failed to set superuser, error %d (%s)\n", errno, strerror(errno));
return -1;
}
args[0] = NGINX_BIN;
if(!sig) args[1] = NULL;
else { args[1] = "-s"; args[2] = sig; args[3] = NULL; }
envp[0] = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
envp[1] = NULL;
execve(args[0], args, envp);
fprintf(stderr, "exec(%s) error %d (%s)\n", args[0], errno, strerror(errno));
return -1;
}
Компилируешь её и кладёшь на место (от рута):
gcc -Wall -o /usr/local/bin/nginx-runner nginx-runner.c
chgrp группа_твоего_юзера /usr/local/bin/nginx-runner
chmod 4750 /usr/local/bin/nginx-runner
nginx-runner (запустить nginx)
nginx-runner start (запустить nginx)
nginx-runner stop (остановить nginx)
nginx-runner reload
nginx-runner reopen
nginx-runner quit
Исправление firkax, :
Или ещё вариант как оставить nginx под рутом, выдать права его перезапускать, и не пользоваться не понравившимся тебе sudo (мне он тоже не нравится).
Пишешь прогу например nginx-runner.c
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <grp.h>
!!! тут заменяешь пути на другие если у тебя другие
#define NGINX_BIN "/usr/sbin/nginx"
#define NGINX_CONF "/etc/nginx/nginx.conf"
int main(int argc, char **argv) {
char *args[10], *envp[10], *sig;
if(argc==1) sig = NULL;
else if(argc!=2) { usage:
fprintf(stderr, "Usage: %s [start|stop|quit|reopen|reload}\n", argv[0]);
return -1;
} else if(!strcmp(argv[1],"start")) sig = NULL;
else if(!strcmp(argv[1],"stop") || !strcmp(argv[1],"quit") || !strcmp(argv[1],"reopen") || !strcmp(argv[1],"reload")) sig = argv[1];
else goto usage;
if(setgroups(0,NULL)<0 || setgid(0)<0 || setuid(0)<0) {
fprintf(stderr, "failed to set superuser, error %d (%s)\n", errno, strerror(errno));
return -1;
}
args[0] = NGINX_BIN;
if(!sig) args[1] = NULL;
else { args[1] = "-s"; args[2] = sig; args[3] = NULL; }
envp[0] = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
envp[1] = NULL;
execve(args[0], args, envp);
fprintf(stderr, "exec(%s) error %d (%s)\n", args[0], errno, strerror(errno));
return -1;
}
gcc -Wall -o /usr/local/bin/nginx-runner nginx-runner.c
chgrp группа_твоего_юзера /usr/local/bin/nginx-runner
chmod 4750 /usr/local/bin/nginx-runner
nginx-runner (запустить nginx)
nginx-runner start (запустить nginx)
nginx-runner stop (остановить nginx)
nginx-runner reload
nginx-runner reopen
nginx-runner quit
Исходная версия firkax, :
Или ещё вариант как оставить nginx под рутом, выдать права его перезапускать, и не пользоваться не понравившимся тебе sudo (мне он тоже не нравится).
Пишешь прогу например nginx-runner.c
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <grp.h>
#define NGINX_BIN "/usr/sbin/nginx"
#define NGINX_CONF "/etc/nginx/nginx.conf"
int main(int argc, char **argv) {
char *args[10], *envp[10], *sig;
if(argc==1) sig = NULL;
else if(argc!=2) { usage:
fprintf(stderr, "Usage: %s [start|stop|quit|reopen|reload}\n", argv[0]);
return -1;
} else if(!strcmp(argv[1],"start")) sig = NULL;
else if(!strcmp(argv[1],"stop") || !strcmp(argv[1],"quit") || !strcmp(argv[1],"reopen") || !strcmp(argv[1],"reload")) sig = argv[1];
else goto usage;
if(setgroups(0,NULL)<0 || setgid(0)<0 || setuid(0)<0) {
fprintf(stderr, "failed to set superuser, error %d (%s)\n", errno, strerror(errno));
return -1;
}
args[0] = NGINX_BIN;
if(!sig) args[1] = NULL;
else { args[1] = "-s"; args[2] = sig; args[3] = NULL; }
envp[0] = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
envp[1] = NULL;
execve(args[0], args, envp);
fprintf(stderr, "exec(%s) error %d (%s)\n", args[0], errno, strerror(errno));
return -1;
}
gcc -Wall -o /usr/local/bin/nginx-runner nginx-runner.c
chgrp группа_твоего-юзера /usr/local/bin/nginx-runner
chmod 4750 /usr/local/bin/nginx-runner
nginx-runner (запустить nginx)
nginx-runner start (запустить nginx)
nginx-runner stop (остановить nginx)
nginx-runner reload
nginx-runner reopen
nginx-runner quit