Bagaimana cara menonaktifkan akun sepenuhnya?

48

Bagaimana cara menonaktifkan akun sepenuhnya? passwd -ltidak akan mengizinkan siapa pun masuk ke akun menggunakan kata sandi tetapi Anda masih bisa masuk melalui kunci pribadi / publik. Bagaimana saya menonaktifkan akun sepenuhnya? Sebagai perbaikan cepat, saya mengubah nama file menjadi authorized_keys_lockme. Apakah ada cara lain?

Braiam
sumber
3
Apakah Anda berencana mengaktifkannya kembali pada akhirnya? Penguncian sistem? Jika tidak, saya cukup menghapus akun.
Ken

Jawaban:

59

Cara yang benar menurut usermod(8)adalah:

usermod --lock --expiredate 1970-01-02 <username>

(Sebenarnya, argumen untuk --expiredatedapat berupa tanggal sebelum tanggal saat ini dalam format YYYY-MM-DD.)


Penjelasan:

  • --lockmengunci kata sandi pengguna. Namun, login dengan metode lain (misalnya kunci publik) masih dimungkinkan.

  • --expiredate YYYY-MM-DDmenonaktifkan akun pada tanggal yang ditentukan. Menurut man shadow 51970-01-01 adalah nilai yang mendua dan tidak akan digunakan.

Saya sudah menguji ini di komputer saya. Login dengan kata sandi atau kunci publik tidak dapat dilakukan setelah menjalankan perintah ini.


Untuk mengaktifkan kembali akun di lain waktu Anda dapat menjalankan:

usermod --unlock --expiredate '' <username>
Christoph Wurm
sumber
7
Jangan gunakan 1970-01-01 karena akan mengatur bidang / etc / shadow expiration menjadi 0. shadow (5) Nilai 0 tidak boleh digunakan karena ditafsirkan sebagai akun tanpa kedaluwarsa, atau sebagai kedaluwarsa pada 1 Januari 1970. Silakan gunakan: usermod --lock --expiredate 1970-02-02 <username>
Marcus Maxwell
4
Alangkah baiknya jika Anda juga bisa memberikan metode untuk membalikkan operasi ini. Sepertinya usermod --unlock --expiredate '' usernameakan melakukannya.
Bob
3
Menambah apa yang ditulis oleh @MarcusMaxwell: Halaman manual untuk usermodmengatakan:Note: if you wish to lock the account (not only access with a password), you should also set the EXPIRE_DATE to 1.
Zero3
1
Mengapa --expiredate 1tidak cukup sendiri?
Thomas Jensen
Namun sudo su usernamesepertinya berfungsi menggunakan akun lain.
xuhdev
10

Kunci kata sandi dan ubah shell ke /bin/nologin.

sudo usermod --lock --shell /bin/nologin username

(Atau lebih tepatnya sudo usermod -L -s /bin/nologin username,.)

mattdm
sumber
Bagaimana saya 'mengganti shell ke / bin / nologin.'?
5
@mattdm Ini bukan solusi lengkap, karena pengguna masih dapat menentukan perintah yang akan dieksekusi. Misalnya ssh username@hostname /bin/bashakan memberikan pengguna bash prompt, terlepas dari shell default.
phunehehe
4
@ phunehehe - sudahkah Anda mencobanya? Anda akan mendapatkan, di log, "Pengguna [nama pengguna] tidak diizinkan karena shell / bin / nologin tidak ada".
mattdm
2
Sejauh yang saya tahu, perilaku shell tidak benar-benar didokumentasikan. Di sisi lain, halaman manual mengatakan bahwa jika kata sandi memiliki kata pengenal !! di Linux akun akan diperlakukan sebagai terkunci, dan itu tidak berfungsi. Jadi, Anda tahu, dokumentasi dan kenyataan hanyalah perkiraan yang cocok. :)
mattdm
2
sudo chsh -s /bin/nologinakan lebih baik daripada mengedit /etc/passwddengan tangan. Juga, pada beberapa sistem, itu /sbin/nologin.
Mikel
3

Ini cara sederhana lain. Anda dapat mengatur akun pengguna kedaluwarsa. Ini akan mencegah baik login berbasis kata sandi dan berbasis ssh untuk akun, tetapi tidak menyentuh kata sandi.

Untuk mengunci akun:

# chage -E 0 username

Akun pengguna 'nama pengguna' akan dikunci di sistem. Untuk mengaktifkan kembali akun pengguna, lakukan hal berikut.

Untuk membuka kunci akun:

# chage -E -1 username

Akun pengguna 'nama pengguna' akan diaktifkan kembali di sistem Anda dengan kata sandi yang sama seperti sebelumnya. Biner 'chage' adalah bagian dari paket shadow-utils di Red Hat Linux, atau paket passwd di Debian Linux.

miklosq
sumber
3

Saya tidak memiliki perwakilan yang cukup untuk mengomentari jawaban Legate, tetapi saya ingin membagikan bahwa jawaban ini membantu kami dengan penggunaan lain:

1.) akun yang dimaksud adalah akun layanan lokal yang menjalankan aplikasi, bukan akun pengguna akhir.

2.) pengguna akhir ssh in sebagai diri mereka sendiri, dan sudo /bin/su <user>untuk menjadi pengguna dan mengelola aplikasi karena persyaratan jejak audit bahwa akun layanan tidak dapat memiliki kemampuan login langsung.

3.) akun layanan harus memiliki shell yang valid ( /bin/bash, bukan /sbin/nologin), karena Platform Penjadwalan Perusahaan (agen berjalan sebagai root secara lokal) harus mampu su - <user>dan tidak memiliki su -s /bin/bash <user>kemampuan yang dimiliki shell penuh, dan diperlukan untuk menjalankan pekerjaan dari jarak jauh untuk operasi batch yang lebih besar yang mencakup beberapa server dan database.


Jadi ...

passwd -l <user>
Tidak memenuhi kendala karena otentikasi kunci publik melewati PAM dan masih memungkinkan masuk langsung.

usermod -s /sbin/nologin <user>
Tidak memenuhi kendala karena merusak penjadwal perusahaan

usermod --lock --expiredate 1970-01-01 <user>
Ini adalah pemenang kami. Login jarak jauh dinonaktifkan, namun root masih bisa su <user>, seperti halnya pengguna lain melalui sudosehingga penjadwal berfungsi dengan benar dan pengguna akhir yang berwenang dapat menjadi akun layanan target sesuai kebutuhan.

Terima kasih atas solusinya!

pengguna1880028
sumber
1

Untuk menghapus seluruhnya itu gunakan userdel.

Harap perhatikan bahwa jika Anda menghapus akun, ada risiko bahwa ID penggunanya masih akan digunakan dalam sistem file di suatu tempat dan pengguna baru akan mewarisi kepemilikan file-file itu jika masuk di bawah id pengguna yang sama.

Anda ingin mengubah pemilik file apa pun yang dimiliki oleh pengguna yang dihapus.

Jika Anda ingin menambahkan pengguna kembali nanti, simpan baris dari /etc/passwd(dan pada Solaris /etc/shadow) ke file sementara seperti /etc/passwd_deleted.

Dengan begitu ketika Anda menambahkannya kembali Anda dapat menggunakan id pengguna dan kata sandi yang sama (yang dienkripsi dalam salah satu file di atas)

Penafian: Saya mempelajari UNIX sendiri sehingga saya tidak akan terkejut jika ada cara yang lebih baik untuk menonaktifkan sementara pengguna. Sebenarnya saya bahkan tidak tahu apa kunci privat / publik yang Anda bicarakan. Saya juga yakin ada findperintah yang bisa digunakan untuk mencari file dengan userid pemilik itu

Bryan Field
sumber
1
google berwenang_keys atau coba baca ini eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html pada dasarnya alih-alih menggunakan kata sandi, Anda memasukkan kunci publuc dalam file itu dan ketika Anda terhubung dengan ssh Anda akan secara otomatis login jika salah satu dari publik cocok dengan kunci pribadi Anda saat ini