GeekFactory

int128.hatenablog.com

管理者特権に切り替えてコマンドを実行する(sudo)

Vistaコマンドプロンプトでは、ユーザ権限でプログラムが実行されます。管理者権限を必要とするプログラムではエラーが出てしまいます。そこで、sudoのようなコマンドがないか探してみました。
FACE Products Homepage - ブログ : [Vista] 管理者モードで起動 - suコマンド by face
管理者権限に切り替えてプログラムを実行するスクリプトです。vbsで書かれています。これはすごい。sudoあってこその特権分離ですね。

システムの起動・終了時に記録されるイベントログ

Windows Vistaにて調べてみました。

ログのタイミングソースイベントIDメッセージ
起動EventLog6005イベント ログ サービスが開始されました。
終了EventLog6006イベント ログ サービスが停止されました。
休止状態に移行Kernel-Power42システムがスリープ状態になります。
休止状態から回復Power-Troubleshooter1システムはスリープ状態から再開しました。

ただし、Power-Troubleshooterメッセージは即時に記録されず、終了時または休止状態に移行時に一緒に記録されるようです。
これらのイベントをWMIで取得するためのコードも載せておきます。プロパティの名前などは WMI Creator で確認すると便利ですね。

var wbemFlagReturnImmediately = 0x10;
var wbemFlagForwardOnly = 0x20;
var eventObject = GetObject('winmgmts:{impersonationLevel=impersonate}');
var eventSet = eventObject.ExecQuery(
'select TimeGenerated, EventCode from Win32_NTLogEvent' +
' where ((EventCode = 6005 or EventCode = 6006) and SourceName = "EventLog")' +
' or (EventCode = 1 and SourceName = "Microsoft-Windows-Power-Troubleshooter")' +
' or (EventCode = 42 and SourceName = "Microsoft-Windows-Kernel-Power")',
'WQL',
wbemFlagReturnImmediately | wbemFlagForwardOnly);

windowsからssh経由でフォルダを読み書きする方法

root権限のあるLinuxマシンを用意する。ないときはVirtualBox等のVM上にLinuxを構築しよう。ここではUbuntuを前提として書く。

f:id:int128:20080119152624p:image

sshfsのインストールと設定

sshfsをインストールする。

# apt-get install sshfs

/etc/fuse.conf を書き換える。user_allow_otherのコメントを外す。これにより、マウントしたユーザ以外もフォルダを見ることができるようになる*1

user_allow_other

マウントポイントを作成する。

# mkdir -p /mnt/remote/hoge.org

起動スクリプトを書く。ユーザ権限でマウント操作を実行するが、このとき allow_other オプションを指定するのがポイントである。

vim /etc/init.d/sshfs-hoge.org
#!/bin/sh

### BEGIN INIT INFO
# Provides:             sshfs
# Required-Start:       $network $local_fs $remote_fs
# Required-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Mount hoge.org via sshfs
### END INIT INFO

. /lib/lsb/init-functions

case "$1" in
start)
log_daemon_msg "Mount hoge.org via sshfs"
su ローカルのユーザID -c 'sshfs リモートのユーザID@ホスト名:. /mnt/remote/hoge.org -o idmap=user,allow_other,transform_symlinks'
;;
stop)
log_daemon_msg "Unmount hoge.org"
umount /mnt/remote/hoge.org
;;
esac

exit 0

サービスを開始する。

# /etc/init.d/sshfs-hoge.org start

必要に応じて、起動時に開始するか設定する。

# sysv-rc-conf

公開鍵認証の設定

リモートサーバで鍵を生成する。パスフレーズは空にしておく。

$ ssh リモートのユーザID@ホスト名
Enter password: 〜

リモート$ ssh-keygen -b 1024
リモート$ logout

秘密鍵をローカルにコピーする。

$ scp リモートのユーザID@ホスト名:.ssh/id_dsa .ssh

sambaのインストールと設定

sambaをインストールする。

# apt-get install samba swat
# smbpasswd ローカルのユーザID
Enter password: 〜

あとはwindowsマシンからWeb経由で設定を行う。

http://LinuxマシンのIPアドレス:901/

参考までに、うちの設定の一部を掲載する。

[global]
server string =
load printers = No
dns proxy = No
invalid users = root
create mask = 0644

[home]
path = /home/hoge
valid users = hoge
read only = No

[remote]
path = /mnt/remote
valid users = hoge
read only = No


*1パーミッションによる制限とは別。このオプションを指定しない場合は、マウントポイントがフォルダとして認識されなくなる。