Linux: diatur untuk sysadmin jarak jauh

51

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 sudoeditatau 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_configuntuk 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_keysfile 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 sudodengan perintah individu dan mencoba untuk mencegah penggunaan sudo -iatau 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_profilemeningkatkan 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
HBruijn
sumber
8
Anda dapat login (mudah diubah setelah fakta) dan bahkan berbagi sesi screen, jadi dalam kasus yang ekstrem, klien Anda dapat menyaksikan langsung apa yang Anda lakukan.
Sven
Jika Anda ingin menambahkan jejak audit yang lebih baik, Anda harus menginstruksikan mereka untuk mengaktifkan logging jarak jauh jika mereka memiliki kemungkinan
Fredi

Jawaban:

24

Satu-satunya hal yang datang ke pikiran akan menambahkan --expiredateke adduserpanggilan.
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.

pemalsu
sumber
15

Anda dapat merekam sesi Anda dengan utilitas skrip (1) .

$ script session.log
Script started, file is session.log
$ ls
file1  session.log
exit
Script done, file is session.log

maka semuanya ada di session.log.

user9517 mendukung GoFundMonica
sumber
Apakah Anda merekomendasikan menjalankannya di host Anda sendiri, sebelum memulai sesi ssh ke sistem jarak jauh, atau memasukkannya sebagai bagian dari profil saya di sistem jarak jauh?
HBruijn
1
Saya kira Anda bisa melakukannya - saya hanya menggunakannya sekali kebanyakan orang tidak begitu peduli.
user9517 mendukung GoFundMonica
7

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 dengan PasswordAuthentication nountuk akun itu, ditambah tidak ada kesempatan seseorang mengintip email Anda bisa dengan kasar memaksa hash kata sandi dan masuk seperti Anda.

zwol
sumber
3
Penambahan Match user hbruijn \n PasswordAuthentication noke sshd_config harus mencegah siapa pun masuk secara jarak jauh dengan kata sandi yang didekripsi (berpotensi pengguna lokal dapat menggunakannya dengan su - hbruijn) tetapi sejauh yang saya tahu saya masih perlu memiliki kata sandi yang valid untuk sudotujuan. Mungkin saya harus mengatur ulang kata sandi setelah masuk?
HBruijn
Oh, bagus tentang sudo. Saya tidak yakin apakah akun dalam --disabled-passwordkeadaan dapat diberikan kata sandi dengan menjalankan passwddari akun itu.
zwol
Juga apa yang menghentikan siapa pun yang mendengarkan hash kata sandi yang Anda berikan? Bagian itu adalah tautan lemah yang merusak menggunakan kunci ssh di mana tidak masalah jika kunci publik Anda dicegat.
JamesRyan
3
Mungkinkah tautan lemah itu diselesaikan dengan meminta klien juga menambahkan baris dalam file sudoers seperti hbruijn ALL=(ALL) NOPASSWD: /usr/bin/passwd hbruijn?
Dezza
2

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 passwduntuk mengatur kata sandi Anda sendiri.

Jens Timmerman
sumber