CentOS Полезные советы - Стать суперпользователем Root
Как стать Root-ом (суперпользователем)
1. Использование команды: su
Многие команды могут быть запущены только суперпользователем, поэтому мы должны знать, как становится им (root-ом). Чтобы сделать это, мы можем использовать команду: su (смена пользователя). Команда su принимает следующие форматы:
su -
или
su
но чаще всего мы будем использовать su для того, чтобы стать пользователем root:
su - root
или
su root
если имя пользователя в строке не указано, то автоматически предпологается пользователь root, поэтому команду можно сократить:
su -
или
su
но обе команды ведут себя различно. 'su ' дает текущему пользователю личность , тогда, как 'su - ' дает текущему пользователю личность вместе с окружением , которое можно было бы получить, зарегистрировавшись в качестве .
Зачастую пользователи используют 'su' для перехода в root. Попробовав запустить команду (например - ifconfig), вы получите: 'command not found' error.
Пример:
su Password: ifconfig bash: ifconfig: command not found
Причина заключается в том, что обычные пользователи системы и root пользователь имеют различные переменные окружения PATH (вы можете посмотреть PATH пользователя при помощи "echo $PATH). После ввода команды Linux, оболочка будет искать пользовательский PATH, чтобы попытаться найти команду для запуска. Она начинает поиск в каждой директории указанной в PATH, пока цель не будет найдена.
Команды обычных пользователей обычно расположены в /usr/local/bin, /usr/bin и /bin. А команды пользователя root распологаются в основном в /usr/local/sbin, /usr/sbin, /sbin и корневой PATH это отражает. Поэтому, когда вы становитесь суперпользователем при помощи "su -", то вы также принимаете и новый путь PATH к основным командам. А используя только 'su', сохраняется пользовательский путь PATH по умолчанию, следовательно, при попытке выполнить программу расположенную в /usr/local/sbin, /usr/sbin, /sbin выдаст результат: 'command not found' error. Для более детального объяснения, смотрите справочную страницу (man bash), особенно раздел login shells.
Таким образом, вы или должны указывать полный путь к команде (пример - /sbin/ifconfig) при использовании 'su', либо использовать 'su -', когда становитесь root-ом.
2. Использование Sudo
Вам не нужно быть суперпользователем каждый раз, когда вы хотите запустить некоторые конкретные административные функции. Благодаря Sudo, вы можете запустить некоторые или все команды как под root-ом. Когда Sudo установлен (пакет: Sudo), вы можете настроить его при помощи команды 'visudo' под root-ом. В основном он редактирует (Vim по умолчанию) /etc/sudoers, но это не рекомендуется делать вручную.
Таким образом, быстрый и нерекомендуемый способ использования Sudo, это добавить в конце файла sudoers:
alex ALL=(ALL)ALL
Alex - имя пользователя. Сохраните (нажать escape, затем ввести wq), и все готово. Войдите как alex, и запустите например:
$sudo yum update
Sudo запросит пароль. Это пароль alex-а, а не пользователя root. Так что будте осторожны, когда вы даете права пользователя с Sudo.
Но Sudo может сделать не только это, а гораздо больше. Мы можем позволить пользователю или группе пользователей запускать только одну команду или группу команд. Давайте вернемся к нашему sudoers файлу. Начнем с alex и alisa, членов группы administrator. Если мы хотим, чтобы все пользователи из группы"administrator" были в состоянии запустить каждую команду в качестве суперпользователя, мы должны изменить наш пример:
%admin ALL=(ALL)ALL
Alex так же может выполнить суперпользовательскую команду, и alisa получила право запускать Sudo, с теми же правами и со своим паролем. Если alex и alisa не члены одной группы, мы можем определить псевдоним пользователя в файле sudoers:
User_Alias ADMINS = alisa,alex
Здесь мы определили алиас под названием ADMINS, с членами alisa и alex.
Тем не менее, мы не хотим, чтобы alex и alisa могли запускать с правами суперпользователя любую програму. Мы хотим, чтобы они могли запускать только 'updatedb'. Давайте определим команду псевдоним:
Cmnd_Alias LOCATE = /usr/sbin/updatedb
Но этого мало! Мы должны сказать Sudo, что пользователи, определенные как ADMINS, могут запускать команды заданные в LOCATE. Чтобы сделать это, мы заменим строки с "%admin" на эти:
ADMINS ALL = LOCATE
Это означает, что пользователи входящие в алиас ADMINS могут запускать все команды в алиасе LOCATE.
На этот раз, /etc/sudoers выглядит следующим образом:
User_Alias ADMINS = alisa, alex Cmnd_Alias LOCATE = /usr/bin/updatedb ADMINS ALL = LOCATE
В результате alex и alisa могут запускать updatedb, как root, введя свой пароль.
Если последнюю строчку в файле изменить:
ADMINS ALL = NOPASSWD:LOCATE
тогда alex и alisa смогут выполнить 'sudo updatedb' без ввода пароля.
Можно добавить другие команды в командный алиас и более алиасов в правило. Например мы можем создать алиас NETWORKING содержащий некоторые сетевые команды типа: ifconfig, route или iwconfig:
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhcclient, /usr/bin/net, sbin/iptables, /usr/bin/rfcom, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
Давайте все это добавим в наш /etc/sudoers файл (с помощью visudo!). А также предоставим нашей ADMINS групе права на выполнение программ и из алиаса NETWORKING:
User_Alias ADMINS = alice, bob Cmnd_Alias LOCATE = /usr/bin/updatedb Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net,/sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool ADMINS ALL = LOCATE, NETWORKING
Маленькая проба: войдите в систему как alisa (или alex), и наберите:
$ping -c 10 -i localhost
Ответ должен вернуться быстро:
PING localhost.localdomain (127.0.0.1) 56(84) bytes of data. ping: cannot flood; minimal interval, allowed for user, is 200ms
Теперь, тоже-самое но с Sudo:
$sudo ping -c 10 -i 0 localhost PING localhost.localdomain (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.049 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.034 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=3 ttl=64 time=0.021 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=4 ttl=64 time=0.030 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=5 ttl=64 time=0.017 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=6 ttl=64 time=0.016 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=7 ttl=64 time=0.016 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=8 ttl=64 time=0.016 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=9 ttl=64 time=0.016 ms 64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=10 ttl=64 time=0.016 ms --- localhost.localdomain ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 1ms rtt min/avg/max/mdev = 0.016/0.023/0.049/0.010 ms, ipg/ewma 0.187/0.028 ms
Sudo часто используется для предоставления определенным пользователям частичного доступа к привелигированным командам, чтобы они могли выполнять ограниченные административные функции. Одно из удобств Sudo в том, что все команды записываются в /var/log/secure. Приведенный выше пример будет описан строчкой в журнале:
Apr 18 11:23:17 localhost sudo: alex : TTY=pts/0 ; PWD=/home/alex ; USER=root ; COMMAND=/bin/ping -c 10 -i 0 localhost
Вот и все. Теперь никогда не забуду, когда использовал Sudo: "с большой властью приходит большая ответственность".
2.1 Sudo shell
Если у вас настроено достаточно прав в sudoers, вы также можете открыть root-ую оболочку shell используя:
sudo -s
или
sudo -i
В последних версиях только на CentOS 5, для запуска shell под root, используется sudo -s. Будьте очень осторожны, так как это может менять или создавать новые файлы в домашней директории Root, а установку вести в домашний каталог вызвавшего пользователя.
3. consolehelper
Consolehelper представляет собой оболочку для запуска GUI приложений. Когда он начинает работать, он проверяет конфигурацию PAM для требуемого применения. Это означает, что мы можем проводить аутентификацию пользователя с помощью всех установленных модулей PAM. Основной метод состоит в том, чтобы запросить пароль, но если мы имеем надлежащее оборудование. мы можем аутентифицировать с помощью смарткарты, жетонов, отпечатков пальцев и т.д. Конфигурация PAM выходит за рамки этого документа (см. PAM Руководство администратора), поэтому мы рассмотрим этап настройки consolehelper, необходимый для запуска приложений под root-ом и запросом пароля root.
В качестве примера, давайте настроим /usr/bin/xterm для запуска в качестве root-ого.
Во-первых, мы хотим сохранить возможность запускать Xterm под обычным пользователем. Поэтому создадим символическую ссылку /usr/bin/xterm-root для /usr/sbin/consolehelper:
ln -s /usr/sbin/consolehelper /usr/bin/xterm-root
Теперь для конфигурирования PAM - создайте файл /etc/pam.d/xterm-root:
#%PAM-1.0 auth include config-util account include config-util session include config-util
Наконец, настройте consolehelper на запуск /usr/bin/xterm под root-ом, командой 'xterm-root'. Создайте файл /etc/security/console.apps/xterm-root:
USER=root PROGRAM=/usr/bin/xterm
Вот и все. Запускайте 'xterm-root' (из командной строки или ярлыком .desktop file), введите пароль и в путь. Если вы получили сообщение об ошибке: "Xlib: connecttion to ":0.0" refused by server", запустите сначала 'xhost local:root'.