В этом конкретном случае Zsh разделение слов определяется несколько иначе, чем разделение полей.
Рассмотрим prog a b c
, он будет передаваться с тремя аргументами независимо от того, как вы установите IFS
. Это разбиение слов .
Если вы выполните A="a b c"; prog $A
, будет передано три аргумента, если IFS
включает пробел, или один аргумент в противном случае. Это разбиение поля .
Определения здесь тонкие. Документ Zsh пытается сказать, что даже если вы отключите эту опцию, prog a b c
все равно будет получать отдельные аргументы (, чего люди всегда ожидают ).
Хорошо, ваш вопрос по-прежнему состоит из двух частей, поэтому я разобью его и отвечу на каждый вопрос отдельно:
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
должны быть достаточно безопасными по умолчанию, или, по крайней мере, так было в последний раз, когда я слышал.
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
), доступ к этому диалоговому окну не позволит вам печатать.