bashやzshでsudoを使う際、aliasは-Eでsudoに渡せるがfunctionは渡すことができない。 sudo自体にはfunctionを引き継がせるようなオプションは無く、そのままでは定義しているfunctionはsudoで実行させることができない。 じゃあどうするかというと、基本的には別途そのためのfunctionを別に設定してやり、それをsudoのaliasとして定義してやる。 以下、設定のサンプル。

function SudoFunc() {
    local CMD=${1} # 実行コマンドを取得する

    # 実行コマンドのタイプを取得する
    case $...

最近、色々とsudoで設定を変えたりすることが多かったので調べてみたら、結構色々な設定やsudoコマンドのオプションとかがあるようだったので、調べた内容から基本的な設定や便利そうな使い方についてまとめてみることにした。 なお、/etc/sudoersではなくLDAPでもポリシー設定はできるようなのだが、あまり使うパターンも少ないだろうから今回は割愛する。 SELinuxのポリシー設定についても設定はできるようなのだが、今回は割愛する。 なお、検証にはCentOS 7の以下のバージョンを用いている。

[root@BS-PUB-CENT7-01 test]# sudo -V | head -1...

前にssh越しにsudo経由でtarを用いるという事をやっていたのだが、今回はrsync。 で、rsyncもそうみたいなのだが、ssh越しで擬似端末(tty)を使っての通信できないらしい。 こうなると、sshで「-tt」オプションを付けて擬似端末を有効にしての対応は難しいので、CentOSなどのデフォルト(AWSとかAzure上のイメージでは手が入ってるので対象外)だとsudo実行時には擬似端末を要求する指定(Defaults requiretty)を解除する必要があるようだ。 ユーザごとに設定もできるのだが、面倒であれば以下のようなコマンドを実行してrequirettyを無効化してしまお...


Windowsで作業をしていると、時折DOSコマンド(ネットワーク系のコマンドとか)を管理者として実行させたい時がある。 個人的に、あまりマウス操作のためにキーボードから手を離したくない性質なので、そういった場合は[Windowsキー押下]そのまま対象のプログラム名を入力して検索(cmd)起動したいプログラム名(コマンドプロンプト)を選択して、[Ctrl] + [Shift] + [Enter]キーを押下して管理者として実行 させているのだが、開きっぱなしのコマンドプロンプトからそのまま管理者としてコマンドを実行したい場合もある。 プログラムを別途インストールすれば楽み...


Rundeckでリモートサーバに対してsudoを用いた処理をさせたいことがある。 ジョブ実行ユーザ(今回の例だとrundeckユーザ)には鍵認証しか許可させない(+authorized_keysで接続元のIPをRundeckサーバに制限)するなどで接続時のセキュリティは担保できるので、sudo実行時にパスワードはいらない前提とすると、以下のように「/etc/sudoers」に追記してやればよい。 さすがになんでもsudo実行できるとちょっと問題なので、sudoで実行できるプログラムは制限してやればよい。

/etc/sudoers
rundeck ALL=(ALL) NOPAS...

sudoによるリダイレクトでの書き込み

一般ユーザを利用していて、sudoでリダイレクトをして権限の無いファイルに追記をさせたい事があるだろう。
そんな時、以下のように普通にコマンドを実行した場合、権限が無いと言われ書き込みに失敗してしまう。

sudo echo "test line 2" >> /work/test

test@ubuntu-server:~$ sudo echo "test line 2" >> /work/test
-bash: /work/test: 許可がありません


sudoのパスワード入力で\*(アスタリスク)を表示させる

コンソールでsudoコマンドを利用する際、パスワードの入力を行うように促される。
で、当たり前といえば当たり前だが、セキュリティの観点から入力した文字数も分からないようにしている。

でも、何文字打ったのかわからないし、文字入力間違えた際にバックスペースで削除しても、文字がちゃんと消えているか不安…
そんな時は、sudoの設定値に以下のように「pwfeedback」を追加することで、パスワードの入力文字を「*(アスタリスク)」にすることが出来る。

変更する箇所は以下。

Before

Defaults        env_reset

...