SFTPのみ接続可。sshでのシェルは排除。
設定は以下のようにする。
# groupadd sftp_users # usermod -G sftp_users mokyu # vi /etc/ssh/sshd_config 147行目コメント化にしてその下に追記します # override default of no subsystems #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp #SFTP Chroot化専用設定(最終行に追記) Match Group sftp_users X11Forwarding no AllowTcpForwarding no ChrootDirectory /home ForceCommand internal-sftp
また、rsshを利用すると、scpやsftpなどコマンドを制約した使い方できるようになる。
references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use themが出た
このメッセージが出た場合は最初のcreatetableの際に変な設定が入っていることがある。
具体的に言うと後で全部の権限をuserに付与しても中のテーブルは特定のユーザしか見れなくなっている。
dumpしてloadした後にこのようなメッセージが出れば、以下の動作を行えばいい。
CREATE ALGORITHM=UNDEFINED DEFINER=`hoge1`@`%` SQL SECURITY DEFINER VIEW `view_count` AS ... ↓ CREATE ALGORITHM=UNDEFINED DEFINER=`hoge2`@`%` SQL SECURITY DEFINER VIEW `view_count` AS ...
Apacheのアクセス制限について
そもそもアクセス制限について、Apacheの制御もしくはファイヤーウォールなどの外部機器での制御(iptable)がある。 ファイヤーウォールはインフラに含まれるんだなあと思いました。
Mysqlのデータを変更する(MySQL-python==1.2.5)
データベースのqueryを整形する。データベースに突っ込む前に"をつけるのが必要なのとないのがあって訳わからん。 ついでにutf-8に変換しないといけないのと、conn.commit()しないとinsertが反映されないということでばりつまづいた。
# -*- coding: utf-8 -*- # vim:tabstop=4:shiftwidth=4:expandtab import sys import MySQLdb from datetime import datetime, timedelta import argparse def alter_sql_query(conn, day): date = datetime.strptime(day, "%Y%m%d") next_day = date + timedelta(days=1) cur = conn.cursor() try: sql = ''' SELECT `[id]`, `[date]`, `[query]` FROM `[table名]` WHERE `[date]` >= \"{day}\" AND `[date]` < \"{next_day}\" '''.format(day=date.strftime("%Y-%m-%d"), next_day=next_day.strftime("%Y-%m-%d")) cur.execute(sql) rows = [] ori_rows = cur.fetchall() for row in ori_rows: # [それなりの処理、"をつけたりつけなかったり。datetimeは放置で大丈夫な感じ] rows.append(tuple(row)) bind = ','.join([ '({0})'.format(','.join(['%s'] * 3)) ] * len(rows)) sql = ''' INSERT INTO `[table名]` (`[id]`, `[date]`, `query`) VALUE {bind} ON DUPLICATE KEY UPDATE `query` = VALUES(`query`) '''.format(bind=bind, ) params = [] for v in rows: params.extend(v) # import pdb; pdb.set_trace() cur.execute(sql, params) except Exception as e1: raise e1 finally: cur.close() def execute(day): conn = MySQLdb.connect(host="127.0.0.1", db="zoff", user="zoff", passwd="zoff", charset="utf8") check = raw_input('(yes/no): ') if check != "yes": sys.exit(0) alter_sql_query(conn, day) conn.commit() conn.close() if __name__ == '__main__': print 'the operation start', datetime.now().strftime("%Y-%m-%d %H:%M:%S") parser = argparse.ArgumentParser() parser.add_argument('-d', action='store', dest='day', help='checkday') day = parser.parse_args().day execute(day) print 'the operation finish', datetime.now().strftime("%Y-%m-%d %H:%M:%S")