linux - parse - ubuntu sudoer file




如何從腳本編輯/ etc/sudoers? (8)

visudo應該是編輯/etc/sudoers的人機界面。 您可以通過直接替換文件來達到相同的效果,但是您必須注意並發編輯和語法驗證。 注意r--r-----權限。

我需要從腳本編輯/ etc / sudoers以添加/刪除白名單中的內容。

假設我有一個可以在普通文件上運行的命令,我怎麼能將它應用到.etc / sudoers?

我可以復制和修改它,然後讓visudo用修改後的副本替換原件嗎? 通過在EDITOR中提供我自己的腳本?

或者我可以只使用相同的鎖和cp?

這個問題更多的是潛在的問題,而不僅僅是找到有效的東西。


你應該對你的臨時文件進行編輯,然後使用visudo -c -f sudoers.temp來確認所做的更改是否有效,然後將它複製到/ etc / sudoers的頂部

#!/bin/sh
if [ -f "/etc/sudoers.tmp" ]; then
    exit 1
fi
touch /etc/sudoers.tmp
edit_sudoers /tmp/sudoers.new
visudo -c -f /tmp/sudoers.new
if [ "$?" -eq "0" ]; then
    cp /tmp/sudoers.new /etc/sudoers
fi
rm /etc/sudoers.tmp

在Debian及其衍生產品中,您可以將自定義腳本插入到/etc/sudoers.d/目錄中,權限為0440 - 有關更多信息,請參閱/etc/sudoers.d/README

它可能有幫助。


如果您的sudo允許在/etc/sudoers.d添加條目,那麼您可以通過@ dragon788使用此答案:

https://superuser.com/a/1027257/26022

基本上你使用visudo來驗證文件,然後再將它複製到sudoers.d中,這樣你就可以確保你不會為任何人破壞sudo。

visudo -c -q -f filename

這將檢查它並返回成功(0),如果它是有效的,所以你可以在if&&和其他腳本布爾操作中使用它。 驗證完成後,將其複製到/etc/sudoers.d使用。 確保它由root擁有,不能被其他人寫入。


用定制編輯器使用visudo。 這解決了Brian解決方案中的所有競爭條件和“黑客”問題。

#!/bin/sh
if [ -z "$1" ]; then
  echo "Starting up visudo with this script as first parameter"
  export EDITOR=$0 && sudo -E visudo
else
  echo "Changing sudoers"
  echo "# Dummy change to sudoers" >> $1
fi

該腳本將向sudoers的末尾添加“#dummy change to sudoers”行。 沒有黑客和沒有競爭條件。

說明這個實際工作原理的註釋版本:

if [ -z "$1" ]; then

  # When you run the script, you will run this block since $1 is empty.

  echo "Starting up visudo with this script as first parameter"

  # We first set this script as the EDITOR and then starts visudo.
  # Visudo will now start and use THIS SCRIPT as its editor
  export EDITOR=$0 && sudo -E visudo
else

  # When visudo starts this script, it will provide the name of the sudoers 
  # file as the first parameter and $1 will be non-empty. Because of that, 
  # visudo will run this block.

  echo "Changing sudoers"

  # We change the sudoers file and then exit  
  echo "# Dummy change to sudoers" >> $1
fi

舊線程,但關於:

echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo

試著回應它。 不過,你必須在子shell中運行它。 例:

sudo sh -c "echo \"group ALL=(user) NOPASSWD: ALL\" >> /etc/sudoers"


這對我來說基於別人在這裡發布的內容。 當我使用其他人的腳本時,它會為我打開visudo,但不會進行編輯。 這使得我需要的編輯允許包括標準用戶在內的所有用戶為safari / firefox安裝java 7u17。

#!/usr/bin/env bash
rm /etc/sudoers.new
cp /etc/sudoers /etc/sudoers.new
echo "%everyone   ALL = NOPASSWD: /usr/sbin/installer -pkg /Volumes/Java 7 Update 17/Java 7 Update 17.pkg -target /" >> /etc/sudoers.new
cp /etc/sudoers.new /etc/sudoers

這增加了%每個人等等等等等等到sudoers文件的底部。 我必須像這樣運行腳本。

sudo sh sudoersedit.sh

祝你好運:D





sudo