Когда использовать pkexec против gksu / gksudo?

Существует два общих способа запуска приложений графически как root (или, в более общем плане, как другой пользователь). Такие программы, как gksu , gksudo и kdesudo являются графическими интерфейсами для sudo . Напротив, pkexec является графическим интерфейсом PolicyKit .

При ручном запуске программ как root (или как другой пользователь без полномочий root), каковы преимущества / недостатки (если они есть) использования pkexec по сравнению с более традиционным методом использования интерфейса sudo ?

PolicyKit более настраивается, хотя pkexec не использует эту конфигурацию. Кроме того, pkexec показывает пользователю полный путь к программе, которая будет запущена, чтобы пользователь немного более уверен, что произойдет. Так называемые «политики» PolicyKit могут использоваться для установки дополнительных настроек. Например, следует ли помнить пароль.

Что-то я получил от руководства pkexec :

Окружающая среда, с которой PROGRAM будет работать, будет установлена ​​в минимальную известную и безопасную среду, чтобы избежать инъекции кода через LD_LIBRARY_PATH или аналогичные механизмы. Кроме того, переменная среды PKEXEC_UID устанавливается на идентификатор пользователя процесса, вызывающего pkexec. В результате pkexec не позволит вам запускать, например, приложения X11 в качестве другого пользователя, поскольку переменная среды $ DISPLAY не установлена.

Дополнительная информация о политиках или определениях действий из руководства pkexec :

  To specify what kind of authorization is needed to execute the program /usr/bin/pk-example-frobnicate as another user, simply write an action definition file like this <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> <policyconfig> <vendor>Examples for the PolicyKit Project</vendor> <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url> <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate"> <description>Run the PolicyKit example program Frobnicate</description> <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description> <message>Authentication is required to run the PolicyKit example program Frobnicate</message> <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate</message> <icon_name>audio-x-generic</icon_name> <defaults> <allow_any>no</allow_any> <allow_inactive>no</allow_inactive> <allow_active>auth_self_keep</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate> </action> </policyconfig> and drop it in the /usr/share/polkit-1/actions directory under a suitable name (eg matching the namespace of the action). Note that in addition to specifying the program, the authentication message, description, icon and defaults can be specified. For example, for the action defined above, the following authentication dialog will be shown: [IMAGE][2] +----------------------------------------------------------+ | Authenticate [X] | +----------------------------------------------------------+ | | | [Icon] Authentication is required to run the PolicyKit | | example program Frobnicate | | | | An application is attempting to perform an | | action that requires privileges. Authentication | | is required to perform this action. | | | | Password: [__________________________________] | | | | [V] Details: | | Command: /usr/bin/pk-example-frobnicate | | Run As: Super User (root) | | Action: org.fd.pk.example.pkexec.run-frobnicate | | Vendor: Examples for the PolicyKit Project | | | | [Cancel] [Authenticate] | +----------------------------------------------------------+ If the user is using the da_DK locale, the dialog looks like this: [IMAGE][3] +----------------------------------------------------------+ | Autorisering [X] | +----------------------------------------------------------+ | | | [Icon] Autorisering er påkrævet for at afvikle | | PolicyKit eksemplet Frobnicate | | | | Et program forsøger at udføre en handling der | | kræver privilegier. Autorisering er påkrævet. | | | | Kodeord: [___________________________________] | | | | [V] Detaljer: | | Bruger: Super User (root) | | Program: /usr/bin/pk-example-frobnicate | | Handling: org.fd.pk.example.pkexec.run-frobnicate | | Vendor: Examples for the PolicyKit Project | | | | [Annullér] [Autorisering] | +----------------------------------------------------------+ Note that pkexec does no validation of the ARGUMENTS passed to PROGRAM. In the normal case (where administrator authentication is required every time pkexec is used), this is not a problem since if the user is an administrator he might as well just run pkexec bash to get root. However, if an action is used for which the user can retain authorization (or if the user is implicitly authorized), such as with pk-example-frobnicate above, this could be a security hole. Therefore, as a rule of thumb, programs for which the default required authorization is changed, should never implicitly trust user input (eg like any other well-written suid program). по  To specify what kind of authorization is needed to execute the program /usr/bin/pk-example-frobnicate as another user, simply write an action definition file like this <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> <policyconfig> <vendor>Examples for the PolicyKit Project</vendor> <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url> <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate"> <description>Run the PolicyKit example program Frobnicate</description> <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description> <message>Authentication is required to run the PolicyKit example program Frobnicate</message> <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate</message> <icon_name>audio-x-generic</icon_name> <defaults> <allow_any>no</allow_any> <allow_inactive>no</allow_inactive> <allow_active>auth_self_keep</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate> </action> </policyconfig> and drop it in the /usr/share/polkit-1/actions directory under a suitable name (eg matching the namespace of the action). Note that in addition to specifying the program, the authentication message, description, icon and defaults can be specified. For example, for the action defined above, the following authentication dialog will be shown: [IMAGE][2] +----------------------------------------------------------+ | Authenticate [X] | +----------------------------------------------------------+ | | | [Icon] Authentication is required to run the PolicyKit | | example program Frobnicate | | | | An application is attempting to perform an | | action that requires privileges. Authentication | | is required to perform this action. | | | | Password: [__________________________________] | | | | [V] Details: | | Command: /usr/bin/pk-example-frobnicate | | Run As: Super User (root) | | Action: org.fd.pk.example.pkexec.run-frobnicate | | Vendor: Examples for the PolicyKit Project | | | | [Cancel] [Authenticate] | +----------------------------------------------------------+ If the user is using the da_DK locale, the dialog looks like this: [IMAGE][3] +----------------------------------------------------------+ | Autorisering [X] | +----------------------------------------------------------+ | | | [Icon] Autorisering er påkrævet for at afvikle | | PolicyKit eksemplet Frobnicate | | | | Et program forsøger at udføre en handling der | | kræver privilegier. Autorisering er påkrævet. | | | | Kodeord: [___________________________________] | | | | [V] Detaljer: | | Bruger: Super User (root) | | Program: /usr/bin/pk-example-frobnicate | | Handling: org.fd.pk.example.pkexec.run-frobnicate | | Vendor: Examples for the PolicyKit Project | | | | [Annullér] [Autorisering] | +----------------------------------------------------------+ Note that pkexec does no validation of the ARGUMENTS passed to PROGRAM. In the normal case (where administrator authentication is required every time pkexec is used), this is not a problem since if the user is an administrator he might as well just run pkexec bash to get root. However, if an action is used for which the user can retain authorization (or if the user is implicitly authorized), such as with pk-example-frobnicate above, this could be a security hole. Therefore, as a rule of thumb, programs for which the default required authorization is changed, should never implicitly trust user input (eg like any other well-written suid program). по  To specify what kind of authorization is needed to execute the program /usr/bin/pk-example-frobnicate as another user, simply write an action definition file like this <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd"> <policyconfig> <vendor>Examples for the PolicyKit Project</vendor> <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url> <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate"> <description>Run the PolicyKit example program Frobnicate</description> <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description> <message>Authentication is required to run the PolicyKit example program Frobnicate</message> <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate</message> <icon_name>audio-x-generic</icon_name> <defaults> <allow_any>no</allow_any> <allow_inactive>no</allow_inactive> <allow_active>auth_self_keep</allow_active> </defaults> <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate> </action> </policyconfig> and drop it in the /usr/share/polkit-1/actions directory under a suitable name (eg matching the namespace of the action). Note that in addition to specifying the program, the authentication message, description, icon and defaults can be specified. For example, for the action defined above, the following authentication dialog will be shown: [IMAGE][2] +----------------------------------------------------------+ | Authenticate [X] | +----------------------------------------------------------+ | | | [Icon] Authentication is required to run the PolicyKit | | example program Frobnicate | | | | An application is attempting to perform an | | action that requires privileges. Authentication | | is required to perform this action. | | | | Password: [__________________________________] | | | | [V] Details: | | Command: /usr/bin/pk-example-frobnicate | | Run As: Super User (root) | | Action: org.fd.pk.example.pkexec.run-frobnicate | | Vendor: Examples for the PolicyKit Project | | | | [Cancel] [Authenticate] | +----------------------------------------------------------+ If the user is using the da_DK locale, the dialog looks like this: [IMAGE][3] +----------------------------------------------------------+ | Autorisering [X] | +----------------------------------------------------------+ | | | [Icon] Autorisering er påkrævet for at afvikle | | PolicyKit eksemplet Frobnicate | | | | Et program forsøger at udføre en handling der | | kræver privilegier. Autorisering er påkrævet. | | | | Kodeord: [___________________________________] | | | | [V] Detaljer: | | Bruger: Super User (root) | | Program: /usr/bin/pk-example-frobnicate | | Handling: org.fd.pk.example.pkexec.run-frobnicate | | Vendor: Examples for the PolicyKit Project | | | | [Annullér] [Autorisering] | +----------------------------------------------------------+ Note that pkexec does no validation of the ARGUMENTS passed to PROGRAM. In the normal case (where administrator authentication is required every time pkexec is used), this is not a problem since if the user is an administrator he might as well just run pkexec bash to get root. However, if an action is used for which the user can retain authorization (or if the user is implicitly authorized), such as with pk-example-frobnicate above, this could be a security hole. Therefore, as a rule of thumb, programs for which the default required authorization is changed, should never implicitly trust user input (eg like any other well-written suid program). 

С помощью sudo вы можете установить для каждого пользователя и для каждой политики программ, чтобы сохранить или сбросить среду звонящих в контексте sudo. Политика env_reset устанавливается по умолчанию.

Вы не можете запускать графические приложения через pkexec без явной настройки для этого. Поскольку это просто результат сброса среды, это, очевидно, верно и для sudo. Однако обратите внимание, что ни pkexec, ни sudo не могут предотвратить вредоносное приложение, выполняемое как root, чтобы получить всю необходимую информацию от диспетчеров дисплея или файла X11-файла cookie пользователей. Последний, оба или аналогичный, может даже выполняться не root-приложениями в зависимости от обстоятельств.

Sudo не требует явных списков пользователей. Листинг любой группы пользователей или даже установка разрешений для всех пользователей в целом может быть выполнена. Директива target_pw позволяет этим пользователям проходить аутентификацию с учетными данными пользователя в контексте whoose, которым они хотят запустить приложение, то есть root. Кроме того, можно использовать одинаково традиционную программу su (su / gtksu / kdesu), чтобы сделать то же самое без специальной настройки.

sudo также позволяет пользователю оставаться аутентифицированным в течение определенного времени. Опция называется timeout, настраивается глобально, для каждого пользователя или для каждого приложения. Аутентификация может быть сохранена за каждый пользователь или глобально для каждого пользователя.

Хотя pkexec не может проверять ARGUMENTS, переданные в PROGRAM, sudo действительно имеет эту функцию. Принято, хотя, вы можете легко испортить это, и это обычно не делается.

Вы можете немного настроить, как вы хотите, чтобы программы запускались через pkexec: значок, текст для отображения, вы даже можете иметь материал локализации и все такое. В зависимости от обстоятельств это может быть действительно здорово. Ужасно, однако, что кто-то почувствовал необходимость изобретать колесо для этой функции. Это, вероятно, было бы чем-то помещенным в графические обертки gtksudo / kdesu.

Policykit – это только централизованная структура конфигурации. К сожалению, не очень. XML-файлы PKs намного сложнее, чем что-либо, что приложение может предоставить изначально двоичные файлы. И никто не будет так раскован, чтобы использовать двоичный файл … о, gconf … неважно.

Несколько вещей, как pkexec отличается от sudo и его интерфейсов:

  1. Вы не можете запускать графические приложения через pkexec без явной настройки для этого.
  2. Вы можете немного настроить, как вы хотите, чтобы программы запускались через значок pkexec : значок, текст для отображения, следует ли запоминать пароль или нет, разрешать ли его выполнять графически и еще несколько.
  3. Любой может запустить «Запуск от имени» суперпользователя (при условии, что он может аутентифицироваться как таковой), при этом вы должны быть указаны в файле sudoers как admin .
  4. gksudo блокирует клавиатуру, мышь и фокус при запросе пароля, pkexec этого не делает. В обоих случаях нажатия клавиш носят снисходительный характер .
  5. С pkexec вы работаете в немного более дезинфицированной среде.

Попробуйте, например:

 cd /etc/init.d sudo cat README # and now the same with pkexec pkexec cat README # nice, huh?