Bagaimana cara menyembunyikan informasi sensitif seperti kata sandi plaintext dari log?


10

Saya tidak memiliki akses ke instalasi Postgres, jadi saya tidak dapat memeriksa.

Saya seorang petugas keamanan, dan saya melihat kata sandi plaintext di log:

create user user1 with password 'PLAINTEXT PASSWORD'

Bagaimana DBA dapat mengubah atau membuat kata sandi mereka tanpa kata sandi yang jelas dalam log?

Saya telah melihat ini , yang menyatakan Anda dapat menggunakan hash md5 dari kata sandi, tetapi kemudian hash juga di hapus. Apakah ada cara yang lebih baik?


1
Jika Anda mempercayai DBA Anda (karena Anda tidak dapat menegakkannya), minta mereka untuk menggunakan \passwordperintah psql.
dezso

Jawaban:


11

Kedengarannya seperti log_statementdiatur ke all.

Jika Anda ingin mencegah kata sandi muncul di log saat log_statementdiatur ke nilai yang menangkap ALTER USER/ ALTER ROLEmaka Anda akan ingin menimpanya ketika mengubah kata sandi. misalnya

BEGIN;
SET LOCAL log_statement = 'none';
ALTER USER ... SET PASSWORD ...;
COMMIT;

Anda harus menjadi pengguna super untuk melakukan ini. Pengguna normal tidak dapat mengesampingkan aturan logging.

Akan lebih baik jika PostgreSQL didukung lesu beberapa parameter laporan (atau fungsi bahkan) sebagai pengguna keamanan-sensitif dan diizinkan untuk permintaan bahwa mereka bertopeng di log, pg_stat_statements, pg_stat_activity, dll Ada saat ini tidak setiap fitur seperti - tapi hei, patch Selamat datang. Jika Anda benar-benar tertarik, posting di pgsql-hacker sebelum menulis kode yang sebenarnya sehingga Anda bisa mendapatkan saran dan komentar. Bergantian, berbicara dengan seseorang yang melakukan pengembangan kontrak.

Secara umum PostgreSQL mengharapkan Anda untuk memperlakukan log sebagai sensitif.

Ada area lain di mana penebangan merupakan masalah keamanan yang serius. Misalnya beberapa pgcryptofungsi mengambil kunci kripto sebagai parameter.


3

Jawaban yang diterima saat ini tidak berfungsi untuk saya di Postgres 9.4, untuk mencegah kata sandi plaintext muncul di log.

Apa yang berhasil bagi saya adalah menghasilkan hash kata sandi secara lokal:

$ username='some_user'; dbpass='some_pass'; echo -n "${dbpass}${username}" | md5sum | awk '{print "md5" $1}'
md5dcca63c0632e24746a19448231cac29c

Lalu masukkan itu:

ALTER USER some_user WITH UNENCRYPTED PASSWORD 'md5dcca63c0632e24746a19448231cac29c';

(Catatan keamanan: Bergantung di mana Anda menghasilkan hal di atas, Anda mungkin ingin mencegah shell Anda masuk ke riwayatnya, atau pada sistem bersama Anda mungkin ingin menggunakan utilitas * nix yang akan meminta kata sandi versus benar-benar memasukkannya ke dalam perintah. Saya kebetulan tidak berada di sistem bersama, jadi itu bukan masalah bagi saya.)


1
Baik sekali. Satu hal yang saya tambahkan dengan sedikit penekanan adalah bahwa seseorang seharusnya tidak menetapkan kata sandi dalam teks-jelas.
dezso

2
Ya, saya mempertimbangkan ini dan menyebutkannya dalam pertanyaan. Itu masih belum cukup untuk kebutuhan saya.
schroeder
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.