Я использую Fedora 17 KDE x64 и Qt 4.8.1.
В отличие от Ubuntu, Fedora не дает первому созданному пользователю привилегии sudo и не добавляет первого созданного пользователя в файл /etc/sudoers
. Поэтому при установке программ на Fedora 17 KDE (не тестировал Gnome и т.п. спины) требуются root
(не sudo
) привилегии. Итак, у нас есть три уровня привилегий (перечислены в порядке убывания по уровню привилегий):
1) root 2) sudo 3) пользователь
В Fedora 17 KDE, если у вас есть доступ к учетной записи пользователя root
, вы можете предоставить привилегии sudo
любому другому пользователю, просто отредактировав файл /etc/sudoers
и добавив строку:
user ALL = (ALL) ALL
… ниже линии:
root ALL = (ALL) ALL
Замените user
именем учетной записи, к которой вы хотите предоставить доступ sudo.
Но не каждый пользователь имеет доступ к учетной записи root
пользователя. Вот почему пользователь root
может предоставлять привилегии суперпользователя (sudo
) некоторым учетным записям пользователей.
Я хочу проверить, зарегистрирован ли текущий пользователь, запускающий приложение, как суперпользователь. Если это так, я заставлю инструмент /usr/bin/kdesu
использовать инструмент /usr/bin/sudo
, который запрашивает пароль sudo
.
Если пользователь не является суперпользователем, я оставляю /usr/bin/kdesu
вести себя так, как он ведет себя по умолчанию — он использует инструмент /usr/bin/su
, для которого требуется пароль root
.
В настоящее время я использую getenv('USER')
(«ИМЯ ПОЛЬЗОВАТЕЛЯ» в Windows, но мне нужна эта функция только в Linux), чтобы получить текущего пользователя. Имя текущего пользователя можно получить, перейдя QProcess::systemEnvironment()
, где перечислены переменные HOSTNAME и USER.
Анализ файла /etc/sudoers
невозможен, так как для открытия файла требуются привилегии sudo
или root
.
sudo -l
перечисляет права sudo текущего пользователя. Если вы запустите его, пользователь должен ввести свой пароль. Вы можете использовать что-то вродеexpect
, чтобы проверить, вводил ли пользователь пароль ранее и находится ли он в настоящее время во временном окне sudo. - person snies   schedule 01.07.2012sudo -l
. Я только что проверил это на учетной записи без привилегий, и команда не запрашивала пароль, а просто перечисляла все разрешенные команды. - person n. 1.8e9-where's-my-share m.   schedule 01.07.2012