2

#Solaris の sudoers ファイルを特定の行で削除または追加して編集したいのですが#、このためのスクリプトをどのように記述すればよいですか? 以下に示す私のsudoerサンプルファイル:

# The following line allows su without options/arguments and sux to user root
Cmnd_Alias SU_ROOT = /usr/bin/su "",\
                     /usr/local/bin/sux - root

# Defaults specification
Defaults:%saptb !authenticate

# User privilege specification
%saptb  ALL=(root)SU_SAP
#Uncomment this line when SAP requires root access
%saptb ALL=(root)SU_ROOT
##### END SAP-TB specific  ######
#
#
#Tivoli ITM Tools Team Sudo Right
#
%cgtools        ALL=(root)       NOPASSWD: /opt/IBM/ITM/bin/*

この上記のsudoersファイル#では、次の唯一の行の前に追加したい%saptb ALL=(root)SU_ROOT

4

1 に答える 1

2

で置換を行いsedます:

# Comment out the line %saptb ALL=(root)SU_ROOT
sudo sed -Ei 's/^(%saptb.*SU_ROOT.*)/#\1/' /etc/sudoers

説明:

-E拡張を使用regex

-iその場でファイルを編集します。

s/         # Substitution
^          # Match the start of the line
(          # Capture the following
%saptb     # Followed by %saptb
.*         # Followed by anything
SU_ROOT    # Followed by SU_ROOT
.*         # Followed by anything
)          # Close capture
/          # Replace with 
#          # A hash 
\1         # Followed by the captured line

行のコメントを解除するには、原則は同じです。

  1. 行頭に合わせる
  2. 続いて#
  3. 残りの行をキャプチャする
  4. 行全体を行のキャプチャされた部分に置き換えます ( を破棄します#)。

そう:

# Uncomment the line %saptb ALL=(root)SU_ROOT
sudo sed -Ei 's/^#(%saptb.*SU_ROOT.*)/\1/' /etc/sudoers

次のスクリプトを使用して、実行することでコメント/コメント解除できますsudo ./toggle.sh

#!/bin/bash

# Is the line already commented out
grep -q '#%saptb ALL=(root)SU_ROOT' /etc/sudoers

if [ $? -eq 0 ]; then 
    # Uncomment the line %saptb ALL=(root)SU_ROOT
    sed -Ei 's/^#(%saptb.*SU_ROOT.*)/\1/' /etc/sudoers
else 
    # Comment out the line %saptb ALL=(root)SU_ROOT
    sed -Ei 's/^(%saptb.*SU_ROOT.*)/#\1/' /etc/sudoers
fi
于 2012-11-29T13:30:11.983 に答える