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.Jawaban:
Satu-satunya hal yang datang ke pikiran akan menambahkan
--expiredate
keadduser
panggilan.Dengan itu pelanggan tahu bahwa akses Anda secara otomatis akan kedaluwarsa pada tanggal yang tetap.
Dia masih perlu mempercayai Anda karena Anda memiliki akses root dan masih bisa menghapus bendera yang kedaluwarsa.
sumber
Anda dapat merekam sesi Anda dengan utilitas skrip (1) .
maka semuanya ada di session.log.
sumber
Karena Anda sudah masuk dengan kunci publik SSH, itu akan sedikit memperketat jika Anda tidak memberikan hash kata sandi; alih-alih katakan kepada mereka untuk menggunakan
adduser --disabled-password
(setara,,useradd -p '!'
saya pikir), yang secara efektif setara denganPasswordAuthentication no
untuk akun itu, ditambah tidak ada kesempatan seseorang mengintip email Anda bisa dengan kasar memaksa hash kata sandi dan masuk seperti Anda.sumber
Match user hbruijn \n PasswordAuthentication no
ke sshd_config harus mencegah siapa pun masuk secara jarak jauh dengan kata sandi yang didekripsi (berpotensi pengguna lokal dapat menggunakannya dengansu - hbruijn
) tetapi sejauh yang saya tahu saya masih perlu memiliki kata sandi yang valid untuksudo
tujuan. Mungkin saya harus mengatur ulang kata sandi setelah masuk?--disabled-password
keadaan dapat diberikan kata sandi dengan menjalankanpasswd
dari akun itu.hbruijn ALL=(ALL) NOPASSWD: /usr/bin/passwd hbruijn
?Mengapa harus memberikan kata sandi sama sekali, ketika Anda akan menggunakan kunci publik / pribadi.
Kunci publik dimaksudkan untuk dibagikan, jadi inilah yang harus Anda gunakan untuk bertukar kredensial secara aman, bukan kata sandi yang diacak.
sudo useradd --disabled-password hbruijn
Saat mengirim kunci publik Anda, verifikasi sidik jari melalui saluran kedua, seperti panggilan telepon, sehingga Anda tahu tidak ada yang mengubahnya saat masuk.
Karena Anda tidak akan memiliki kata sandi sekarang untuk menggunakan sudo, Anda juga perlu mengubah baris Anda ke file sudoers
hbruijn ALL=(ALL) NOPASSWD:ALL
Jika Anda merasa tidak nyaman tanpa kata sandi untuk sudo, dan benar-benar menginginkan kata sandi, masih tidak perlu bagi Anda untuk mengirim kata sandi hash Anda, biarkan akun dibuat tanpa kata sandi, setel kunci publik Anda, dan begitu akun Anda selesai atur Anda bisa login lebih dari ssh dan jalankan
passwd
untuk mengatur kata sandi Anda sendiri.sumber