python: create ftp user & apache alias

#!/usr/bin/python

import sys
import string
import random
import commands

allowed_chars = (string.letters + string.digits).translate(string.maketrans('',''),'lO0')

FTPHOME="/home/rwpsites/public_html"
WEBCONF="/etc/httpd/sites-available/rwp.hdknr.net.conf.d"
VSFTPD="/etc/vsftpd/chroot_list"

class FtpUser:
  
  def maxuid(self):
    scr="grep \"ftp-\" /etc/passwd | awk -F: '{print $3}' | sort -nr |head -n 1"
    ret = commands.getoutput(scr)
    return  int(ret)

  def groupadd(self,user,uid):
    cmd="groupadd --gid %d ftp-%s" % (uid,user))
    print cmd
    ret = commands.getoutput(cmd )

  def useradd(self,user,uid):
    cmd="useradd --uid %d --gid %d --shell /sbin/nologin --home %s/%s ftp-%s" 
    cmd = cmd % (uid,uid,FTPHOME,user ,user)
    print cmd
    ret = commands.getoutput( cmd )

  def addchroot(self,user):
    cmd="grep ftp-%s %s " % (user ,VSFTPD)
    if len( commands.getoutput(cmd )) < 1 :
      cmd="echo \"ftp-%s\" >> %s" % (user ,VSFTPD)
      print cmd
      ret = commands.getoutput(cmd)

  def chmod(self,user):
    cmd="chmod -R o+x %s/%s"  % (FTPHOME,user)
    print cmd 
    ret = commands.getoutput(cmd)

  def http_alias(self,user,path):
    ec ="Alias %s/%s %s/%s" %(path,user ,FTPHOME,user)
    cmd ="echo %s >> %s/%s.conf"%( ec,WEBCONF,user )
    print cmd
    ret = commands.getoutput(cmd )
    
  def passwd(self,user,passwd):
    print "password is [%s]" % (passwd)
    cmd ="echo %s | passwd --stdin ftp-%s" % ( passwd , user )
    print cmd
    ret = commands.getoutput(cmd )


  def create(self,user,path ):
    uid = self.maxuid() + 1
    self.groupadd(user, uid)
    self.useradd(user,uid)
    self.addchroot(user)
    self.chmod(user)
    self.http_alias(user,path)
    p = Password()
    self.passwd(user,p.gen_pass_core(10))
    
# a fried of mine game this password generating code
#
class Password:
  
  def gen_pass_core(self,passlen):
    password = ''
    for i in range(passlen):
      password += allowed_chars[random.randrange(len(allowed_chars))]
    return password
  
  def gen_pass(self,passlen,strong):
    if strong:
      if passlen < 3:
        raise Exception, 'password length should be larger than 3'
      while True:
        password = self.gen_pass_core(passlen)
        if (password.isalpha() == False and
          password.isdigit() == False and
          password.isupper() == False and
          password.islower() == False):
          return password
          break
    else:
      return self.gen_pass_core(passlen)
  

def test():
  u =FtpUser()
  u.create('hdknr2008','/semi') 
  
  
if __name__ == "__main__":
  test()
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中