elogind у legion@ и lakostis@ работает. Как заработает у меня, регулярки перейдут на него. И polkit-sysvinit станет ненужным.
Это надо будет смотреть на альфа сборке sysv-xfce.
Пока не увижу что это работает, не поверю. :)
И polkit-sysvinit станет ненужным.
А вот storage-group-sysvinit может быть полезен и для систем с работающим polkit-agent? Верно?
В целом да.
Тут пользователь подтверждает что запрет работает:
(для варианта по ссылке разрешено монтирование флеш только для администраторов и соадминистраторов (wheel) )
https://forum.altlinux.org/index.php?topic=42293.msg335507#msg335507https://forum.altlinux.org/index.php?topic=42293.msg335613#msg335613У меня в sysv-xfce тоже работает, но не с AUTH_SELF (пароль пользователя), а с YES.
Но ответ не так прост как кажется на первый взгляд:
Модель будущего пакета:
Пакет storage-groupНазначениеУниверсальный пакет предназначенный для разрешения прав монтирования флешек и медиа с делегированием прав доступа через группу storage. Предназначен для систем на System V init и systemd, базирующихся на udisks2 и polkit.
Преамбулаudisks2 различает две группы устройств:
HintSystem: true - системные hdd подключаемые к коннекторам на системной плате.
HintSystem: false - CD/DVD и usb-акопители, это устройства other seat, подключаемые в другое место.
<action id="org.freedesktop.udisks2.filesystem-mount">
<description xml:lang="ru">Монтировать файловую систему</description>
<action id="org.freedesktop.udisks2.filesystem-mount-system">
<description xml:lang="ru">Монтировать файловую систему на системном устройстве</description>
<action id="org.freedesktop.udisks2.filesystem-mount-other-seat">
<description xml:lang="ru">Монтировать файловую систему с устройства, подключенного в другое место</description>
Проблемы udisks2Алгоритм udisks2 требующий авторизацию безнадёжно плох. Это не лечится и нужно переписывать весь udisks2 с нуля.
Дело в том что:
Вне зависимости от того какой из экшнов используется
<action id="org.freedesktop.udisks2.filesystem-mount-system">
<action id="org.freedesktop.udisks2.filesystem-mount-other-seat">
оба они требуют расписывать права доступа и для
<action id="org.freedesktop.udisks2.filesystem-mount">
Более того:
Если файловая системного hdd не прописана в /etc/fstab, она использует и
<action id="org.freedesktop.udisks2.filesystem-mount-other-seat">
и устройство (sda[1-9]) считается подключенным в другое место! Чего не должно быть в принципе!
Из-за этого возникает путаница и сложность написания рулезов с необходимостью тщательной отладки!
Это неявно заметно на системах, на которых авторизация сломана. И вылавливается логикой от обратного.
Здесь
# cat /etc/polkit-1/rules.d/60-sysvinit-mount.rules
polkit.addRule(function(action, subject)
{
if (action.id.indexOf("org.freedesktop.udisks2.filesystem-mount") == 0)
{
if (subject.isInGroup("storage")) {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
};
if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" && subject.isInGroup("xgrp"))
{
return polkit.Result.YES;
};
if (action.id == "org.freedesktop.udisks2.filesystem-mount-system-internal" && subject.isInGroup("xgrp"))
{
return polkit.Result.YES;
};
if (action.id.indexOf("org.freedesktop.udisks2.eject-media") == 0)
{
if (subject.isInGroup("storage")) {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
};
if (action.id.indexOf("org.freedesktop.udisks2.power-off-drive") == 0)
{
if (subject.isInGroup("storage")) {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
};
if (action.id == "org.freedesktop.udisks2.encrypted-unlock" && subject.isInGroup("xgrp"))
{
return polkit.Result.YES;
}
# if (action.id.indexOf("org.freedesktop.udisks2.filesystem-mount-other-seat") == 0)
# {
# if (subject.isInGroup("storage")) {
# return polkit.Result.YES;
# } else {
# return polkit.Result.NO;
# }
# };
if (action.id.indexOf("org.freedesktop.udisks2.eject-media-other-seat") == 0)
{
if (subject.isInGroup("storage")) {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
};
if (action.id.indexOf("org.freedesktop.udisks2.power-off-drive-other-seat") == 0)
{
if (subject.isInGroup("storage")) {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
};
});
правило для mount-other-seat закомментировано.
Но стоп!
$ udisksctl info -b /dev/sda12 | grep ' Device:\|HintSystem\| Id:'
Device: /dev/sda12
HintSystem: true
Id: by-id-ata-WDC_WD5000LPCX-24C6HT0_WD-WXC1A45NS2D4-part12
При чём здесь авторизация?!
$ udisksctl mount -b /dev/sda12
==== AUTHENTICATING FOR org.freedesktop.udisks2.filesystem-mount-system ====
Для монтирования WDC WD5000LPCX-24C6HT0 (/dev/sda12) требуется подтверждение подлинности пользователя
Authenticating as: user1 # wheel
Password:
Если filesystem-mount-system разрешён явно!
# sed -n '13,21p' /etc/polkit-1/rules.d/60-sysvinit-mount.rules
if (action.id == "org.freedesktop.udisks2.filesystem-mount-system" && subject.isInGroup("xgrp"))
{
return polkit.Result.YES;
};
if (action.id == "org.freedesktop.udisks2.filesystem-mount-system-internal" && subject.isInGroup("xgrp"))
{
return polkit.Result.YES;
};
$ groups | grep -o storage
storage
А соль в том, что устройства системного винчестера (sda[1-9], HintSystem: true) с файловыми не прописанными в /etc/fstab, udisks2 считает устройствами other seat (подключенными в другое место)
и при разрешённом org.freedesktop.udisks2.filesystem-mount-other-seat, но запрещённом org.freedesktop.udisks2.filesystem-mount-system (авторизация-то на sysv-xfce сломана!), даже при отсутствующем правиле для org.freedesktop.udisks2.filesystem-mount-system
# cat /etc/polkit-1/rules.d/60-sysvinit-mount.rules
polkit.addRule(function(action, subject)
{
if (action.id.indexOf("org.freedesktop.udisks2.filesystem-mount") == 0)
{
if (subject.isInGroup("storage")) {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
};
if (action.id.indexOf("org.freedesktop.udisks2.eject-media") == 0)
{
if (subject.isInGroup("storage")) {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
};
if (action.id.indexOf("org.freedesktop.udisks2.power-off-drive") == 0)
{
if (subject.isInGroup("storage")) {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
};
if (action.id == "org.freedesktop.udisks2.encrypted-unlock" && subject.isInGroup("xgrp"))
{
return polkit.Result.YES;
}
if (action.id.indexOf("org.freedesktop.udisks2.filesystem-mount-other-seat") == 0)
{
if (subject.isInGroup("storage")) {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
};
if (action.id.indexOf("org.freedesktop.udisks2.eject-media-other-seat") == 0)
{
if (subject.isInGroup("storage")) {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
};
if (action.id.indexOf("org.freedesktop.udisks2.power-off-drive-other-seat") == 0)
{
if (subject.isInGroup("storage")) {
return polkit.Result.YES;
} else {
return polkit.Result.NO;
}
};
});
файловые системного винчестера sda не прописанные в /etc/fstab, udisks2 смонтирует как устройства other seat, т.е. как флешки!
Говоря ещё проще:
Правила написанные для распределения прав доступа для монтирования флешек, будут работать и для файловых винчестера не прописанных в /etc/fstab!И я не знаю, как с udisks2 разрешить группе storage монтировать флешки, но не разрешать не-wheel монтировать файловые не прописанные в /etc/fstab, которые udisks2 монтирует как флешки.Алгоритм udisks2, это полный вынос мозга.
Но теоретически, конструкция пакета storage-group должна быть такой:
- скрипт storage-group с LSB-хидером под sysv и systemd.
- комплект необходимых рулезов для монтирования устройств other-seat (с YES для систем на systemd и sysv если авторизация сломана на sysv; с AUTH_SELF для систем на systemd и sysv если в sysv авторизация починена).
- соответственно написание/правка спека с пост-инсталл скриптом.
На выходе будет универсальный пакет и под sysv и под systemd.