Sudoers selama satu hari per minggu?

10

Saya telah sukarela oleh bos saya untuk menjadi sysadmin untuk server redhat produksi kami. Dia meminta saya untuk memperketat keamanan untuk menghindari kecelakaan seperti rm -f *yang terjadi belum lama ini.

Saat ini, kami memiliki 53 pengguna yang tiba-tiba masuk ke dalam mesin dan ini merupakan mimpi buruk audit. Saya bertanya-tanya apakah mungkin mengizinkan akses pengguna hanya pada hari-hari tertentu dalam seminggu.

Misalnya, dapatkah saya meminta pengguna 'Joe' untuk masuk pada hari Selasa dan Kamis HANYA dan 'Jane' hanya pada hari Minggu? Bisakah etc/sudoersdikustomisasi untuk memungkinkan ini?

Apakah ada cara yang lebih baik daripada menggunakan sudoers?

Chris
sumber
10
Saya sarankan TIDAK membaca halaman buku panduan. Lihat xkcd # 1343
user60684
3
Tidak, saya mengatakan kepadanya untuk tidak membaca manual karena tidak mungkin untuk membaca IMHO. OP mungkin akan menemukan jawaban di halaman manual jika lebih mudah dibaca.
user60684
10
Anda dapat melakukan ini, tetapi perlu diingat bahwa pengguna hanya dapat memberikan diri mereka kembali akses sudo sepanjang waktu pada hari apa pun mereka memiliki root.
Nick Matteo
2
@ Mark0978 jika Anda tahu nama perusahaan, Anda mungkin akan mati tertawa terbahak-bahak. Ini memalukan karena diizinkan ... di server produksi.
Chris
3
Ini agak konyol. Itu hanya berarti Bill harus menunggu slot waktu Rabu paginya berjalan rm -rf /.
Michael Hampton

Jawaban:

21

sudo melakukan otentikasi melalui PAM, seperti hampir semua yang lain pada kotak Linux.

Jadi Anda harus dapat menggunakannya pam_time.sountuk melakukan ini.

Secara default setidaknya di Debian, modul itu tidak diaktifkan. Anda perlu menambahkan garis yang terlihat seperti ini:

account    requisite  pam_time.so

baik /etc/pam.d/sudountuk mengaktifkan hanya sudo atau /etc/pam.d/common-account(setelah blok pembaruan-pam-auth) untuk memungkinkan semua program pada sistem.

Kemudian edit /etc/security/time.confuntuk mengatur batasan Anda. Nama layanan harus sudo. Misalnya, untuk mengizinkan Fred menggunakan sudohanya antara jam 15.00 dan 17.00 pada hari Jumat:

sudo;*;fred;Fr1500-1700

(CATATAN: Saya belum menguji ini.)

sunting: Agar jelas, saya setuju dengan jawaban lain dan berbagai komentator, Anda tampaknya memiliki terlalu banyak orang yang menjalankan terlalu banyak perintah sebagai root, dan Anda benar-benar harus memperbaikinya. Dan tentu saja jika mereka dapat menjadi root, mereka dapat mengedit konfigurasi pam ...

derobert
sumber
PAM tampaknya rumit untuk diterapkan tetapi juga memungkinkan kontrol yang lebih ketat pada siapa melakukan apa dan kapan. Diterima dan dipilih. Terima kasih.
Chris
2
Saya tidak berpikir menyemangati dia adalah jawaban yang tepat, IMAO jawaban yang benar untuk pertanyaan ini adalah "MENJALANKAN KERAS !!!! 1! 1 !! 1! 1"
o0 '
Apakah ini berhasil? Saya dapat mengendalikan berbagai mekanisme masuk seperti "masuk", "ssh", "gdm", "su" menggunakan pam_time.so, tetapi tidak berfungsi untuk sudo. Saya ingin mencegah siapa pun menjadi root oleh mekanisme normal di luar jam kantor. (Saya sadar itu bukan antipeluru, seseorang bisa menyiapkan setuid shell atau backdoor sebelumnya, tapi saya tidak berharap itu akan terjadi dalam situasi ini.)
Sam Watkins
20

Saya akan mempertanyakan mengapa 53 pengguna perlu sudo untuk melakukan pekerjaan sehari-hari mereka - untuk sebagian besar pengguna (bahkan pengembang), sudo harus menjadi pengecualian yang jarang, bukan hal yang rutin sehingga seseorang dengan santai menjalankan sudo rm -rf *perintah.

Bisakah Anda menggunakan izin grup (atau bahkan ACL yang lebih canggih) untuk memberi orang akses ke file yang mereka butuhkan untuk menyelesaikan pekerjaan mereka, mungkin dengan beberapa skrip atau binari setuid atau sudo'ed untuk membiarkan mereka melakukan hal-hal seperti memulai kembali layanan? (perhatikan bahwa sulit untuk menulis skrip setuid / sudo yang aman, jadi lebih baik untuk menjaga orang jujur ​​jujur).

Bahkan jika Anda dapat membatasi orang untuk akses sudo satu hari seminggu, itu masih 53 orang dengan akses sudo dalam waktu seminggu, jadi itu tidak benar-benar membantu dengan masalah inti Anda.

Dalam hal ini, saya akan mempertanyakan apakah banyak pengguna yang memerlukan akses ke server produksi sama sekali - dapatkah Anda mengirimkan log atau data / file apa pun yang mereka perlukan ke mesin non-produksi?

Johnny
sumber
Atau dapatkah Anda menerbitkan semacam akses ke file log yang mungkin mereka butuhkan, jenis sftp yang dipenjara chroot.
boatcoder
@ Johnny sebagian besar pekerjaan yang dilakukan pada host ini adalah membuat / mengedit dan menjalankan skrip shell. Pengguna seharusnya tidak diizinkan vi/cp/mv/rm. Hanya cddan more. Tidak ada lagi.
Chris
@ Johnny Jika saya menetapkan ACL pada direktori, apakah file di dalam direktori itu mewarisi atribut ACL secara default?
Chris
@ Chris Ya, jika Anda menetapkan ACL Default untuk direktori.
Michael Hampton
Ini harus berupa komentar, bukan jawaban. Terlepas dari apakah skenario OP itu masuk akal, orang lain memiliki kebutuhan yang sama untuk mengunci "sudo" untuk beberapa pengguna pada waktu tertentu.
Sam Watkins
7

Cara paling sederhana adalah menggunakan suders.d (via inludedir) untuk konfigurasi Anda. Anda kemudian dapat memiliki pekerjaan cron yang dapat menempatkan aturan untuk setiap pengguna ke direktori itu untuk waktu yang Anda inginkan.

Arahan #includedir dapat digunakan di / etc / sudoers untuk membuat direktori sudo.d yang bisa Anda gunakan untuk memasukkan aturan sudoers sebagai bagian dari aturan Anda .. Misalnya, diberikan:

#includedir /etc/sudoers.d

sudo akan membaca setiap file di /etc/sudoers.d, melewatkan nama file yang diakhiri dengan '~' atau mengandung '.' karakter untuk menghindari menyebabkan masalah dengan manajer paket atau editor file sementara / cadangan. File diuraikan dalam urutan leksikal yang diurutkan. Yaitu, /etc/sudoers.d/01_first akan diuraikan sebelum /etc/sudoers.d/10_second. Ketahuilah bahwa karena pengurutan bersifat leksikal, bukan numerik, /etc/sudoers.d/1_whoops akan dimuat setelah /etc/sudoers.d/10_second. Menggunakan angka nol terkemuka yang konsisten dalam nama file dapat digunakan untuk menghindari masalah seperti itu.

Perhatikan bahwa tidak seperti file yang disertakan melalui #include, visudo tidak akan mengedit file dalam direktori #includedir kecuali salah satu dari mereka mengandung kesalahan sintaksis. Dimungkinkan untuk menjalankan visudo dengan flag tof untuk mengedit file secara langsung.

/etc/sudoers.d/joe akan hadir ketika Anda ingin joe memiliki akses dan Anda cukup menghapus file untuk mengambil akses.

jamespfinn
sumber
1
Saya punya masalah dengan file sudoer khusus pengguna saya: 'sudoers.user1' dll. Anda berkomentar tentang '~' dan '.' karakter memecahkan masalah saya. Saya sangat senang Anda membaca manualnya! Terima kasih.
Han
0

Anda bisa menambahkan crontab untuk menempatkan pengguna di grup sudo, dan kemudian crontab kedua untuk mengeluarkan pengguna itu.

Pengguna Polaris
sumber