Перейти к содержанию

Рекомендуемые сообщения

Опубликовано (изменено)

добрый день. подскажите, никак не найду, как запустить приложение (службу) (пример - privoxy) не от рута, а от другого пользователя, если в самом приложении такой настройки нет? в файле /etc/init.d/S24privoxy и других нет такой настройки... например systemd юнитах это  как-то так [service] USER=privoxy GROUP privoxy; а как это сделать в entware?

Изменено пользователем Hotery
Опубликовано (изменено)

privoxy --help

~ # chmod 666 /opt/etc/privoxy/config 
~ # 
~ # chmod 666 /opt/var/log/privoxy.log 
~ # 
~ # /opt/etc/init.d/S24privoxy start
 Starting privoxy...              done. 
~ # 
~ # /opt/etc/init.d/S24privoxy status
 Checking privoxy...              alive. 
~ # 
~ # ps | grep -v grep | grep priv
20658 test      3980 S    privoxy --user test /opt/etc/privoxy/config
~ # 

---

через обёртку

~ # 
~ # id test
uid=10(test) gid=10(test) groups=10(test)
~ # 
~ # /opt/etc/init.d/S24privoxy stop
 Checking privoxy...              alive. 
 Shutting down privoxy...              done. 
~ # 
~ # ps | grep -v grep | grep priv
~ # 
~ # privoxy-su /opt/etc/privoxy/config 
~ # 
~ # ps | grep -v grep | grep priv
21646 test      3844 S    privoxy /opt/etc/privoxy/config
~ # 
~ # /opt/etc/init.d/S24privoxy status
 Checking privoxy...              alive. 
~ # 
~ # cat /opt/bin/privoxy-su 
#!/opt/bin/sh

exec su test -p -c "privoxy $1 $2 $3 $4"
~ # 

===

чтоб два раза не вставать - обратный финт ушами...

/opt $ id
uid=10000(tester) gid=10000(tester) groups=10000(tester)
/opt $ 
/opt $ /opt/etc/init.d/S24privoxy status
 Checking privoxy...              dead. 
/opt $ 
/opt $ privoxy-su /opt/etc/privoxy/config
/opt $ 
/opt $ /opt/etc/init.d/S24privoxy status
 Checking privoxy...              alive. 
/opt $ 
~ # cat /opt/bin/privoxy-su 
#!/opt/bin/sh -x

exec echo keenetic | su -p -m root -c "/opt/sbin/privoxy $1 $2 $3 $4"
~ # 

 

Изменено пользователем TheBB
add2
Опубликовано

спасибо! чтот застрял...

cat /opt/usr/sbin/privoxy-su

#!/opt/bin/sh

su privoxy -p -c "privoxy $1 $2 $3 $4"

так запускается: privoxy-su /opt/etc/privoxy (процесс в ps w есть)

а если в /opt/etc/init.d/S24privoxy написать PROCS=privoxy-su - не запускается

~ # /opt/etc/init.d/S24privoxy start
 Starting privoxy-su...              failed.

кажется оно не уходит в background... присобачил перед "su ..." sudo -b" и заработало но наверно как-то криво. как правильно?

 

Опубликовано (изменено)
  В 19.08.2021 в 19:18, Hotery сказал:

как правильно?

Показать  

правильно - через ключ "--user"

---

~ # 
~ # /opt/etc/init.d/S24privoxy start
 Starting privoxy...              done. 
~ # 
~ # /opt/etc/init.d/S24privoxy status
 Checking privoxy...              alive. 
~ # 
~ # ps | grep -v grep | grep priv
15059 root      3844 S    privoxy /opt/etc/privoxy/config
~ # 
~ # /opt/etc/init.d/S24privoxy stop
 Checking privoxy...              alive. 
 Shutting down privoxy...              done. 
~ # 
~ # chown -R privoxy:privoxy /opt/etc/privoxy
~ # 
~ # chown privoxy:privoxy /opt/var/log/privoxy.log 
~ # 
~ # /opt/etc/init.d/S24privoxy start
 Starting privoxy...              done. 
~ # 
~ # /opt/etc/init.d/S24privoxy status
 Checking privoxy...              alive. 
~ # 
~ # ps | grep -v grep | grep priv
15164 privoxy   3980 S    privoxy --user privoxy /opt/etc/privoxy/config
~ #

===

~ # start-stop-daemon 
BusyBox v1.33.1 (2021-07-08 20:18:22 UTC) multi-call binary.

Usage: start-stop-daemon [OPTIONS] [-S|-K] ... [-- ARGS...]

Search for matching processes, and then
-K: stop all matching processes
-S: start a process unless a matching process is found

Process matching:
	-u USERNAME|UID	Match only this user's processes
	-n NAME		Match processes with NAME
			in comm field in /proc/PID/stat
	-x EXECUTABLE	Match processes with this command
			in /proc/PID/cmdline
	-p FILE		Match a process with PID from FILE
	All specified conditions must match
-S only:
	-x EXECUTABLE	Program to run
	-a NAME		Zeroth argument
	-b		Background
	-c USER[:[GRP]]	Change user/group
	-m		Write PID to pidfile specified by -p
-K only:
	-s SIG		Signal to send
	-t		Match only, exit with 0 if found
Other:
	-q		Quiet
~ #

 

Изменено пользователем TheBB
add2
Опубликовано
  В 19.08.2021 в 19:18, Hotery сказал:

спасибо! чтот застрял...

Показать  

Это всего лишь вариации на тему...

~ # /opt/etc/init.d/S20privoxy start
starting privoxy
~ # /opt/etc/init.d/S20privoxy status
privoxy already running
~ # /opt/etc/init.d/S20privoxy restart
stopping privoxy
starting privoxy
~ # /opt/etc/init.d/S20privoxy check
privoxy already running
~ # ps | grep -v grep | grep priv
31153 privoxy   3844 S    /opt/sbin/privoxy --pidfile /opt/tmp/privoxy.pid /opt/etc/privoxy/config
~ # /opt/etc/init.d/S20privoxy stop
stopping privoxy
~ # /opt/etc/init.d/S20privoxy status
privoxy is not running
~ # 
~ # 
~ # cat /opt/etc/init.d/S20privoxy 
#!/bin/sh

PATH=/opt/sbin:/opt/bin

PIDFILE="/opt/tmp/privoxy.pid"
PROGRAM="privoxy"
PROGRAM_BIN="/opt/sbin/$PROGRAM"
USER="$PROGRAM"

OK="$PROGRAM already running"
NO="$PROGRAM is not running"

status_check ()
{
	[ -f $PIDFILE ] && [ -d /proc/"$(pidof $PROGRAM)" ]
}

start()
{
	su "$USER" -m -p -c "$PROGRAM_BIN --pidfile $PIDFILE /opt/etc/privoxy/config" && echo starting $PROGRAM
}

stop()
{
	kill "$(pidof $PROGRAM)" && echo stopping $PROGRAM
}
case "$1" in
	start)
		if status_check
		then
			echo $OK
		else
			start
		fi
		;;
	stop)
		if status_check
		then
			stop
		else
			echo $NO
		fi
		;;
	check|status)
		if status_check
		then
			echo $OK
		else
			echo $NO
		fi
		;;

	restart)
		stop
		sleep 3
		start
		;;
	*)
		echo "Usage: $0 {start|stop|restart|status}"
		;;
esac
~ #

 

Опубликовано

Продолжим глумиться над пользователями, группами, правами доступа, запуском... )))

Для наглядности, запуск с отладкой - "#!/opt/bin/sh -x" (прошивочный sh так не умеет)

USER=GROUP=privoxy

  Показать контент

USER=GROUP=nobody

~ # 
~ # sed -i -e 's,^USER="privoxy",USER="nobody",' /opt/etc/init.d/S24privoxy 
~ # 
  Показать контент

USER=GROUP=www

~ # 
~ # sed -i -e 's,nobody,www,' /opt/etc/init.d/S24privoxy 
~ # 
  Показать контент
~ # 
~ # cat /opt/etc/init.d/S24privoxy 
#!/opt/bin/sh -x

USER="www"

ENABLED=yes
PROCS=privoxy

. /opt/etc/init.d/protector

ARGS="--pidfile $PIDFILE --user $USER $CONFDIR/config"
PREARGS=""
DESC=$PROCS
PATH=/opt/sbin:/opt/bin

. /opt/etc/init.d/rc.func

[ "$ACTION" = "stop" ] && rm -rf "$HOMEDIR"
~ # 
~ #
~ # 
~ # cat /opt/etc/init.d/protector 
# test protector

protect() {

local USER="$USER"
local GROUP="$USER"
HOMEDIR="/opt/tmp/$PROCS"
CONFDIR="$HOMEDIR/conf"
LOGDIR="$HOMEDIR/log"
LOGFILE="$LOGDIR/$PROCS.log"
PIDDIR="$HOMEDIR/run"
PIDFILE="$PIDDIR/$PROCS.pid"

    [ -d "$HOMEDIR" ] || {
        mkdir -p "$HOMEDIR"
        chown "$USER":"$GROUP" "$HOMEDIR"
    }

    [ -d "$CONFDIR" ] || {
        mkdir -p "$CONFDIR"
        cp -R /opt/etc/"$PROCS"/* "$CONFDIR"/
        chown -R "$USER":"$GROUP" "$CONFDIR"
    }

    [ -d "$LOGDIR" ] || {
        mkdir -p "$LOGDIR"
        touch "$LOGFILE"
        chown -R "$USER":"$GROUP" "$LOGDIR"
        chmod 644 "$LOGFILE"
    }

    [ -d "$PIDDIR" ] || {
        mkdir -p "$PIDDIR"
        chown -R "$USER":"$GROUP" "$PIDDIR"
    }
}

protect
~ # 

! не руководство к действию, а информация к размышлению !

Если предусмотрено конфигами (php-fpm, nginx, ...) или ключами (privixy, ...), этим и надо пользоваться.

  • 1 год спустя...
Опубликовано
~ # ls -1 /opt/lib/opkg/info/*.control | wc -l
751
~ #

"ахтунг", 751 файл, откуда стока набралось...

~ # 
~ # cat /opt/etc/passwd-draft 
root:$1$qIcnZlor$aUMGvS6VL7brlpSxLZO1y0:0:0:Root:/opt/root:/opt/bin/sh
nobody:*:65534:65534:user "nobody"::/opt/bin/nologin
~ # 
~ # cat /opt/etc/group-draft 
root:*:0:root
nobody:*:65534:nobody
~ #

юзверей и групп маловато будет для такого

~ # 
~ # time sh ./ug.sh 
	Adding a new ntp group with an ID 123
	Adding a new ntp user with an ID 123
	Adding a new domoticz group with an ID 6144
	Adding a new domoticz user with an ID 6144
	Adding a new git group with an ID 382
	Adding a new git user with an ID 382
	Adding a new icecast group with an ID 87
	Adding a new icecast user with an ID 87
	Adding a new mosquitto group with an ID 200
	Adding a new mosquitto user with an ID 200
	The mosquitto group already exists
	The mosquitto user already exists
	Adding a new mpd group with an ID 65536
	Adding a new mpd user with an ID 65536
	Adding a new sshd group with an ID 22
	Adding a new sshd user with an ID 22
	Adding a new pulse group with an ID 51
	Adding a new pulse user with an ID 51
	Adding a new transmission group with an ID 224
	Adding a new transmission user with an ID 224
real	0m 1.22s
user	0m 0.71s
sys	0m 0.42s
~ # 

шустро, однако.

~ # 
~ # cat /opt/etc/passwd-draft 
root:$1$qIcnZlor$aUMGvS6VL7brlpSxLZO1y0:0:0:Root:/opt/root:/opt/bin/sh
nobody:*:65534:65534:user "nobody"::/opt/bin/nologin
ntp:x:123:123:user "ntp"::/opt/bin/false
domoticz:x:6144:6144:user "domoticz"::/opt/bin/false
git:x:382:382:user "git"::/opt/bin/false
icecast:x:87:87:user "icecast"::/opt/bin/false
mosquitto:x:200:200:user "mosquitto"::/opt/bin/false
mpd:x:65536:65536:user "mpd"::/opt/bin/false
sshd:x:22:22:user "sshd"::/opt/bin/false
pulse:x:51:51:user "pulse"::/opt/bin/false
transmission:x:224:224:user "transmission"::/opt/bin/false
~ # 
~ # cat /opt/etc/group-draft 
root:*:0:root
nobody:*:65534:nobody
ntp:x:123:
domoticz:x:6144:
git:x:382:
icecast:x:87:
mosquitto:x:200:
mpd:x:65536:
sshd:x:22:
pulse:x:51:
transmission:x:224:
~ # 

ну, вот, другое дело.

и исчё разок:

~ # 
~ # time sh ./ug.sh 
	The ntp group already exists
	The ntp user already exists
	The domoticz group already exists
	The domoticz user already exists
	The git group already exists
	The git user already exists
	The icecast group already exists
	The icecast user already exists
	The mosquitto group already exists
	The mosquitto user already exists
	The mosquitto group already exists
	The mosquitto user already exists
	The mpd group already exists
	The mpd user already exists
	The sshd group already exists
	The sshd user already exists
	The pulse group already exists
	The pulse user already exists
	The transmission group already exists
	The transmission user already exists
real	0m 1.08s
user	0m 0.65s
sys	0m 0.36s
~ # 

больше не хотить...

велокостыль:

  Показать контент

 

  • 3 месяца спустя...
Опубликовано

я так запустил. добавил sudo -u nobody -g nobody и права выдал на каталоги.

#!/bin/sh

ENABLED=yes
PROCS=redis-server
ARGS="/opt/etc/redis.conf"
PREARGS="sudo -u nobody -g nobody"
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

. /opt/etc/init.d/rc.func

 

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.