Как запуск этого скрипта bash от имени sudo выполняет содержимое от имени пользователя root

Содержимое /etc/xdg/autostartвыполняется после входа пользователя в систему графически. Возможно, вы захотите начатьx11vncс диспетчера отображения (, который вызывает приветствие при входе в систему ). В зависимости от вашего выбора диспетчера отображения вам необходимо изменить

  • /etc/gdm/Init/:0для ГДМ,
  • /etc/kde4/kdm/Xsetupдля КДМ,
  • a (новый )файл/etc/lightdm/lightdm.conf.d/(фактический файл отличается )для LightDM

. Я предполагаю, что вы придерживаетесь GDM. Вызовите x11vncс опцией -auth. Если повезет, x11vnc -auth guess -display :0 &должно хватить. Не забудьте амперсанд, иначе диспетчер дисплея будет ждать завершения x11vnc.

Для VNC с LightDM:вы можете попробовать раздел конфигурации внутреннего VNC-сервера, подобный этому:

[VNCServer]
enabled=true
command=/usr/bin/x11vnc -auth guess -display :0

Этот контент должен быть помещен в новый файл, т.е. /etc/lightdm/lightdm.conf.d/vncserver.conf.

-1
01.12.2019, 22:02
2 ответа
  1. The user executing the sudo command must also have execute permission to the file

Утверждение 1 неверно. Пользователю, выполняющему sudo, не нужно иметь разрешения на выполнение сценария.

  1. Only the file will execute as root and not the commands within

Утверждение 2 также неверно. Все команды в сценарии, вызываемые пользователем sudo, будут выполняться от имени пользователя sudo.

Вот простой тестовый скрипт, который я запустил, чтобы показать идентификатор пользователя, от имени которого выполняется скрипт/команда.

/tmp $ id
uid=1000(danesh) gid=1000(danesh) 

/tmp $ ls -l test.sh 
-rwxr-xr-x 1 danesh danesh 24 Nov 22 10:48 test.sh*

/tmp $./test.sh 
uid=1000(danesh) gid=1000(danesh) 

/tmp $ sudo./test.sh
[sudo] password for danesh: 
uid=0(root) gid=0(root) groups=0(root)

/tmp $ sudo chown root:root test.sh
/tmp $ sudo chmod 770 test.sh
/tmp $ ls -l test.sh
-rwxrwx--- 1 root root 24 Nov 22 10:48 test.sh*

/tmp $./test.sh
fish: The file “./test.sh” is not executable by this user

/tmp [126] $ sudo./test.sh
uid=0(root) gid=0(root) groups=0(root)


/tmp $ cat test.sh 
#!/usr/bin/env bash
# show the user executing this script
id

Надеюсь, это поможет.

5
28.01.2020, 05:06

Два утверждения

The user executing the sudo command must also have execute permission to the file. Only the file will execute as root and not the commands within.

Совершенно неправы.

Кроме того, сценарии оболочки не требуют выполнения. Execute только упрощает их использование, так как тогда #!вверху используется для определения интерпретатора. Однако вы можете напрямую указать интерпретатору запустить скрипт. Поэтому вам нужно только разрешение на чтение.

3
28.01.2020, 05:06

Теги

Похожие вопросы