Unixアカウント管理

研究室OBのアカウント停止作業。
Unixアカウントについては

  usermod  -L  #停止
  uesrmod  -U  #再開

で管理できます。

アカウント停止者のリスト表示をするコマンドはなかったかなと思い、Googleで調べていたら
なかなか斬新な記述を発見。

Unixにログインされるユーザーをリストする多くの命令がある。
.. (中略) ..
$猫/etc/passwd |切口- d: - f5

http://www.tech-faq.com/lang/ja/list-unix-users.shtml
猫って。。。



結局、自作スクリプトを書いて対処しました。

#!/usr/bin/ruby
require 'optparse'
require 'etc'

$opt_user_type = "all"
$min_user_id = 1000
$shadowfile = "/etc/shadow"

ARGV.options {|opt|
  opt.on('-l', 'List locked user accounts') { $opt_user_type = "locked" }
  opt.on('-a', 'List available user accounts') { $opt_user_type = "available" }
  opt.parse!
}

user_list = {}
Etc.passwd {|p|
  user_list[p.name] = {:id=>p.uid, :group=>Etc.getgrgid(p.gid).name} if p.uid >= $min_user_id
}

user_list.delete("nobody")
case $opt_user_type
when "all"
  nil
when "locked"
  File.foreach($shadowfile) { |line|
    f = line.split(':')
    user_list.delete(f.first) unless f[1] =~ /^!/
  }
when "available"
  File.foreach($shadowfile) { |line|
    f = line.split(':')
    user_list.delete(f.first) if  f[1] =~ /^!/
  }
end

user_list.each_pair { |user_name, user_info|
  puts "#{sprintf("%-10s",user_name)}: uid(#{user_info[:id]}) group(#{user_info[:group]})"
}