Как требовать привилегии root для запуска команды или псевдонима? [dубликат]

Я пишу простой скрипт bash, но мне нужно его проверить, выполняется ли он как root или нет. Я знаю, что, возможно, есть очень простой способ сделать это, но я понятия не имею, как это сделать.

Просто чтобы быть ясным: что такое простой способ написать скрипт foo.sh, так что команда ./foo.sh выходы 0, а команда sudo ./foo.sh выдает 1?

83
задан 2 December 2010 в 15:30

73 ответа

Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID , а затем, если она не существует, вызовите стандартную команду id :

  if (($ {EUID: -0} || "$ (id -u)"));  затем эхо Вы не root.  else echo Hello, root.  fi  

Таким образом, из-за OR shortcut вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.

Повторное использование кода:

  функция amIRoot () {!  (($ {EUID: -0} || "$ (id -u)"))}  
6
ответ дан 3 August 2018 в 02:30

Вы можете выполнить это, используя команду whoami , которая возвращает текущего пользователя:

  #! / bin / bash, если [`whoami`! = '  root '] then echo «Вы должны быть root, чтобы сделать это».  exit fi ...  

Выполнение вышеуказанного будет напечатано Для этого вы должны быть root. , если текущий пользователь не является root .


Примечание: альтернативой в некоторых случаях является просто проверить переменную $ USER :

 , если [$ USER! =  'root']  
18
ответ дан 3 August 2018 в 02:30

Этот фрагмент будет:

  • Проверить разные сессии
  • предложить использовать sudo !!
  • и вернуться ошибка
, если ["$ (whoami & 2> / dev / null)"! = "root"] && ["$ (id -un & 2> / dev / null)"!  = "root"] then echo "Вы должны быть root для запуска этого скрипта!"  echo "use 'sudo !!'" exit 1 fi 
1
ответ дан 4 August 2018 в 04:19

Вы можете выполнить это, используя команду whoami , которая возвращает текущего пользователя:

  #! / bin / bash, если [`whoami`! = '  root '] then echo «Вы должны быть root, чтобы сделать это».  exit fi ...  

Выполнение вышеуказанного будет напечатано Для этого вы должны быть root. , если текущий пользователь не является root .


Примечание: альтернативой в некоторых случаях является просто проверить переменную $ USER :

 , если [$ USER! =  'root']  
18
ответ дан 4 August 2018 в 04:19

Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID , а затем, если она не существует, вызовите стандартную команду id :

  if (($ {EUID: -0} || "$ (id -u)"));  затем эхо Вы не root.  else echo Hello, root.  fi  

Таким образом, из-за OR shortcut вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.

Повторное использование кода:

  функция amIRoot () {!  (($ {EUID: -0} || "$ (id -u)"))}  
6
ответ дан 4 August 2018 в 04:19

Пользователь root не должен называться «root». whoami возвращает первое имя пользователя с идентификатором пользователя 0 . $ USER содержит имя зарегистрированного пользователя, который может иметь идентификатор пользователя 0 , но имеет другое имя.

Единственная надежная программа для проверьте, зарегистрирована ли учетная запись как root, или нет:

  id -u  

Я использую -u для эффективный идентификатор пользователя, а не -r для идентификатора пользователя real . Разрешения определены эффективным [ пользователем , а не real .

Тесты

/ etc / passwd содержит следующие имена пользователей с идентификатором пользователя 0 в данном порядке:

  rootx root2  

Записан как root2 , дает следующие результаты:

  • whoami : rootx
  • echo $ USER : root2 (это возвращает пустую строку, если программа была запущена в пустой среде, например env -i sh -c 'echo $ USER' )
  • id -u : 0 Как вы можете видеть, другие программы не смогли выполнить эту проверку, только id -u .

Обновленный скрипт будет выглядеть так:

  #! / bin / bash if!  [$ (id -u) = 0];  затем эхо «Я не корень!»  выход 1 fi  
94
ответ дан 4 August 2018 в 04:19
  #! / bin / bash [[$ (id -u)! = 0]] echo $?   
9
ответ дан 4 August 2018 в 04:19

Этот ответ - просто сохранить идею, которая может быть полезна для некоторых из вас. Если вам нужен скрипт, который запускается из графического интерфейса рабочего стола и требует прав root, попробуйте этот способ:

  #! / Bin / bash if!  [$ (id -u) = 0];  затем gksudo -w $ 0 $ @ exit fi #here идут команды суперпользователя, например.  (переключить процессор Intel в режим энергосбережения): echo 1 & gt;  / sys / devices / system / cpu / intel_pstate / no_turbo cpupower frequency-set -g powersave  

Таким образом вы получите красивое диалоговое окно с запросом пароля пользователя root.

gksudo может быть недоступен в вашей системе, а затем установить его с помощью sudo apt-get install gksu . [ ! d5]

1
ответ дан 4 August 2018 в 04:19
  #! / bin / bash uid = `id -u` if [" $ uid "==" 0 "] then echo 1 else echo 0 fi  
28
ответ дан 4 August 2018 в 04:19

Один простой способ заставить скрипт запускать только root: запустить скрипт с помощью строки: #! / bin / su root

3
ответ дан 4 August 2018 в 04:19

Этот фрагмент будет:

  • Проверить разные сессии
  • предложить использовать sudo !!
  • и вернуться ошибка
, если ["$ (whoami & 2> / dev / null)"! = "root"] && ["$ (id -un & 2> / dev / null)"!  = "root"] then echo "Вы должны быть root для запуска этого скрипта!"  echo "use 'sudo !!'" exit 1 fi 
1
ответ дан 5 August 2018 в 11:48

Вы можете выполнить это, используя команду whoami , которая возвращает текущего пользователя:

  #! / bin / bash, если [`whoami`! = '  root '] then echo «Вы должны быть root, чтобы сделать это».  exit fi ...  

Выполнение вышеуказанного будет напечатано Для этого вы должны быть root. , если текущий пользователь не является root .


Примечание: альтернативой в некоторых случаях является просто проверить переменную $ USER :

 , если [$ USER! =  'root']  
18
ответ дан 5 August 2018 в 11:48

Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID , а затем, если она не существует, вызовите стандартную команду id :

  if (($ {EUID: -0} || "$ (id -u)"));  затем эхо Вы не root.  else echo Hello, root.  fi  

Таким образом, из-за OR shortcut вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.

Повторное использование кода:

  функция amIRoot () {!  (($ {EUID: -0} || "$ (id -u)"))}  
6
ответ дан 5 August 2018 в 11:48

Пользователь root не должен называться «root». whoami возвращает первое имя пользователя с идентификатором пользователя 0 . $ USER содержит имя зарегистрированного пользователя, который может иметь идентификатор пользователя 0 , но имеет другое имя.

Единственная надежная программа для проверьте, зарегистрирована ли учетная запись как root, или нет:

  id -u  

Я использую -u для эффективный идентификатор пользователя, а не -r для идентификатора пользователя real . Разрешения определены эффективным [ пользователем , а не real .

Тесты

/ etc / passwd содержит следующие имена пользователей с идентификатором пользователя 0 в данном порядке:

  rootx root2  

Записан как root2 , дает следующие результаты:

  • whoami : rootx
  • echo $ USER : root2 (это возвращает пустую строку, если программа была запущена в пустой среде, например env -i sh -c 'echo $ USER' )
  • id -u : 0 Как вы можете видеть, другие программы не смогли выполнить эту проверку, только id -u .

Обновленный скрипт будет выглядеть так:

  #! / bin / bash if!  [$ (id -u) = 0];  затем эхо «Я не корень!»  выход 1 fi  
94
ответ дан 5 August 2018 в 11:48
  #! / bin / bash [[$ (id -u)! = 0]] echo $?   
9
ответ дан 5 August 2018 в 11:48

Этот ответ - просто сохранить идею, которая может быть полезна для некоторых из вас. Если вам нужен скрипт, который запускается из графического интерфейса рабочего стола и требует прав root, попробуйте этот способ:

  #! / Bin / bash if!  [$ (id -u) = 0];  затем gksudo -w $ 0 $ @ exit fi #here идут команды суперпользователя, например.  (переключить процессор Intel в режим энергосбережения): echo 1 & gt;  / sys / devices / system / cpu / intel_pstate / no_turbo cpupower frequency-set -g powersave  

Таким образом вы получите красивое диалоговое окно с запросом пароля пользователя root.

gksudo может быть недоступен в вашей системе, а затем установить его с помощью sudo apt-get install gksu . [ ! d5]

1
ответ дан 5 August 2018 в 11:48
  #! / bin / bash uid = `id -u` if [" $ uid "==" 0 "] then echo 1 else echo 0 fi  
28
ответ дан 5 August 2018 в 11:48

Один простой способ заставить скрипт запускать только root: запустить скрипт с помощью строки: #! / bin / su root

3
ответ дан 5 August 2018 в 11:48

Этот фрагмент будет:

  • Проверить разные сессии
  • предложить использовать sudo !!
  • и вернуться ошибка
, если ["$ (whoami & 2> / dev / null)"! = "root"] && ["$ (id -un & 2> / dev / null)"!  = "root"] then echo "Вы должны быть root для запуска этого скрипта!"  echo "use 'sudo !!'" exit 1 fi 
1
ответ дан 7 August 2018 в 05:29

Вы можете выполнить это, используя команду whoami , которая возвращает текущего пользователя:

  #! / bin / bash, если [`whoami`! = '  root '] then echo «Вы должны быть root, чтобы сделать это».  exit fi ...  

Выполнение вышеуказанного будет напечатано Для этого вы должны быть root. , если текущий пользователь не является root .


Примечание: альтернативой в некоторых случаях является просто проверить переменную $ USER :

 , если [$ USER! =  'root']  
18
ответ дан 7 August 2018 в 05:29

Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID , а затем, если она не существует, вызовите стандартную команду id :

  if (($ {EUID: -0} || "$ (id -u)"));  затем эхо Вы не root.  else echo Hello, root.  fi  

Таким образом, из-за OR shortcut вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.

Повторное использование кода:

  функция amIRoot () {!  (($ {EUID: -0} || "$ (id -u)"))}  
6
ответ дан 7 August 2018 в 05:29

Пользователь root не должен называться «root». whoami возвращает первое имя пользователя с идентификатором пользователя 0 . $ USER содержит имя зарегистрированного пользователя, который может иметь идентификатор пользователя 0 , но имеет другое имя.

Единственная надежная программа для проверьте, зарегистрирована ли учетная запись как root, или нет:

  id -u  

Я использую -u для эффективный идентификатор пользователя, а не -r для идентификатора пользователя real . Разрешения определены эффективным [ пользователем , а не real .

Тесты

/ etc / passwd содержит следующие имена пользователей с идентификатором пользователя 0 в данном порядке:

  rootx root2  

Записан как root2 , дает следующие результаты:

  • whoami : rootx
  • echo $ USER : root2 (это возвращает пустую строку, если программа была запущена в пустой среде, например env -i sh -c 'echo $ USER' )
  • id -u : 0 Как вы можете видеть, другие программы не смогли выполнить эту проверку, только id -u .

Обновленный скрипт будет выглядеть так:

  #! / bin / bash if!  [$ (id -u) = 0];  затем эхо «Я не корень!»  выход 1 fi  
94
ответ дан 7 August 2018 в 05:29
  #! / bin / bash [[$ (id -u)! = 0]] echo $?   
9
ответ дан 7 August 2018 в 05:29

Этот ответ - просто сохранить идею, которая может быть полезна для некоторых из вас. Если вам нужен скрипт, который запускается из графического интерфейса рабочего стола и требует прав root, попробуйте этот способ:

  #! / Bin / bash if!  [$ (id -u) = 0];  затем gksudo -w $ 0 $ @ exit fi #here идут команды суперпользователя, например.  (переключить процессор Intel в режим энергосбережения): echo 1 & gt;  / sys / devices / system / cpu / intel_pstate / no_turbo cpupower frequency-set -g powersave  

Таким образом вы получите красивое диалоговое окно с запросом пароля пользователя root.

gksudo может быть недоступен в вашей системе, а затем установить его с помощью sudo apt-get install gksu . [ ! d5]

1
ответ дан 7 August 2018 в 05:29
  #! / bin / bash uid = `id -u` if [" $ uid "==" 0 "] then echo 1 else echo 0 fi  
28
ответ дан 7 August 2018 в 05:29

Один простой способ заставить скрипт запускать только root: запустить скрипт с помощью строки: #! / bin / su root

3
ответ дан 7 August 2018 в 05:29

Этот фрагмент будет:

  • Проверить разные сессии
  • предложить использовать sudo !!
  • и вернуться ошибка
, если ["$ (whoami & 2> / dev / null)"! = "root"] && ["$ (id -un & 2> / dev / null)"!  = "root"] then echo "Вы должны быть root для запуска этого скрипта!"  echo "use 'sudo !!'" exit 1 fi 
1
ответ дан 9 August 2018 в 10:44

Вы можете выполнить это, используя команду whoami , которая возвращает текущего пользователя:

  #! / bin / bash, если [`whoami`! = '  root '] then echo «Вы должны быть root, чтобы сделать это».  exit fi ...  

Выполнение вышеуказанного будет напечатано Для этого вы должны быть root. , если текущий пользователь не является root .


Примечание: альтернативой в некоторых случаях является просто проверить переменную $ USER :

 , если [$ USER! =  'root']  
18
ответ дан 9 August 2018 в 10:44

Принимая во внимание эффективность, вы можете сначала проверить переменную среды EUID , а затем, если она не существует, вызовите стандартную команду id :

  if (($ {EUID: -0} || "$ (id -u)"));  затем эхо Вы не root.  else echo Hello, root.  fi  

Таким образом, из-за OR shortcut вы избегаете вызова системной команды, предварительно задавая запрос переменной в памяти.

Повторное использование кода:

  функция amIRoot () {!  (($ {EUID: -0} || "$ (id -u)"))}  
6
ответ дан 9 August 2018 в 10:44

Пользователь root не должен называться «root». whoami возвращает первое имя пользователя с идентификатором пользователя 0 . $ USER содержит имя зарегистрированного пользователя, который может иметь идентификатор пользователя 0 , но имеет другое имя.

Единственная надежная программа для проверьте, зарегистрирована ли учетная запись как root, или нет:

  id -u  

Я использую -u для эффективный идентификатор пользователя, а не -r для идентификатора пользователя real . Разрешения определены эффективным [ пользователем , а не real .

Тесты

/ etc / passwd содержит следующие имена пользователей с идентификатором пользователя 0 в данном порядке:

  rootx root2  

Записан как root2 , дает следующие результаты:

  • whoami : rootx
  • echo $ USER : root2 (это возвращает пустую строку, если программа была запущена в пустой среде, например env -i sh -c 'echo $ USER' )
  • id -u : 0 Как вы можете видеть, другие программы не смогли выполнить эту проверку, только id -u .

Обновленный скрипт будет выглядеть так:

  #! / bin / bash if!  [$ (id -u) = 0];  затем эхо «Я не корень!»  выход 1 fi  
94
ответ дан 9 August 2018 в 10:44

Другие вопросы по тегам:

Похожие вопросы: