LINUX.ORG.RU
ФорумAdmin

user nice


0

0

В силу своей должности админу приходится ограничивать пользователей.
Отдельных юзверей приходится "мочить" ;).
Иногда возникает необходимость селективно "замочить" каких-то
пользователей так, чтобы уже при входе в систему они получали
пониженный приоритет. Стандартных средств для этого я не нашел,
(буду рад если они есть и кто-то мне их покажет)
поэтому написал два небольших скрипта выполняющих эту задачу.
Два, к сожалению, потому, что скрипты для bash-like и csh-like
шелов совмещаются плохо. Вот первый (для bash-like шелов):

======================================================================
# script to change default user nice for its logging in the system,
# run it in /etc/profile   for bash
#           /etc/zprofile  for zsh
# as:
# source <the script name>

# a logging in user
user_name=`id -un`

# default nice
default_nice=2

# some users may got special nice value,
# the nice is set in the 'case' statement below
new_nice=0

case $user_name in
    root) ;;
    good_user) ;;

    bad_user) new_nice=20 ;;

    *) new_nice=$default_nice ;;
esac

renice $new_nice $$ >/dev/null 2>&1

unset user_name
unset new_nice
unset default_nice
======================================================================

а вот второй (для csh-like шелов):

======================================================================
# script to change default user nice for its logging in the system,
# run it in /etc/csh.login   for tcsh
# as:
# source <the script name>

# a logging in user
set user_name=`id -un`

# default nice
set default_nice=2

# some users may got special nice value,
# the nice is set in the 'switch' statement below
set new_nice=0

switch ($user_name)
    case root:
    case good_user:
	breaksw

    case bad_user:
	set new_nice=20
	breaksw

    default:
	set new_nice=$default_nice
	breaksw
endsw

renice $new_nice $$ >&/dev/null

unset user_name
unset new_nice
unset default_nice
======================================================================

А можно написать одну утилиту выполняющую теже функции на С, добавить
в нее кучу сервиса (например, зависимость приоритетов от времени и даты,
конфигурационный файл).
★★

сразу не сообразил, достаточно одного скрипта, запускаемого в отдельном
шеле, в этом случае надо менять приоритет родительского процесса:

======================================================================
#!/bin/bash
# script to change default user nice for its logging in the system,
# run it in /etc/profile    for bash
#           /etc/zprofile   for zsh
#           /etc/csh.login  for tcsh
# a logging in user
user_name=`id -un`

# default nice
default_nice=2

# some users may got special nice value,
# the value is set in the 'case' statement below
new_nice=0

case $user_name in
    root) ;;
    good_user) ;;

    bad_user) new_nice=20 ;;

    *) new_nice=$default_nice ;;
esac

renice $new_nice $PPID >/dev/null 2>&1
======================================================================

написав несколько таких скриптов с разными nice value и добавив работы
крону в виде скрипта подсовывающего один из них скриптам выполяемым при
логине мы получим зависимость nice value от времени (естественно,
пользователь может оставить сессию с наибольшим приоритетом :).
Есть дырка -- посредством at daemon получить nice value не ниже 2,
которая закрывается.

filin ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.