[Linux] あるユーザーの権限と同じ権限を別ユーザーに付与する


環境

OS: Ubuntu 16.04

背景

新しいユーザー(名前はansible)を作成したのですが、

ふと、、、この新ユーザーの権限は、

「vagrantユーザーと同等の権限を付与したいなー」

という風に思ったわけです。

ということで権限確認するわけですが、

$ id vagrant
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)

この結果から、group名を1つ1つ取り出して、

$ sudo gpasswd -a ansible adm 

を手打ちで繰り返すの嫌だな、、、 と思い、

正規表現で何とかならないかなー

と考えたのが背景です。

(2019/2/4追記) コメントより抜粋

@angel_p_57 さんのご指摘により 1行のコマンドでまとめられる事を教えていただきました。

以下がスマートで良いです。

$ sudo usermod -a -G $(id -nG vagrant | tr " " ,) ansible

正規表現でなんとかしてみる(当初自分で考えたやり方)

普段、sedをあまり使わないので、手探りですが、

以下のように書いてみました。

$ echo `id vagrant` | sed -e 's/[0-9\(,\ ]//g'| sed -e 's/)/\n/g' > vagrant_group.txt

2回sedを噛ましてますが、

1回目は、数字と左括弧、カンマとスペースを消してます。

2回目は、右括弧を改行に変えてます

最後に、加工した内容を vagrant_group.txt に出力します。

結果

vagrant_group.txtは下記のようになります。

vagrant_group.txt
uid=vagrant
gid=vagrant
groups=vagrant
adm
cdrom
sudo
dip
plugdev
lxd
lpadmin
sambashare

最初の3行もsedで削除すべきですが、コマンドが長くなりそうだったので、やめました。

後は4行目からvagrant_group.txtを読み込んで、group_add するだけです。

$ tail -n +4 vagrant_group.txt | xargs -I {} sudo gpasswd -a ansible {} 

参考

ファイルのn行目以降を表示する