Как сменить группу процесса?

Comedi, да и только.
 

Vale

Сальсолёт

Вопрос простой.
У меня процесс запускается от пользователя user, в группе group,
Для доступа к библиотеке comedi из программы на C++ мне нужно, чтобы процесс исполнялся от имени группы iocard (юзер user - член этой группы).

Простой вопрос - КАК? И будут ли какие -то проблемы при смене группового id на лету?

пока для отладки я прописал права 666 на /dev/comedi0 , но хотелось бы сделать правильно.
"Не следуй за большинством на зло, и не решай тяжбы, отступая по большинству от правды" (Исх. 23:2)  6.0.26.0.2
US Сергей-4030 #13.09.2011 21:47  @Vale#13.09.2011 21:45
+
-
edit
 

Сергей-4030

исключающий третье
★★
админ. бан
Vale> Для доступа к библиотеке comedi из программы на C++ мне нужно, чтобы процесс исполнялся от имени группы iocard (юзер user - член этой группы).

Что значит "выполнялся от имени группы"?
 13.0.782.22013.0.782.220
RU Vale #13.09.2011 21:55  @Сергей-4030#13.09.2011 21:47
+
-
edit
 

Vale

Сальсолёт

Сергей-4030> Что значит "выполнялся от имени группы"?

Если я правильно помню, процесс запускается от имени текущего юзера и текущей группы (одной из тех, в которой юзер состоит). Как я понимаю, чтобы получить доступ к АЦП, мне нужно, чтобы текущая группа была iocard, иначе получаю отлуп (атрибуты файлов устройств /dev/comedi* = rw-rw----).

Последний раз читал маны на эту тему лет 20 назад. Пока обошелся, выставив нужным файлам /dev/comedi* атрибуты 666, но это не дело.

Как правильно это сделать? Буду благодарен за ссылку на код.
"Не следуй за большинством на зло, и не решай тяжбы, отступая по большинству от правды" (Исх. 23:2)  6.0.26.0.2

Vale

Сальсолёт

Спасибо. Перепутал с setpgid. :(
А как странслировать название iocard в цифровой id группы?
Торможу страшно.
"Не следуй за большинством на зло, и не решай тяжбы, отступая по большинству от правды" (Исх. 23:2)  6.0.26.0.2

Mishka

модератор
★★★
Vale> Спасибо.
Vale> А на память - как странслировать название iocard в цифровой id группы?
/etc/group
Содержит такие строчки:
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
 
 6.06.0

Vale

Сальсолёт

Разбирать вручную, то бишь?
"Не следуй за большинством на зло, и не решай тяжбы, отступая по большинству от правды" (Исх. 23:2)  6.0.26.0.2

Mishka

модератор
★★★
А ещё знаметое :F
man setegid

Там в конце есть упоминания:
SEE ALSO
geteuid(2), setuid(2), setreuid(2), setresuid(2)
 
 6.06.0

Mishka

модератор
★★★
Vale> Разбирать вручную, то бишь?
Посмотри и найди, если надо на один раз. Если надо переносить, то всё равно надо учитывать, что группы могут иметь одинаковые имена и разные номера.
 6.06.0

Mishka

модератор
★★★
Только учти, что просто таки менять user id или group id не получится — процесс должен обладать определёнными привелегиями. Ну или менять только из списка.
 6.06.0

Mishka

модератор
★★★
Vale> Разбирать вручную, то бишь?
Вот тебе про базу групп и, как использовать.
— Function: struct group * getgrnam (const char *name)

This function returns a pointer to a statically-allocated structure containing information about the group whose group name is name. This structure may be overwritten by subsequent calls to getgrnam.

A null pointer indicates there is no group named name.
 
 6.06.0

Vale

Сальсолёт

ОК, спасибо!

Debug log
=======
libComedi info:
Version code: 0x00074c
Driver name: ni_pcimio
Board name: pci-6221
 


:staya_slonov:
"Не следуй за большинством на зло, и не решай тяжбы, отступая по большинству от правды" (Исх. 23:2)  6.0.26.0.2

Mishka

модератор
★★★
Vale> ОК, спасибо!

Слушай, а тебе группу менять не надо. По реальному ID определяются все группы, в которые ты входишь, соответственно, процесс получает доступ ко всем рессурсам с таким групповым доступом. Обычно смена effective user id/ efective group id нужна процессам, которые стартуют из под root, и, чтобы они не натворили бед, они сами себе на ходу меняют эти дела.
 6.06.0

Vale

Сальсолёт

Ну, не знаю - я, хоть и был в нужной группе, доступа не получил к АЦП, только под рутом.
Пока не хочу проверять, заработает ли со сменой эффективной группы.
Попозже проверю, конечно.
"Не следуй за большинством на зло, и не решай тяжбы, отступая по большинству от правды" (Исх. 23:2)  6.0.26.0.2

Mishka

модератор
★★★
Vale> Ну, не знаю - я, хоть и был в нужной группе, доступа не получил к АЦП, только под рутом.
Vale> Пока не хочу проверять, заработает ли со сменой эффективной группы.
Vale> Попозже проверю, конечно.
Вот под рутом стартуй программку, а внутри уже установи или effective user id или effective user group, или и то, и другое вместе (man setreuid). Программка не накосячит в случае ошибки, и доступ будет. Просто сменить группу не так просто — надо привелегии иметь.

PS Вот почитай про всё это дело — The GNU C Library - Users and Groups
 6.06.0

Mishka

модератор
★★★
Vale> Ну, не знаю - я, хоть и был в нужной группе, доступа не получил к АЦП, только под рутом.

А ты зашёл под своим логином — он в ту группу входил? Попробуй сказать в командной строке
newgrp iocard
И запусти программку снова. Эффективные ID будут user и iocard. Если процесс получит доступ к нужному ресурсу, то надо смотреть, как разрешить (кажетсья надо установить s бит для групп). Если нет, то там надо запускать, как рута и потом ставить нужные ID.


Вообще ещё почитай man getgroups — возвращает список групп, в которые ты входишь. Они называются supplementary group IDs и они тоже определяют доступ к ресурсам.

из командной строки можно выдать командочку
id
что посмотреть, что есть. Скажем, у меня выдаёт:
code c++
  1. (evstiomv@opal)/<6>groups:66> id
  2. uid=2548(evstiomv) gid=15(man) groups=15(man),127(csxmig),138(up),146(alaska),152(cadx)
  3. (evstiomv@opal)/<6>groups:67>
 6.06.0
Это сообщение редактировалось 14.09.2011 в 01:33

Mishka

модератор
★★★
The GNU C Library - File System Interface — описано достаточно хорошо, как определяется доступ к ресурсу. Ты для файла, к которому нужен доступ можешь привести вывод команды
ls -l
и
getfacl
и
lsattr -a
?
 6.06.0

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru