2015-04-21 4 views
0

Я создаю скрипт установки для игры в Linux. В рамках установки я изменяю suid-разрешения исполняемого файла игры в группу «games», чтобы игра могла обновлять файл рекордов, даже когда его запускали обычные пользователи.Как сделать команду chgrp необязательной в моем скрипте установки?

Сейчас мой Makefile.am выглядит следующим образом:

AUTOMAKE_OPTIONS = foreign 
SUBDIRS = src man 

install-exec-hook: 
    chgrp games @[email protected]/xjump 
    chmod +s @[email protected]/xjump 

    mkdir -p @[email protected]/xjump 
    touch  @[email protected]/xjump/record 
    chmod 660 @[email protected]/xjump/record 
    chgrp games @[email protected]/xjump/record 

Проблема, которую я имею что команда команды chgrp требует привилегий администратора. Если я устанавливаю игру по всему миру с помощью sudo make install, то его все работает нормально, но если я изменить префикс куда-то в моем домашнем каталоге и попытаться сделать регулярные make install это не удается из-за команду chgrp

chgrp: changing group of ‘/home/hugo/Desktop/aaa/bin/xjump’: Operation not permitted 

Поскольку установленные локально В версии игры есть только один игрок, мне действительно не нужно делать чгпп. Есть ли способ определить, выполняется ли make-файл без привилегий root и пропустить изменение разрешения? Или я должен добавить флаг конфигурации в свой скрипт configure вместо того, чтобы пытаться исправить эту проблему разрешения автоматически?

+0

Да, chgrp требует наличия привилегий root. в противном случае вы могли бы тривиально совершить DoS-атаку на группу или пользователя, «предоставив» им кучу файлов и превысив их квоту диска. только root может выдавать файлы произвольным образом. или глупые взломы системы, такие как создание двоичного двоичного файла, который у вас есть, chown/chgrp-it it to root/wheel и полностью подорвать систему. –

+0

Мой вопрос в том, что если я устанавливаю для одного пользователя, то chgrp не нужен. Поэтому в этом случае мне бы хотелось, чтобы сценарий установки не требовал root, как сейчас. – hugomg

+0

, если это просто для одного пользователя, зачем вообще менять группу? поместите файл оценки в принадлежащий пользователю/сгруппированный пользователь в качестве пользователя. –

ответ

1

Когда команды выходят из строя, вы не запускались с правами root. Кажется, что все пошло не так, вам просто не нужны сообщения об ошибках. Вы можете увидеть, кто вы есть, но самое простое решение перенаправляет выход Finish с правдой, так что ваш шаг не терпит неудачу:

chgrp games @[email protected]/xjump/record 2>/dev/null || true 
+0

Это работает! Но удивительно, если нет более тонкого способа решить эту проблему, не проглатывая какую-либо другую ошибку, которую может бросить chgrop. – hugomg

+0

Вы можете использовать что-то вроде '[" $ (id -u) "=" 0 "]', но вы вводите больше контрольных операторов. Файл make не является shellscript. –

1

Если вы запустите «WHOAMI», вы могли бы узнать которым является текущий пользователь.

runner=`whoami` ; 
    if test $$runner == "root" ; 
    then 
      chgrp games @[email protected]/xjump/record 
    fi 

 Смежные вопросы

  • Нет связанных вопросов^_^