Название вопроса как бы подводит итог. Я развертываю сетевое устройство как виртуальную машину на основе Debian 9, но хочу предоставить пользователю возможность добавлять дополнительное дисковое пространство, если это необходимо, однако я не хочу, чтобы у них был полный доступ к системе из командной строки. Как я могу создать учетную запись, которая ограничена только выполнением действий типа fdisk? Также я хочу ограничить их доступ к файловой системе, чтобы они не могли просматривать диск.
Вместо этого вам следует просто автоматизировать задачу изменения размера виртуального жесткого диска и файловой системы.
Например, cloud-init можно настроить автоматически вырасти перегородки (и файловые системы) экземпляров виртуальных машин, и уже настроены для этого на экземплярах виртуальных машин от крупных облачных провайдеров, таких как Amazon AWS и Google Cloud. Вы можете использовать cloud-init самостоятельно, чтобы автоматизировать эту задачу. В этом случае конечный пользователь изменит размер виртуального диска в своем гипервизоре, затем перезагрузит экземпляр, и cloud-init автоматически выполнит все необходимые шаги.
Пример из документации:
#cloud-config
#
# growpart entry is a dict, if it is not present at all
# in config, then the default is used ({'mode': 'auto', 'devices': ['/']})
#
# mode:
# values:
# * auto: use any option possible (any available)
# if none are available, do not warn, but debug.
# * growpart: use growpart to grow partitions
# if growpart is not available, this is an error.
# * off, false
#
# devices:
# a list of things to resize.
# items can be filesystem paths or devices (in /dev)
# examples:
# devices: [/, /dev/vdb1]
#
# ignore_growroot_disabled:
# a boolean, default is false.
# if the file /etc/growroot-disabled exists, then cloud-init will not grow
# the root partition. This is to allow a single file to disable both
# cloud-initramfs-growroot and cloud-init's growroot support.
#
# true indicates that /etc/growroot-disabled should be ignored
#
growpart:
mode: auto
devices: ['/']
ignore_growroot_disabled: false
Вы можете использовать файл sudoers (/etc/sudoers
, но лучше всего редактировать с visudo
tool), чтобы разрешить группе пользователей использовать sudo (8), ограниченную определенной командой. Вы даже можете добавить разрешенные аргументы, чтобы пользователи не могли вызывать fdisk на несвязанном диске.
Запись в файле может выглядеть примерно так:
%yourgroup ALL=(ALL) NOPASSWD: /sbin/fdisk /dev/sdb
man sudoers
содержит дополнительную информацию о синтаксисе команд и возможных параметрах.