Как переключить группу без запроса пароля?

В linux есть два файла, в которых указаны определения групп. Один из них – /etc/group а другой – /etc/gshadow . Я хочу, чтобы мой обычный пользователь мог переключать группу при запуске процесса без ввода паролей. Важно, чтобы пользователь не был членом этой группы.

Мне удалось это сделать, установив эти два файла следующим образом:

 # cat /etc/group | grep audio audio:x:29:pulse # cat /etc/gshadow | grep audio audio:*::pulse,morfik 

И теперь пользователь morfik может запустить, например, эту команду:

 $ /usr/bin/sg audio -c "pulseaudio -D" $ ps -eo user,group,args | grep pulse morfik audio pulseaudio -D morfik audio /usr/lib/pulseaudio/pulse/gconf-helper 

Но проблема с grpck , которая дает следующий результат:

 # grpck 'morfik' is a member of the 'audio' group in /etc/gshadow but not in /etc/group 

Если я удалил пользователя из группы audio из файла /etc/gshadow , а затем попытался запустить процесс, я бы получил следующую ошибку:

 sg[2378]: Failed to crypt password with previous salt of group 'audio' 

Поэтому на самом деле возникает вопрос: следует ли беспокоиться о сообщении grpck ? Возможно, есть ли способ исправить ошибку sg , чтобы все были счастливы?

sg позволяет переключать основную группу на другую дополнительную группу (то есть группу, для которой пользователь указан в /etc/group ) без предоставления какой-либо аутентификации, или для переключения первичной группы на группу, указанную в /etc/group путем ввода пароль, указанный в /etc/group или /etc/gshadow . Таким образом, использование sg , «без ввода паролей» и «не должно быть членом этой группы», противоречиво.

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

Конфигурация, которую вы пытались, с пользователем, указанным в gshadow но не в group , не поддерживается. Тот факт, что он дал что-то близко к тому, что вы хотели, на самом деле кажется для меня ошибкой – gshadow не должен предоставлять членство в группах, которые не указаны в group . В руководстве указано: «Вы должны использовать тот же список пользователей, что и в /etc/group ». Если вы нарушите эту рекомендацию, не рассчитывайте на разумное или переносное поведение.

Если вы хотите разрешить пользователю запускать определенную команду в качестве группы, с протоколированием вы можете использовать sudo. Запустите visudo и добавьте строку, подобную этой, после того, как любой NOPASSWD как это может касаться этого пользователя :

 morfik ALL = (morfik:audio) NOPASSWD: pulseaudio