web-dev-qa-db-ja.com

コマンドラインから非対話的にsudoerを追加します

(Dockerを介したCentosで)

visudoを使用してsudoerを追加できることを知っています。コマンドラインから直接sudoerリストにユーザーを追加する方法はありますか?インタラクティブに追加する必要はありませんか?

対話性で動作しないDockercentosコンテナをプロビジョニングしようとしているので質問しています。

6
Roy Truelove

catを使用して、/etc/sudoersの末尾にテキストを追加できます。まず、/etc/sudoersファイルのバックアップコピーを作成します。次に:

cat >> /etc/sudoers
...type one or more lines here...
[control-D]

1つだけではなくtwoより大きい文字(>>)を使用するようにしてください。そうしないと、ファイルの内容全体が上書きされます。

2
mhucka

Dockerコンテナを取得して、jenkinsスクリプトがパスワードの入力を求めずにSudoコマンドを使用できるようにしようとすると、同様の問題が発生しました。

これはDockerfileを介して解決されました:

RUN echo "jenkins ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
11
TemporalWolf

これを行うには、sudoersファイルに次の行があることを確認する必要があります。

%Sudo   ALL=(ALL:ALL) ALL

上記の行をカスタマイズして、%Sudoがユーザーであるかのように権限を変更できます。この行により、SudoグループのすべてのユーザーがSudoを使用できるようになります。

<username>Sudoを使用できるようにするには、ルートとしてusermod -a -G Sudo <username>を実行するだけで、<username>Sudoグループに追加されます。

2
BenjiWiebe

ubuntu:18.04のベースイメージを使用してroot以外のユーザーを設定する方法は次のとおりです。

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G Sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%Sudo.*/%Sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id

上記のコードで何が起こりますか:

  • ユーザーとグループfooが作成されます。
  • ユーザーfooは、fooグループとSudoグループの両方に追加されます。
  • uidおよびgid999の値に設定されます。
  • ホームディレクトリは/home/fooに設定されます。
  • シェルは/bin/bashに設定されています。
  • sedコマンドは、/etc/sudoersファイルをインライン更新して、fooおよびrootユーザーがSudoグループにパスワードなしでアクセスできるようにします。
  • sedコマンドは、サブディレクトリ内のすべてのファイルがこれらのインライン更新をオーバーライドできるようにする#includedirディレクティブを無効にします。
2
Seth Bergman

特権アクセスを必要とするファイルに追加するための一般的な配置は、teeを使用することです。もちろん、その主な目的は2つの場所に書き込むことですが、そのうちの1つを破棄して、Sudo tee -aが特権追加を与える副作用を使用することができます。

だから、

printf 'you ALL=(ALL:ALL) ALL\n' | Sudo tee -a /etc/sudoers >/dev/null

この特定の問題を解決する代わりに、コメントに同意して、ユーザーをsudoersグループに追加します。

1
tripleee

この投稿の時代を考えると、より現代的な方法は、ユーザーごとのファイルを/etc/sudoers.d/または参照しているOSの適切な同様の場所に配置することです。 sudoersファイルに次のような行が含まれている限り:

#includedir /etc/sudoers.d

次に、このようなスクリプトを使用して、任意の有効なユーザー名のユーザーごとのsudoersファイルを作成できます。

#/usr/bin/env bash

SUDOERS_DIR='/etc/sudoers.d/'

if [ $# -eq 1 ]
then
    printf '%s ALL=(ALL:ALL) ALL\n' "$1" > "$SUDOERS_DIR$1" && \
        chmod 600 "$SUDOERS_DIR$1"
else
    printf 'usage: $0 (username)\n'
    printf '(username) will be given Sudo privileges\n'
    exit 1
fi

これにより、特権のないユーザーは次のようになります。

/home/jim> Sudo -i
Password:
jim is not in the sudoers file.  This incident will be reported.

ユーザーごとにSudoアクセスを簡単に付与できます。

/root# ./addsudo.sh 
usage: $0 (username)
(username) will be given Sudo privileges
/root# ./addsudo.sh jim
/root# ls -l /etc/sudoers.d/
total 1
-rw-------  1 root  wheel  22 Oct  4 15:35 jim
/root# cat /etc/sudoers.d/jim
jim ALL=(ALL:ALL) ALL

そして出来上がり:

/home/jim> Sudo -i
Password:
/root#

Sudo特権を取り消すときが来たら、そのユーザーのファイルをrmするだけです。

# rm /etc/sudoers.d/jim
0
Jim L.

Sudoersで「wheel」グループを有効にすることから始めて、ユーザーをそのグループに追加するだけで済みます。 sudoersファイルの畳み込みを回避します。

0
bbaassssiiee

ユーザー作成時に、次の方法でユーザーsomeoneSudoグループに属することを指定できます。

useradd --groups Sudo someone

すでに存在するユーザーの場合は、次の方法で新しいグループに追加できます。

gpasswd --add someone Sudo

gpasswdよりもusermodを好む理由を知りたい場合は、 この回答 を参照してください。

0
whoan