cocuh's note

type(あうとぷっと) -> 駄文

sudo sessionが有効なときにmakepkgすると内部でもsudo sessionが使える

先日sudoで遊んでたらきづきました。 既知かもしれませんがblogに書いておきます。

実験

まず、 sudoを叩く PKGBUILDを作る。

sudoが使える場合、このスクリプトは以下のことをする

  • "with sudo: root"と表示
  • /tmp/youjo をroot権限で作成
pkgname=youjo
pkgver=1
pkgrel=1
arch=('i686' 'x86_64')

prepare() {
  echo youjo.prepare
}

build() {
  echo "without sudo:$(whoami)"
  echo "   with sudo:$(sudo whoami)"
  sudo touch /tmp/youjo
  echo youjo.build
}

package() {
  echo youjo.package
}

# vim:set ts=2 sw=2 et:

sudo sessionが有効でないとき

pass promptがでてsudoまで行ってることがわかります。 f:id:cocu_628496:20160131154257p:plain

sudo sessionが有効なとき

pass promptがでず、sudoが実行されていることがわかります。 fakerootでもなく、 /tmp/youjoがrootにより作られたことがわかります。 f:id:cocu_628496:20160131154416p:plain

結論

makepkg するときや、yaourt hogehoge するときは sudo sessionを無効化(sudo -k)したほうがいいかも。

こわいのは、AURでなにか入れようとして依存ライブラリが入ってないときで、
依存ライブラリのinstallでsudo timestampが作られて、sessionが有効な状態でAURをビルドし始めそう。

ちなみに

package()だけfakeroot使ってるっぽいです。なんでじゃろか。rootじゃないとエラーだすMakefileでもあったのかな f:id:cocu_628496:20160131155103p:plain

pkgname=youjo
pkgver=1
pkgrel=1
arch=('i686' 'x86_64')

prepare() {
  echo $(whoami)
  echo youjo.prepare
}

build() {
  echo $(whoami)
  echo youjo.build
}

package() {
  echo $(whoami)
  echo youjo.package
}

# vim:set ts=2 sw=2 et: