「Linux」カテゴリーアーカイブ

rsync and sudo over SSH

rsync and sudo over SSH « crashingdaily
sudo + rsync | きぬろぐ
rsyncでリモートサーバのバックアップを取る場合に、バックアップするユーザに権限がないファイルやディレクトリのバックアップが取れない。
取れるようにするためには、rsyncをsudoで実行すればよい。
まずバックアップされるサーバ側で、バックアップユーザがsudoできるようにする。

# visudo

で、/etc/suduersに以下を加える。

backup ALL= NOPASSWD:/usr/bin/rsync

バックアップされるサーバ側で、.ssh/authorized_keysのcommandオプションでsshで実行できるコマンドを制限している場合は、
sudo\ rsync\ --server
も許可するようにする。
そして、rsync実行時のオプションに

--rsync-path="sudo rsync"

を追加する。
さて、これで設定はOKなはずなので、この状態でバックアップサーバからバックアップを実行すると、、、

sudo: sorry, you must have a tty to run sudo

というエラーになる。
これは、バックアップされるサーバ側の/etc/sudoers ファイルで、'requiretty' フラグがデフォルトで設定されているから。このフラグが設定されている場合、ログインしているユーザ以外はsudoできない。つまり、sshやrsh経由のリモートでのsudoコマンドの実行が許可されない。
Red Hat Knowledgebase: ssh 経由で sudo コマンドを実行すると、tty エラーとなります。
これを回避するには、sudoersでrequirettyフラグを設定しないようにする。

# visudo

で、/etc/sudoers の以下の行をコメントアウト。

#Defaults    requiretty

これで、OK。

Create SSL certificate valid with 365 days, by Debian make-ssl-cert mini-HOWTO

Create SSL certificate valid with 365 days, by Debian make-ssl-cert mini-HOWTO | Drupal
/usr/sbin/make-ssl-cert で作成される証明書は、期限が30日。この期間を長くする。
/usr/sbin/make-ssl-certを以下のように変更。( -days 365を追加する。)

openssl req -config $TMPFILE -new -days 365 -x509 -nodes -out $output -keyout $output > /dev/null 2>&1

make-ssl-certは、以下のように実行する。

$ sudo /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/xxxxxx.pem

Ubuntuにrmagickをインストール(ソースからインストールしたruby+gem)

Ubuntuのソースインストールしたruby環境に、rmagickをインストールした。
■ aptitudeでimagemagick libmagick9-devをインストールする。
※ libmagick-devやlibmagick9++-devなど他のパッケージではgraphicsmagickがインストールされ、railsのプラグインattachment_fuがうまく動作しなかった。(strip!メソッドはImageMagick1.1にはない、みたいなエラーになった。)

$ sudo aptitude install imagemagick libmagick9-dev

■ rmagickをgemでインストール。 (rmagick2がインストールされる。)

$ sudo gem install rmagick

■ 確認

$ convert --version
Version: ImageMagick 6.3.7 06/04/09 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2008 ImageMagick Studio LLC
$ irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'RMagick'
=> true
irb(main):003:0> exit

findで検索した結果を削除したりgrepする方法

-exec command {} \;
  • 検索後、コマンドcommandを実行する。検索結果をcommandに引き渡すには、{}をもちいる。
  • \; の前に空白が必要。空白がないと、
    find: `-exec' に引数が見つかりません
    

    とか

    find: -exec: no terminating ";" or "+"
    

    というエラーになる。

  • 複数のコマンドを実行する場合は、-exec を複数指定すればよい。

例:

find ~ -name '*bak' -exec rm {} \;
  • 上記の例で-execにつづくrm {} \;が実行されるコマンド。最後の";"は-execのパラメタの終わりを示しており、その前の"\"は、";"がシェルに解釈されないようにエスケープする為のもの。

例:
ホームディレクトリ以下にある*~(emacsのバックアップファイル)を全て削除

$ find ~/ -name "*~" -exec rm {} \;

Subversionの作業コピーディレクトリから.svnディレクトリを全て削除する。

find . -name .svn -exec rm -rf {} \;

ディレクトリ配下のファイルをgrepする
(grepのオプション -H はファイル名表示、-n は行番号表示)

find ディレクトリ -type f -exec grep -nH 文字列 {} \;