Когда я пытался запустить chkconfig от имени обычного пользователя (на CentOS 5), я понял, что не могу получить к нему доступ, потому что каталог sbin не находится в моем $ PATH. Когда я получаю root права, он все равно не работает. Я понимаю, что переменная $ PATH такая же, как у обычного пользователя, с которого я переключился.
Однако, когда я для начала вхожу в систему как root, переменная $ PATH является правильной для root, и я могу запустить команду.
Это должно так работать? Как сделать так, чтобы обычный пользователь имел временный доступ к командам, которые можно запускать только с правами root?
Спасибо
Попробуйте использовать команду su -
. В -
означает, что новая оболочка получит среду пользователя, на которого вы перешли. Если вы его не используете, большая часть вашей среды останется прежней.
На странице руководства для su говорится:
Необязательный аргумент - может использоваться для обеспечения среды, аналогичной той, которую пользователь ожидал бы, если бы пользователь вошел в систему напрямую.
Думаю, это нормально, у каждого пользователя есть своя переменная PATH, и вы можете изменить ее для пользователя в его профиле, если вам нужно.
Что касается разрешения пользователю выполнять команды, зарезервированные для root, можно использовать setuid bit
но это может быть опасно (Setuid). Если у пользователя есть разрешение на выполнение (например, через группу) для корневого файла с установленным битом setuid, он будет выполнять этот файл с разрешениями владельца (root), а не с его собственными разрешениями. Я не уверен, что он работает во всех дистрибутивах, потому что, согласно документации, многие дистрибутивы не уважают его из-за рисков безопасности, но он работает, по крайней мере, на Ubuntu.
Корень и Пользователь имеют совершенно разные и дискретные среды. Использование sudo дает вам возможность выполнять ограниченные команды, но на самом деле не затрагивает переменные среды.
С другой стороны, su, допустим, загружает корневую среду. Это почти как войти в систему как root.
Что касается вашего вопроса, вы можете сделать так, чтобы обычный пользователь мог "видеть" команды, но не выполнять их. для этого вам по-прежнему нужны привилегии root.
например, вы можете запустить ifconfig как обычный пользователь, просто чтобы увидеть свой IP-адрес, но если вы хотите что-то изменить, у вас должны быть соответствующие привилегии.