2017年6月27日火曜日

CentOS Pamでケルベロス認証 グループ制限

  • このエントリーをはてなブックマークに追加


CentOS Pamでケルベロス認証 グループ制限 Pamでケルベロス認証のための設定をメモしておきます。
グループでログイン制御することもできます。
参考情報
https://www.linux.iastate.edu/content/using-pam-kerberos-authentication-and-group-access-control
/etc/pam.d/system-authのサンプル
testgroup以外のユーザーはログインできないようにする
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
# only allow auth for member of testgroup
auth        requisite    pam_succeed_if.so user ingroup testgroup
auth        requisite     pam_succeed_if.so uid >= 500 quiet
# for kerberos
auth        sufficient    pam_krb5.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
# for kerberos
account     [default=bad success=ok user_unknown=ignore] pam_krb5.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
# for kerberos
password    sufficient    pam_krb5.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
# for kerberos
session     optional      pam_krb5.so
グループ制御ではingroup, notingroupというのがあります。
ingroupはグループ内のユーザーしかログインできない
notingroupはグループに所属していないユーザーしかログインできない。

2017年6月15日木曜日

Hortonworks ODBCでHIVEServerに接続する設定手順

  • このエントリーをはてなブックマークに追加


HortonWorks ODBCでHIVEServerに接続する設定手順 ODBCでHIVEに接続する手順をメモしておきます。

HortonWorksサイトからODBCドライバーをダウンロード

https://jp.hortonworks.com/downloads/
Hortonworks ODBC Driver for Apache Hive (v2.1.7)

ODBCドライバーをインストール

 $ sudo rpm -ivh hive-odbc-native-2.1.7.1010-1.el6.x86_64.rpm

 インストール先確認
 $ ls /usr/lib/hive/lib/native

.odbc.iniを作成

 $ cd /usr/lib/hive/lib/native/Linux-amd64-64
 $ cat .odbc.ini
 ---------------------------------------------------------------
 [ODBC]

 [ODBC Data Sources]
 HIVE

 [HIVE]
 Driver=/usr/lib/hive/lib/native/Linux-amd64-64/libhortonworkshiveodbc64.so
 #環境ごとに変更
 HOST=srv.example.com
 PORT=10000
 Schema=
 ServiceDiscoveryMode=0
 ZKNamespace=
 HiveServerType=2
 #kerberos認証にするため、AuthMechを1に設定
 AuthMech=1
 ThriftTransport=1
 UseNativeQuery=0
 UID=hue
 #環境ごとに変更
 KrbHostFQDN=srv.example.com
 KrbServiceName=hive
 #環境ごとに変更
 KrbRealm=example.com
 SSL=0
 TwoWaySSL=0
 ClientCert=
 ClientPrivateKey=
 ClientPrivateKeyPassword=
 ---------------------------------------------------------------
 権限変更、しないとエラーが出る可能性があります。
 $ chmod 777 .odbc.ini
サンプルファイルは以下にあります。
 /usr/lib/hive/lib/native/hiveodbc/Setup/odbc.ini

環境変数設定

xport ODBCINI=/usr/lib/hive/lib/native/Linux-amd64-64/.odbc.ini
 or
/etc/profileにexport ODBCINI=/usr/lib/hive/lib/native/Linux-amd64-64/.odbc.ini を追加

参考Kerberos設定

$ cat /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
#includedir /etc/krb5.conf.d/

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 30d
 renew_lifetime = 7d
 forwardable = true

# for One-Way Trust with Active Directory
 permitted_enctypes   = des-cbc-crc des-cbc-md5 arcfour-hmac aes128-cts-hmac-sha1-96 aes256-cts-hmac-sha1-96
 udp_preference_limit = 1

[realms]
 EXAMPLE.COM = {
  kdc = or
hostname> admin_server = or hostname> } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM

ERROR

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "/tmp/hound/hound/tbx/hoover/_hoover_price.py", line 75, in fetch_hoover_price
    verbose=verbose
  File "/tmp/hound/hound/tbx/odbc/_odbc.py", line 55, in execute
    autocommit=True
pyodbc.Error: ('08001', '[08001] [unixODBC][Hortonworks][ODBC] (10380) Unable to establish a connection with data source. Missing settings: {[Host] [Port]} (10380) (SQLDriverConnect)')
  • 解決
    .odbc.iniファイルの権限を見直す 777にするとか

2017年2月14日火曜日

Mac Juypter インストール時にエラー [Errno 1] Operation not permitted

  • このエントリーをはてなブックマークに追加


Mac Juypter インストール時にエラー [Errno 1] Operation not permitted Mac にJuypterをインストールしようとすると、以下のようなエラーが発生しました。
sudo pip install jupyter
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip/req/req_set.py", line 778, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip/req/req_install.py", line 754, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move
    copytree(src, real_dst, symlinks=True)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree
    raise Error, errors
Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', "[Errno 1] Operation not permitted: '/tmp/pip-KoEdh2-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib'")]

解決

python 再度インストール
brew reinstall python
再度実行で成功

2017年2月12日日曜日

AWS Lambda RDSにデータをInsertするとError発生時にアラート通知

  • このエントリーをはてなブックマークに追加


AWS Lambda RDSにデータをInsertするとError発生時にアラート通知 AWS LambdaでRDSにデータをインサートする処理を実現しています。
正しくインサートするときに何もしなく、そのまま終了、
インサートするときにエラーが発生した場合は、Alertメールで通知したい。

Sample Code

var mysql = require('mysql');
exports.handler = function(event,context,callback){
    var No = event.No
    var Birth = event.Birth
    var Email = event.Email
    var Name = event.Name

    if(No == null || Birth == null || Email == null || Name == null){
        context.done('FAILED');
    }

    var connection = mysql.createConnection({
      host     : 'rds endpoint url', //RDSのエンドポイント
      user     : 'root', //MySQLのユーザ名
      password : 'password', //MySQLのパスワード
      database : 'db'
    });

    connection.connect();

    var insert_sql = "insert into User (No, Birth, Email, Name) value ('" + No + "','" + Birth +"','" + Email +"','" + Name + "')"
    connection.query(insert_sql, function(err, rows, fields) {
      if (err)
      {
        console.log("--err");
        console.log(err);
        callback(new Error("FAILED"));
      }
    });

    connection.end(function(err) {
        context.done('SUCCESSED');  
    });
}

Lambdaモニタリング設定

「Lambda ⇒ 「関数」 ⇒ 「モニタリング」タブで【呼び出しエラー】というものがあります。
monitoring
これを設定すればエラー発生したら、設定したメールアドレスにメールが飛びます。
エラー(Errors)
が>=1
を1回連続した場合

間隔:5分間
統計:Standard
などの値を設定し、通知の送信先を選択する。
alert
これでうまくいくかと思いきゃ、実は成功のときも、エラーが通知されてしまいます。よくないね。いろいろ調べたところ、このエラーは以下の意味を示しています。
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/lam-metricscollected.html
- 処理された例外 (context.fail(error) など)
- コードの終了を起こす処理されない例外
- メモリ不足例外
- タイムアウト
- 権限エラー

解決

ソースコードの以下の部分が悪かった。
 connection.end(function(err) {
        context.done('SUCCESSED');  
    });
これだと、実行後常にエラーメッセージSuccessedで以上終了してしまいます。
以下のように変更すれば、正常に終了されます。
 connection.end(function(err) {
        context.done();  
    });
結構ハマりました。

2017年2月3日金曜日

AWS Lambda connect ETIMEDOUT

  • このエントリーをはてなブックマークに追加


AWS Lambda connect ETIMEDOUT AWS LambdaでDB接続してデータをインサートするFunctionを書いていて、以下のような ETIMEDOUTエラーが出力されました。エラーがあったが、処理自体は正常に行われてデータがちゃんとDBに挿入されてます。
Error
2017-02-03T05:11:32.012Z    c31fa576-e9cc-11e6-85b4-5dea6b0e5632    { [Error: connect ETIMEDOUT] errorno: 'ETIMEDOUT', code: 'ETIMEDOUT', syscall: 'connect', fatal: true }
Code
var mysql = require('mysql');
exports.handler = function(event,context,callback){
    var No = event.No
    var Birth = event.Birth
    var Email = event.Email
    var Name = event.Name

    if(No == null || Birth == null || Email == null || Name == null){
        context.done('FAILED');
    }

    var connection = mysql.createConnection({
      host     : 'rds endpoint url', //RDSのエンドポイント
      user     : 'root', //MySQLのユーザ名
      password : 'password', //MySQLのパスワード
      database : 'db'
    });

    connection.connect();

    var insert_sql = "insert into User (No, Birth, Email, Name) value ('" + No + "','" + Birth +"','" + Email +"','" + Name + "')"
    connection.query(insert_sql, function(err, rows, fields) {
      if (err)
      {
        console.log("--err");
        console.log(err);
        callback(new Error("FAILED"));
      }
    });

    connection.end(function(err) {
        context.done('SUCCESSED');
    });
}
いろいろ調べたのですが、LambdaのTimeout値を超えたとか、RDSへのアクセス権ないとか、いろいろありました。
自分の場合は、connection.connect() の一番先頭に持っていたらうまくいった。よくわからんけど。
以下の様な感じです。
var mysql = require('mysql');
exports.handler = function(event,context,callback){
    var connection = mysql.createConnection({
      host     : 'rds endpoint url', //RDSのエンドポイント
      user     : 'root', //MySQLのユーザ名
      password : 'password', //MySQLのパスワード
      database : 'db'
    });

    connection.connect();

    var No = event.No
    var Birth = event.Birth
    var Email = event.Email
    var Name = event.Name

    if(No == null || Birth == null || Email == null || Name == null){
        context.done('FAILED');
    }

    var insert_sql = "insert into User (No, Birth, Email, Name) value ('" + No + "','" + Birth +"','" + Email +"','" + Name + "')"
    connection.query(insert_sql, function(err, rows, fields) {
      if (err)
      {
        console.log("--err");
        console.log(err);
        callback(new Error("FAILED"));
      }
    });

    connection.end(function(err) {
        context.done('SUCCESSED');
    });
}