En iyi yol...
Evet, bunu yapmanın daha iyi bir yolu var. Kapatmanın süper kullanıcı ayrıcalıkları gerektirmemesini sağlayın.
Bu, önceden biraz kurulum gerektirir. Ardından, ayrıcalıklı eylemi kimin yapabileceğini ve bu yöntemi kullanan bir insanın ne yapabileceğini en aza indirir. (Başka bir deyişle, gücün potansiyel olarak kötüye kullanılması, mevcut bazı diğer sınırlamalar ile sınırlandırılmıştır.)
Bazı yaygın yazılımların yüklenmesini varsayacağım sudo
(soruyu dikkate alarak güvenli bir varsayım gibi görünüyor) ve OpenSSH (veya muhtemelen "OpenSSH Portable").
Bir kullanıcı hesabı oluşturun
Göründüğünden beri sudo
erişim, muhtemelen bir kullanıcı oluşturma yeteneğiniz olduğunu düşünüyorum.
Kullanıcıyı _sysstop veya _sysoff, vb. Olarak çağırmak isteyebilirsiniz. "Kapatma" sekiz karakter veya daha kısa olsa da, çalıştırılacak bir komutun adıdır, bu nedenle farklı bir ad kullanmak hoş olabilir. Ben de tam otomatik hesaplara, örneğin bunun gibi bir alt çizgi ile başlama standartlarını seviyorum, bu yüzden görsel olarak bu hesap standart bir kullanıcı hesabından farklı gözüküyor.
Kullanıcının şifre olmadan kapanmasına izin ver
/ Etc / sudoers dosyasını değiştirin ve şunu ekleyin:
_sysstop ALL=(ALL) NOPASSWD:/sbin/shutdown -h*, SETENV: ALL
Doğal olarak, oluşturduğunuz kullanıcı hesabının adı olan ilk bölümü özelleştirmek isteyebilirsiniz.
Birçok insan NOPASSWD kullanmaya karşı çıkıyor gibi görünüyor, çünkü muhtemelen sistemdeki hiçbir şeyi yapmak için tam erişim sağlama fikrinden hoşlanmıyorlar. Ancak, bu oldukça sınırlı erişim veriyor. Bu kişinin yapabileceği tek şey, sistemi durduracak "/ sbin / shutdown -h" ile başlayan bir komut çalıştırmaktır. Yetkisiz bir kişi bu hattan şifre olmadan yararlanmayı başarırsa, sistemi kapatabilirler, ancak bu, böyle bir saldırganın çok fazla başka tür hasar verebilecek şekilde sınırlandırılmayacağı anlamına gelmez. ek kullanıcı hesapları oluşturma, vb.) Bu nedenle, NOPASSWD'nin bu kullanımı çoğu insanın cesaretini kırmaya çalıştığının aksine oldukça güvenlidir.
"/ Sbin / shutdown -h" kullanmak istediğim şeydi. İşletim sisteminize ve ne istediğinize bağlı olarak, "durma" veya "yeniden başlatma" gibi farklı bir komut kullanmak isteyebilir ve farklı parametreler isteyebilirsiniz. Zaten sistemi istediğiniz gibi kapatma konusunda pratik yaptığınız için, muhtemelen bunu nasıl yapmak istediğinizi zaten biliyorsunuzdur.
Bir SSH anahtarı oluşturun
ssh-keygen -t rsa -vvv -f mykey -N "" -C "mykey" | tee mykey.fng
Bazı insanlar sevmeyecek -N ""
. Bu, bu ifadenin geri kalan kısmının ötesinde, burada daha fazla ilerlememeyi seçtiğim tamamen farklı bir tartışma: hangi güvenlik uygulamalarının sizi daha rahat hale getirdiğine göre özelleştirin.
Yukarıdaki örnekte, bazılarının tavsiye edebileceği başka değişiklikler olabilir. Yine, bu mükemmel olabilir, ancak bu cevabın özünden ayrı bir konudur. Yukarıdakileri uygun şekilde özelleştirin.
Yukarıdaki örnekte "mykey" ifadesinin üç kez göründüğüne dikkat edin. İlk örneği özelleştirmek için kesinlikle bekliyoruz, ve sonra diğer olaylar ilk oluşumun söylediği ile eşleşmek üzere tasarlandı.
Mykey.fng dosyasına ihtiyacınız yok. Bu tür anahtarların daha sonra tekrar görülebileceğini öğrenmeden önce, VisualHostKey (a.k.a. "rastgele-sanat") kaydını alabilmem için onu koruma alışkanlığına yeni başladım. "ssh-keygen -lvf / etc / ssh / ssh_host_ecdsa_key"
Anahtarla yapılabilecekleri kısıtla
Değiştirmek ~$( echo username-just-created )/.ssh/authorized_keys*
dosya. (Örneğin., ~_sysstop/.ssh/authorized_keys
bazı sistemler kullanabilse de ~_sysstop/.ssh/authorized_keys2
, olmasına rağmen büyük olasılıkla onaylanmış tuşları kullanmak istiyorsun )
Dosyaya yaklaşık olarak benzeyen bir satır ekleyerek ssh anahtarını uygulayın:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAA... Optional-comment-after-the-space
"İsteğe bağlı-yorumdan sonra-boşluk" için, özel anahtarın dosya adını eklemeyi seviyorum. Ek bir anahtar eklemek istersem (ki bu belirli kullanıcı için olmayabilir, ancak alışkanlık dışı, bazı kullanıcılar ek anahtarlar isteyebilir), o zaman onaylanmış_ anahtarlar dosyası anahtarın metni tarafından tanımlanabilecek çok fazla satır içerebilir. . Birden fazla anahtarım varsa ve aylar sonra bir tanesini kaldırmak istersem, hangi ortak anahtarın hangi anahtar dosyayla ilişkili olduğunu hatırlamakta zorlanacağım ve bu yüzden hangi ortak anahtarın kaldırılacağını bilemeyeceğim. İsteğe bağlı yorumu kullanarak, bunu gelecekte daha iyi tutabilirim.
Not: anahtarı otomatik olarak eklerseniz (belki de ssh-add ile), belki bir kullanıcı adı içeren varsayılan bir yorumunuz olabilir. Bu tür yorumlar genellikle oldukça işe yaramaz. Yolda kullanılabilecek şekilde özelleştirin.
sağlamak ~/.ssh/authorized_keys
OpenSSH’yi mutlu etmek için gerekli izinlere sahiptir.
Tek adımları test edin
Bunu test edebilir misiniz (sistemi kapatarak)? Eğer öyleyse, bunu yapmak bazı bileşenleri ayrı ayrı test edebilir, bu da bir şey kırılırsa daha daralmış bir problem yaşamanıza izin verebilir.
- Anahtarın doğru ayarlandığını test edin.
- İstemcide, kullan
ssh -i ~/keys/privkey-file _sysstop@localhost
- PuTTY kullanıyorsanız, PuTTY
-i filename
(ve -ssh
) veya sadece "Yeni Oturum" ekranında yapabileceğiniz Bağlantı \ SSH \ auth (seçeneklerin sol çerçevesinde) 'de dosya adını belirtmek için GUI'yi kullanın. (Özellikle, "yalnızca" diyorum çünkü PuTTY'nin "sistem menüsünü" ve mevcut bir oturumda "Oturumu değiştir" i kullanırken "auth" ekranı görünmüyor.) - Sürecin bu aşamasında, bu size bir kabuk vermelidir. Değilse, SSH tuşlarını kullanarak uygulamayı ayarlamanız gerekebilir.
- Giriş yaptıktan sonra, sistemi kapatmak için sudo'nun çalıştığını (şifre olmadan) test edin.
Anahtarı kısıtla
Bakın ~/.ssh/authorized_keys*
dosya? Harika. Şimdi değiştirin.
İle başlayan satırı bulun ssh-rsa
Bundan önce bir miktar metin ekleyin, böylece satır şöyle görünür:
command="sudo /sbin/shutdown -hp now Shutdown initiated with SSH by \\"$USER\\" CONN rem/lcl=\\"$SSH_CONNECTION\\" CLI rem/lcl=\\"$SSH_CLIENT\\" CMD=\\"$SSH_ORIGINAL_COMMAND\\"",no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAA... Optional-comment-after-the-space
Sonuç
Özel SSH anahtar dosyasını koru. Bununla, herkes sistemi kapatabilirdi. Ancak, gerçekten yapabildikleri budur.
Şimdi, sistemi kapatmak sadece "ssh" imzasız komutunu çalıştırmayı ve bu dosyaya erişmeyi gerektirir. Bu dosyaya erişimi kontrol ettiğiniz sürece, işleri olması gerektiği kadar güvende tutuyorsunuz. Bununla birlikte, dosya tehlikeye girse bile, yapılabilecek zarar miktarı oldukça sınırlıdır.
Artık sistemi kapatmak istediğinizde sudo yazmanıza bile gerek yok. Yetkisiz kimsenin bu anahtarı alamadığından emin olmanız gerekir (veya sistemi kapatabilirler). Muhtemelen bu dosyayı çalmak için "sudo" kullanabilen herhangi biri, sistemi kapatmak için sadece "sudo" yu da kullanabiliyordu, bu yüzden birçok durumda dosyayı bilgisayarın özel bir alanında bırakmak muhtemelen nispeten güvenli ve makul bir risktir.