Sesekali saya mendapatkan permintaan aneh untuk memberikan dukungan jarak jauh, pemecahan masalah dan / atau penyempurnaan kinerja pada sistem Linux.
Perusahaan besar sering sudah memiliki prosedur yang mapan untuk menyediakan akses jarak jauh ke vendor / pemasok dan saya hanya perlu mematuhinya. (Baik atau buruk.)
Di sisi lain perusahaan kecil dan individu selalu berpaling kepada saya untuk mengajari mereka apa yang harus mereka lakukan untuk menjebak saya. Biasanya server mereka terhubung langsung ke internet dan langkah-langkah keamanan yang ada terdiri dari default untuk apa pun distribusi Linux mereka.
Hampir selalu saya akan membutuhkan akses tingkat root dan siapa pun yang akan mengatur akses bagi saya bukan seorang sysadmin ahli. Saya tidak ingin kata sandi root mereka dan saya juga cukup yakin tindakan saya tidak akan berbahaya, tetapi instruksi sederhana apa yang harus saya berikan kepada:
- mengatur akun dan bertukar kredensial dengan aman
- mengatur akses root (sudo)
- batasi akses ke akun saya
- memberikan jejak audit
(Dan ya saya sadar dan selalu memperingatkan klien-klien itu bahwa begitu saya memiliki akses admin menyembunyikan tindakan jahat adalah sepele, tetapi mari kita asumsikan bahwa saya tidak memiliki sesuatu yang disembunyikan dan berpartisipasi aktif dalam menciptakan jejak audit.)
Apa yang bisa diperbaiki pada langkah-langkah di bawah ini?
Set instruksi saya saat ini:
mengatur akun dan bertukar kredensial dengan aman
Saya memberikan hash kata sandi dan meminta akun saya diatur dengan kata sandi yang dienkripsi, jadi kami tidak perlu mengirimkan kata sandi teks yang jelas, saya akan menjadi satu-satunya yang mengetahui kata sandi dan kami tidak memulai dengan kata sandi lemah yang dapat diprediksi.
sudo useradd -p '$1$********' hbruijn
Saya memberikan SSH kunci publik (pasangan kunci khusus per klien) dan meminta mereka mengatur akun saya dengan kunci itu:
sudo su - hbruijn
mkdir -p ~/.ssh
chmod 0700 ~/.ssh
echo 'from="10.80.0.0/14,192.168.1.2" ssh-rsa AAAAB3NzaC1y***...***== hbruijn@serverfault' >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
mengatur akses root (sudo)
Saya meminta klien untuk mengatur sudo untuk saya dengan sudo sudoedit
atau dengan menggunakan editor favorit mereka dan menambahkan ke /etc/sudoers
:
hbruijn ALL=(ALL) ALL
batasi akses ke akun saya
Biasanya klien masih mengizinkan login berbasis kata sandi dan saya meminta mereka untuk menambahkan dua baris berikut /etc/ssh/sshd_config
untuk setidaknya membatasi akun saya hanya untuk kunci SSH:
Match user hbruijn
PasswordAuthentication no
Bergantung pada klien, saya akan merutekan semua akses SSH saya melalui satu bastion host untuk selalu memberikan alamat IP statis tunggal (misalnya 192.168.1.2) dan / atau memberikan kisaran alamat IP yang digunakan ISP saya (misalnya 10.80. 0,0 / 14). Klien mungkin perlu menambahkan mereka ke daftar putih firewall jika akses SSH dibatasi (lebih sering daripada tidak ssh tanpa filter).
Anda sudah melihat alamat-ip itu sebagai from=
batasan dalam ~.ssh/authorized_keys
file yang membatasi host dari mana kunci saya dapat digunakan untuk mengakses sistem mereka.
memberikan jejak audit
Sampai sekarang tidak ada klien yang meminta saya untuk itu, dan saya belum melakukan sesuatu yang spesifik di luar yang berikut untuk menutupi pantat saya:
Saya mencoba untuk konsisten menggunakan sudo
dengan perintah individu dan mencoba untuk mencegah penggunaan sudo -i
atau sudo su -
. Saya mencoba untuk tidak menggunakan sudo vim /path/to/file
tetapi menggunakannya sudoedit
.
Secara default semua tindakan istimewa kemudian akan dicatat ke syslog (dan /var/log/secure
):
Sep 26 11:00:03 hostname sudo: hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=jboss ; COMMAND=sudoedit /usr/share/jbossas/domain/configuration/domain.xml
Sep 26 11:00:34 hostname sudo: hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/messages
Saya sebagian besar menyerah pada menyesuaikan lingkungan kerja saya, satu-satunya hal yang saya lakukan adalah mengatur yang berikut dalam ~/.bash_profile
meningkatkan sejarah bash dan untuk memasukkan waktu-perangko:
export HISTSIZE=99999999999
export HISTFILESIZE=99999999999
export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg"
export HISTTIMEFORMAT='%F %H:%M:%S '
shopt -s histappend
screen
, jadi dalam kasus yang ekstrem, klien Anda dapat menyaksikan langsung apa yang Anda lakukan.