Существует много способов пойти об этом, но я записал бы небольшую программу или сценарий, который берет в информации о пользователе и выполнениях adduser
. Программа принадлежала бы корню с setuid набором битов.
Сохраните его максимально простым. Если Вы не санируете свой вход правильно, у Вас могла бы быть дыра в системе безопасности. Добавление пользователей к системе является опасным бизнесом так или иначе. Хорошая вещь об этой стратегии, хотя то, что Ваш целый исполняемый файл не должен работать как корень, просто сценарий/программа, который добавляет пользователя.
Править:
До очистки входа способ, которым Вы делаете это, зависит от того, как Вы реализуете программу. Если Вы пишете это в C, используйте execve () функция вместо системы (). Существует большой документ с примерами, санируют сбои, которые становятся годными для использования в CERT. Если Вы пишете в Python, предпочитаете модуль подпроцесса системе () по подобным причинам.
Я санировал бы путем снятия любых символов, которые не являются буквами или числами, если у Вас нет определенной потребности. Пользователи создают пароли? Если так, это делает это более трудным. Ключ - то, что Вы не хотите, чтобы они смогли передать любые специальные символы оболочке или программе, называемой, которые имеют особое значение. Для удара некоторые очевидные $
, ;
, &&
. Для mysql Вы хотели бы предотвратить как минимум '
, "
, и ;
.
К сожалению, очистка может быть трудной задачей. Если можно перечислить все значения, которые пользователи, возможно, должны использовать, то я предложил бы использовать белый список.
Команда pvs
является частью lvm
. Если вам, как пользователю root, необходимо включить эту забавность для пользователей не root, вы можете использовать setcap
, чтобы установить разрешения исполняемых файлов lvm для выполнения действий, которые по умолчанию ограничены для пользователей root.
Это относится к любому исполняемому файлу, который должен выполнять действия с привилегиями root.
Узнайте больше о возможностях файла: http://man7.org/linux/man-pages/man7/capabilities.7.html
Пример: ПЕРЕД setcap
$ pvs
WARNING: Running as a non-root user. Functionality may be unavailable.
/run/lvm/lvmetad.socket: connect failed: Permission denied
WARNING: Failed to connect to lvmetad: Permission denied. Falling back to internal scanning.
/run/lvm/lvmetad.socket: connect failed: Permission denied
/run/lock/lvm/P_global:aux: open failed: Permission denied
Unable to obtain global lock.
ПОСЛЕ
setcap "cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_admin,cap_sys_chroot,cap_sys_admin,cap_sys_resource,cap_audit_control,cap_setfcap=+eip" /sbin/lvm
$ pvs
WARNING: Running as a non-root user. Functionality may be unavailable.
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 15.51g 0
/dev/sdb DataPool lvm2 a-- 50.00g 0
/dev/sdc DataPool lvm2 a-- 60.00g 0
/dev/sdd DBArchivePool lvm2 a-- 50.00g 0
Заметьте, что я использовал гораздо больше caps, чем нужно, вероятно, потому что я только что скопировал кое-что, что я использовал один раз, но вы можете найти ваш минимальный набор caps...
Не забудьте процитировать прописные буквы, которые вы хотите установить.
Любой пользователь может получить информацию с помощью lsblk
.
У него есть параметры, которые позволяют получить простой,
подробный или индивидуальный вывод.
Попробуйте:
lsblk
$ lsblk
NAME MAJ: MIN RM SIZE RO TYPE MOUNTPOINT
sda 8: 0 0 238,5G 0 disk {{ 1}} ├─sda1 8: 1 0 2M 0 частей
├─sda2 8: 2 0 700M 0 частей / загрузка
└─sda3 8: 3 0 206,4G 0 частей {{1 }} ├─fed21_ssd_pcsolo-swap 253: 0 0 29,8G 0 lvm [SWAP]
├─fed21_ssd_pcsolo-root 253: 1 0 80G 0 lvm /
├─fed21_ssd_pcsolo-home 253: 2 0 50G 0 lvm / home
└─fed21_ssd_pcsolo-tmp 253: 3 0 46,6G 0 lvm / tmp
sdb 8:16 0 2,7T 0 disk
⋮ {{ 1}}
lsblk -f
(Вывод информации о файловых системах)
lsblk -b
(Вывести столбец SIZE в байтах, а не в удобочитаемом формате) или lsblk -m
(Вывод информации о владельце устройства, группе и режиме) lsblk -O
(заглавная «o») это подробно описано lsblk -o
(Укажите, какие выходные столбцы следует печатать) вы можете определить собственный формат