Если Вы не будете корнем, то Вы не сможете установить VNC, таким образом, это не поможет.
Я думаю, что существует только две опции
Файл sudoers не будет работать так, или так мне кажется. Файл sudoers предназначен для предоставления определенного доступа к командам, а не указан аргументы, которые могут пойти с этой командой.
Создайте сценарий, который работает как root, и выполняет это:
/usr/bin/systemctl start database@
Создание сценария, такого как starawesomeApp, так что он выполняет следующее:
Script Executes: / usr / bin / systemctl запуска базы данных @ starawsesomapp
Дайте своим пользователям разрешение на выполнение файла Script.SH с / etc / sudoers.
scriptuser ALL=(ALL) NOPASSWD: /path/to/script.sh
Пользователь может работать так:
sh script.sh anotherawsesomeapp
Пример:
AppName=$1
/usr/bin/systemctl start database@$AppName;
if [ $? != "0" ]
then;
echo "$AppName could not be started. Are you using the right application name?";
fi
Предлагаемое решение, основанное на SUID
Вы можете создать указанный сценарий, который вызывает systemctl с помощью sudo. Сделайте скрипт владельцем root. Предоставьте SUID
права root, а также разрешения на чтение и выполнение группе администраторов баз данных (dba).
Только будьте осторожны, чтобы не предоставлять разрешение на запись группе или другим лицам, потому что таким образом они могут изменить сценарий и заставить его выполнить все, что предшествует sudo! Также убедитесь, что сценарий является пуленепробиваемым с точки зрения ввода.
$ cat >> start_database.sh sudo /usr/bin/systemctl start database@$1 (Ctrl+D)
Этот сценарий можно улучшить, проверив, действительно ли указан аргумент, и напечатав сообщение Usage: if not ..., также, поскольку это сценарий с SUID
, это было бы целесообразно проверить; чтобы избежать внедрения других команд после аргумента. Или, что еще лучше, разрешите в качестве входных данных только одну из упомянутых вами строк, связанных с приложением!
Затем вы должны убедиться, что разрешения для сценария строго следующие:
$ sudo chown root:dba start_database.sh $ sudo chmod u-x,g-w,o-rwx start_database.sh $ sudo chmod u+s,g+rx start_database.sh
Затем, чтобы проверить правильность разрешений:
$ls -la . . . -rwSr-x--- 1 root dba 35 Aug 2 19:11 start_database.sh . . .
Итак, напомним:
1. владельцем скрипта является root
2. файл может быть прочитан и выполнен членами группы dba
3. никто другой не сможет даже прочитать
это.
4. SUID
позволит пользователю, выполняющему сценарий, стать пользователем root , пока выполняется сценарий.
5. Таким образом, sudo не остановится на вводе пароля.
В любом случае, в системе с несколькими пользователями, будьте очень осторожны с SUID
, потому что это может оставить место для злоупотребления разрешениями.