Прекратить запрашивать пароль администратора/sudo в диалоговом окне настроек печати

В этом конкретном случае Zsh разделение слов определяется несколько иначе, чем разделение полей.

Рассмотрим prog a b c, он будет передаваться с тремя аргументами независимо от того, как вы установите IFS. Это разбиение слов .

Если вы выполните A="a b c"; prog $A, будет передано три аргумента, если IFSвключает пробел, или один аргумент в противном случае. Это разбиение поля .

Определения здесь тонкие. Документ Zsh пытается сказать, что даже если вы отключите эту опцию, prog a b cвсе равно будет получать отдельные аргументы (, чего люди всегда ожидают ).

0
10.11.2019, 23:47
1 ответ

Хорошо, ваш вопрос по-прежнему состоит из двух частей, поэтому я разобью его и отвечу на каждый вопрос отдельно:

1. Политика и доступ CUPS

CUPS — это де-факто сервер печати в Linux, обеспечивающий все типы печати :прямое подключение по кабелю USB, печать по локальной сети, а также доступ к глобальной сети. Следовательно, он поставляется с множеством параметров конфигурации, многие из которых относятся к безопасности и управлению системными политиками. Вдаваться в эти запутанные детали на данном этапе было бы контрпродуктивно, так как ваша главная цель сейчас, по сути, состоит в том, чтобы вам разрешили печатать на вашем локальном (напрямую подключенном принтере или на принтере вашей локальной сети ), которым вы сами владеете и к которому имеете доступ, без необходимости вводить пароль.

Если у вас установлено cups(и в наши дни оно включено в подавляющее большинство дистрибутивов Linux ), и у вас запущена служба с (, если вы видите какие-либо машины в system-print-settingsто он у вас уже запущен):

sudo systemctl start cups

затем, если вы перейдете наhttp ://localhost :631/ , вы увидите страницу администрирования сервера CUPS, которая, по сути, представляет собой -доступный через Интернет графический интерфейс для конфигурации CUPS, который по умолчанию в /etc/cups/cupsd.confне будет наложено никаких ограничений на его доступ.

[...]
Browsing On
BrowseLocalProtocols dnssd
DefaultAuthType Basic
WebInterface Yes
<Location />
  # Restrict access to the server...
  Order allow,deny
</Location>
[...]

Если вы посмотрите дальше в том же файле cupsd.conf, вы увидите, что в других местах будут ограничения, например,:

<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
</Location>

, и если вы наберете http://localhost:631/admin/conf, вам будет предложено ввести пароль.

ТЕПЕРЬ самое главное:CUPS не считаетrootилиsudo**какими-либо особенными, и не факт, что они принадлежат к этим группам, дает им доступ к серверу конфигурация**

Обозначение @SYSTEMв /etc/cups/cupsd.confявляется ссылкой на значение, присутствующее в /etc/cups/cups-files.conf. Обычно (, если не изменено непосредственно администратором ),он скажет:

sudo grep -i System /etc/cups/cups-files.conf 
# Administrator user group, used to match @SYSTEM in cupsd.conf policy rules...
SystemGroup lpadmin

и эта группа lpadmin, присутствующая в вашей системе, позволяет пользователю (, включая root), настраивать CUPS. Если вы запустите groupsкак root, вы увидите, что группа lpadminвключена туда вместе с root.

Таким образом, чтобы предоставить любому системному пользователю доступ к страницам конфигурации CUPS, вам необходимо убедиться, что они являются частью lpadminили любого другого обозначения группы, которое вы найдете соответствующим @SYSTEMв cups-files.conf.

Очевидно, что после добавления пользователя в эту группу вам может потребоваться перезапустить как службу cups, так и сеанс пользователя, так что вы можете перезагрузиться.

Это позволит пользователю, не -sudo, устанавливать параметры принтера, печатать и отправлять/отменять задания на любые имеющиеся у вас принтеры. Другие настройки по умолчанию в cupsd.confдолжны быть достаточно безопасными по умолчанию, или, по крайней мере, так было в последний раз, когда я слышал.

2. Print Settingsиsystem-config-printer

Несмотря на то, что описанное выше дало вам доступ к параметрам конфигурации принтера в http://localhost:631/*в качестве пользователя, не являющегося пользователем root -, пока этот пользователь находится в группе lpadmin, он, скорее всего, попросит вас ввести пароль., и что более важно для вашего конкретного вопроса это не повлияет ни на что, связанное с диалогом system-config-printer.

Теперь я признаю, что эта часть была намного сложнее, и пока я играл с sudoersи групповыми разрешениями для пользователя, не являющегося -sudo, я предоставлял мне различные формы доступа, каждый последующий диалог, который я открывал, вызывал запрос пароля., так, например, если я нажму «Настройки», я увижу запрос пароля, и если я просто оставлю его в фоновом режиме, в конечном итоге откроется диалоговое окно настроек, и изменение большинства параметров конфигурации оказалось либо невозможным, либо очень нефункциональным.

Затем я изучил, как осуществляется управление параметрами политики для этого диалогового окна, и в конце концов нашел соответствующий файл.

Все, что нужно, это следующая строка кода(убедитесь, что у вас установлено gawkпри запуске, чтобы выполнить замену на месте ), чтобы никогда не видеть эту кнопку unlockили запрос пароля при запускеsystem-config-printer:

sudo gawk -i inplace '{gsub((/auth_admin|auth_admin_keep/),"yes"); print }' /usr/share/polkit-1/actions/org.opensuse.cupspkhelper.mechanism.policy 

Он заменяет все значения в файле политики этого диалогового окна, которые запрашивают auth_adminили auth_admin_keep, на yes, так что вы получите следующие настройки и их измененный уровень доступа внутри файла политики:

$ sudo grep -e "action id" -e  "description xml:lang=\"en\"" -e "yes" /usr/share/polkit-1/actions/org.opensuse.cupspkhelper.mechanism.policy


 <action id="org.opensuse.cupspkhelper.mechanism.server-settings">
    <description xml:lang="en">Get/Set server settings</description>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
  <action id="org.opensuse.cupspkhelper.mechanism.devices-get">
    <description xml:lang="en">Get list of available devices</description>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
  <action id="org.opensuse.cupspkhelper.mechanism.printer-set-default">
    <description xml:lang="en">Set a printer as default printer</description>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
  <action id="org.opensuse.cupspkhelper.mechanism.printer-enable">
    <description xml:lang="en">Enable/Disable a printer</description>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
  <action id="org.opensuse.cupspkhelper.mechanism.printer-local-edit">
    <description xml:lang="en">Add/Remove/Edit a local printer</description>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
  <action id="org.opensuse.cupspkhelper.mechanism.printer-remote-edit">
    <description xml:lang="en">Add/Remove/Edit a remote printer</description>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
  <action id="org.opensuse.cupspkhelper.mechanism.class-edit">
    <description xml:lang="en">Add/Remove/Edit a class</description>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
  <action id="org.opensuse.cupspkhelper.mechanism.job-edit">
    <description xml:lang="en">Restart/Cancel/Edit a job</description>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
  <action id="org.opensuse.cupspkhelper.mechanism.job-not-owned-edit">
    <description xml:lang="en">Restart/Cancel/Edit a job owned by another user</description>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
  <action id="org.opensuse.cupspkhelper.mechanism.all-edit">
    <description xml:lang="en">Change printer settings</description>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>
  <action id="org.opensuse.cupspkhelper.mechanism.printeraddremove">
    <description xml:lang="en">Add/Remove/Edit a printer</description>
      <allow_any>yes</allow_any>
      <allow_inactive>yes</allow_inactive>
      <allow_active>yes</allow_active>

Теперь вам нужно понять, что изменение параметра политики в Части 2 не окажет никакого влияния на CUPS, если не разрешить доступ через то, что я написал в Части 1. На самом деле, если cupsне запущен или его доступ ограничен (даже получить права root, выгнав его из lpadmin), доступ к этому диалоговому окну не позволит вам печатать.

0
28.01.2020, 03:08

Теги

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