$ (SUDO_USER) Переменная внутри make-файла пакета debian - PullRequest
0 голосов
/ 20 января 2012

Итак, я делаю пакет debian, но у меня возникают проблемы с настройкой некоторых разрешений, которые я хочу сделать после того, как все файлы будут скопированы. Это сетевое приложение, использующее libpcap. Поэтому обычно для этого требуются права суперпользователя, но это большая проблема безопасности. (Поскольку любой компромисс в моей программе будет означать полный доступ root для злоумышленника) Вместо этого мы идем по пути создания группы с предоставленными разрешениями pcap, а затем добавляем в эту группу устанавливающего пользователя.

В make-файле это выглядит так:

setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/myProgram
groupadd -f myGroup
usermod -a -G myGroup $(SUDO_USER)

Что отлично работает, если вы запускаете "sudo make install". Но когда я пытаюсь сделать это внутри сценария postinst в пакете debian, я получаю следующее:

var/lib/dpkg/info/myProgram-1.0.postinst: line 13: SUDO_USER: command not found
Usage: usermod [options] LOGIN

Options:
  -c, --comment COMMENT         new value of the GECOS field
  -d, --home HOME_DIR           new home directory for the user account
  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE
  -f, --inactive INACTIVE       set password inactive after expiration
                                to INACTIVE
  -g, --gid GROUP               force use GROUP as new primary group
  -G, --groups GROUPS           new list of supplementary GROUPS
  -a, --append                  append the user to the supplemental GROUPS
                                mentioned by the -G option without removing
                                him/her from other groups
  -h, --help                    display this help message and exit
  -l, --login NEW_LOGIN         new value of the login name
  -L, --lock                    lock the user account
  -m, --move-home               move contents of the home directory to the
                                new location (use only with -d)
  -o, --non-unique              allow using duplicate (non-unique) UID
  -p, --password PASSWORD       use encrypted password for the new password
  -s, --shell SHELL             new login shell for the user account
  -u, --uid UID                 new UID for the user account
  -U, --unlock                  unlock the user account
  -Z, --selinux-user            new SELinux user mapping for the user account

Очевидно, что переменная $ (SUDO_USER) пуста. Как еще это сделать? Нужно ли запрашивать у пользователя его / ее имя пользователя? Это звучит ужасно уродливо. Или, может быть, вы просто не должны выполнять такую ​​настройку в пакете Debian?

(IE: у Wireshark та же проблема, но, похоже, они просто оставляют это на усмотрение пользователя, и вообще не путаются с разрешениями при установке.)

Ответы [ 2 ]

1 голос
/ 23 января 2012

Вы правильно поняли: вы не должны знать имя пользователя "установочного пользователя", поскольку его может и не быть.Представьте, что ваш пакет запускается apt-cron, тогда сама концепция «установки пользователя» не имеет смысла.

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

0 голосов
/ 12 февраля 2015

Вы определенно можете получить имя пользователя для установки, просто удалите эти скобки, потому что bash интерпретирует это как функцию

#!/bin/sh
# postinst script
usermod -a -G myGroup $SUDO_USER
# Do everythhing that you could imagine

Но вы должны помнить, что:

1)работать в некоторых приложениях с графическим интерфейсом, таких как Ubuntu Software Center

2) Это определенно плохая практика.Все пакеты должны настроить свою пользовательскую среду при первом запуске.

...