Назад | Перейти на главную страницу

Почему моя переменная $ PATH для root отличается, когда я использую su root

Когда я пытался запустить 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-адрес, но если вы хотите что-то изменить, у вас должны быть соответствующие привилегии.