GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan Sudo untuk mendelegasikan izin di Linux

Dalam artikel saya sebelumnya, “Real sysadmin don’t sudo,” saya membahas penyalahgunaan sudo yang sangat mengerikan. oleh beberapa distribusi. Dalam artikel ini, yang sebagian dikutip dari Bab 11 buku saya, “Menggunakan dan Mengelola Linux, Nol ke SysAdmin, Volume 1:Memulai,” saya menjelajahi beberapa kasus penggunaan yang valid untuk sudo .

Kasus penggunaan 1:Salin file jarak jauh

Saya baru-baru ini menulis program Bash singkat untuk menyalin beberapa file MP3 dari USB thumb drive pada satu host jaringan ke host jaringan lain. File disalin ke direktori tertentu di server yang saya jalankan untuk organisasi tempat saya berada, dari mana mereka dapat diunduh dan diputar.

Program saya melakukan beberapa hal lain, seperti mengubah nama file sebelum disalin sehingga secara otomatis diurutkan berdasarkan tanggal di halaman web. Ini juga menghapus semua file di drive USB setelah memverifikasi bahwa transfer telah dilakukan dengan benar. Program kecil yang bagus ini memiliki beberapa opsi seperti -h untuk menampilkan bantuan, -t untuk mode uji dan beberapa lainnya.

Program saya, sangat bagus, perlu dijalankan sebagai root untuk menjalankan fungsi utamanya. Sayangnya, organisasi ini hanya memiliki beberapa orang selain saya yang memiliki minat dalam mengelola sistem audio dan komputer kami, yang menempatkan saya pada posisi menemukan orang-orang semi-teknis untuk dilatih untuk masuk ke komputer yang kami gunakan untuk melakukan transfer dan jalankan program kecil ini.

Bukannya saya tidak bisa menjalankan program itu sendiri, tetapi saya tidak selalu ada karena berbagai alasan seperti bepergian dan sakit. Bahkan ketika saya hadir, sebagai "SysAdmin Malas", saya ingin orang lain melakukan pekerjaan saya untuk saya. Jadi saya menulis skrip untuk mengotomatiskan tugas-tugas itu dan menggunakan sudo untuk mengurapi beberapa pengguna untuk menjalankan skrip. Banyak perintah Linux mengharuskan pengguna untuk menjadi root untuk menjalankannya. Ini melindungi sistem dari kerusakan yang tidak disengaja seperti yang disebabkan oleh kebodohan saya sendiri dan kerusakan yang disengaja oleh pengguna dengan niat jahat.

Lakukan itu sudo yang Anda lakukan dengan sangat baik

sudo program adalah alat praktis yang memungkinkan saya sebagai sysadmin dengan akses root untuk mendelegasikan tanggung jawab untuk semua atau beberapa tugas administratif kepada pengguna komputer lain sesuai keinginan saya. Ini memungkinkan saya untuk melakukan pendelegasian itu tanpa mengorbankan kata sandi root dan dengan demikian menjaga tingkat keamanan yang tinggi di host.

Mari kita asumsikan, misalnya, bahwa saya telah memberi pengguna biasa, "pengguna", akses ke program Bash saya, myprog , yang harus dijalankan sebagai root untuk menjalankan sebagian fungsinya. Pertama, pengguna login sebagai ruser dengan password mereka sendiri. Pengguna kemudian menggunakan perintah berikut untuk menjalankan myprog .

sudo myprog

sudo program memeriksa /etc/sudoers file dan memverifikasi bahwa pengguna diizinkan untuk menjalankan myprog . Jika demikian, sudo meminta pengguna memasukkan kata sandi mereka sendiri – bukan kata sandi root. Setelah pengguna memasukkan kata sandi mereka sendiri, program dijalankan. sudo juga mencatat fakta akses ke myprog dengan tanggal dan waktu program dijalankan, perintah lengkap, dan pengguna yang menjalankannya. Data ini masuk /var/log/security .

Saya menemukan bahwa log setiap perintah dijalankan oleh sudo untuk membantu dalam pelatihan. Saya dapat melihat siapa yang melakukan apa dan apakah mereka benar-benar memasukkan perintah dengan benar.

Saya telah melakukan ini untuk mendelegasikan wewenang untuk menjalankan satu program untuk saya sendiri dan satu pengguna lain. Namun, sudo dapat digunakan untuk melakukan lebih banyak lagi. Itu dapat memungkinkan sysadmin untuk mendelegasikan otoritas untuk mengelola fungsi jaringan atau layanan tertentu kepada satu orang atau sekelompok pengguna tepercaya. Hal ini memungkinkan fungsi-fungsi ini untuk didelegasikan sekaligus melindungi keamanan kata sandi root.

Mengonfigurasi file sudoers

Sebagai sysadmin, saya dapat menggunakan /etc/sudoers file untuk mengizinkan pengguna atau grup pengguna mengakses satu perintah, grup perintah yang ditentukan, atau semua perintah. Fleksibilitas ini adalah kunci dari kekuatan dan kesederhanaan menggunakan sudo untuk delegasi.

Saya telah menyalin seluruh sudoers file di Gambar 1 dari Host tempat saya menggunakannya untuk mendekonstruksinya untuk Anda. Saya merasa sangat membingungkan pertama kali saya menemukannya. Mudah-mudahan, itu tidak akan terlalu jelas bagi Anda pada saat kita melewatinya. Saya suka bahwa distribusi berbasis Red Hat cenderung memiliki file konfigurasi default dengan banyak komentar dan contoh untuk memberikan panduan. Ini memang membuat segalanya lebih mudah karena lebih sedikit Googling diperlukan.

Jangan gunakan editor standar Anda untuk memodifikasi sudoers mengajukan. Gunakan visudo perintah karena dirancang untuk mengaktifkan perubahan apa pun segera setelah file disimpan dan Anda keluar dari editor. Dimungkinkan untuk menggunakan editor selain vi dengan cara yang sama seperti visudo .

Mari kita mulai menganalisis file ini di awal dengan beberapa jenis alias.

Alias ​​inang

Bagian Host Alias ​​​​digunakan untuk membuat grup host di mana perintah atau alias perintah dapat digunakan untuk menyediakan akses. Ide dasarnya adalah bahwa file tunggal ini akan dipertahankan untuk semua host dalam suatu organisasi dan disalin ke /etc di setiap host. Beberapa host, seperti server dengan demikian dapat dikonfigurasi sebagai grup untuk memungkinkan beberapa pengguna mengakses perintah tertentu seperti kemampuan untuk memulai dan menghentikan layanan seperti HTTPD, DNS, jaringan, kemampuan untuk memasang sistem file, dan sebagainya.
Alamat IP dapat digunakan sebagai pengganti nama host di alias host.

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
User_Alias AUDIO = dboth, user

## Command Aliases
## These are groups of related commands...

## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
 
## Processes
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification
#
# Refuse to run if unable to disable echo on the tty.
#
Defaults !visiblepw
Defaults env_reset
Defaults env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

################################################################################
# Added by David Both, 11/04/2017 to provide limited access to myprog #
################################################################################
#
AUDIO guest1=/usr/local/bin/myprog

Gambar 1 :File sudoers default dengan modifikasi saya yang dicetak tebal.

Alias ​​pengguna

Kelompok sampel konfigurasi berikutnya adalah alias pengguna. Ini memungkinkan root untuk mengurutkan pengguna ke dalam grup alias sehingga seluruh grup dapat diberikan akses ke kemampuan root tertentu. Untuk program kecil yang saya tulis, saya menambahkan alias berikut ke bagian ini yang mendefinisikan alias AUDIO dan menetapkan dua pengguna ke alias itu.

User_Alias AUDIO = dboth, ruser

Itu mungkin, seperti yang dinyatakan dalam sudoers file itu sendiri, untuk hanya menggunakan grup Linux yang ditentukan dalam /etc/groups file alih-alih alias. Jika Anda sudah memiliki grup yang ditentukan di sana yang memenuhi kebutuhan Anda, seperti "audio", gunakan nama grup tersebut didahului dengan % tanda seperti ini:%audio saat menetapkan perintah yang tersedia untuk grup nanti di sudoers berkas.

Alias ​​perintah

Lebih jauh ke bawah sudoers file adalah bagian dengan alias perintah. Alias ​​​​ini adalah daftar perintah terkait seperti perintah jaringan atau perintah yang diperlukan untuk menginstal pembaruan atau paket RPM baru. Alias ​​​​ini memungkinkan sysadmin dengan mudah mengizinkan akses ke grup perintah.

Ada sejumlah alias yang sudah disiapkan di bagian ini yang memudahkan untuk mendelegasikan akses ke jenis perintah tertentu. Kami tidak membutuhkannya untuk kasus penggunaan kami.

Default lingkungan

Bagian selanjutnya mengatur beberapa variabel lingkungan default. Item yang paling menarik di bagian ini adalah !visiblepw baris yang mencegah sudo dari berjalan jika lingkungan pengguna diatur untuk menampilkan kata sandi. Ini adalah tindakan pencegahan keamanan yang tidak boleh diabaikan.

Bagian perintah

Bagian ini adalah bagian utama dari sudoers mengajukan. Semua yang diperlukan dapat dilakukan tanpa semua alias dengan menambahkan entri yang cukup di sini. Alias ​​hanya membuatnya jauh lebih mudah dengan menggunakan alias yang sudah ditentukan untuk memberi tahu sudo siapa yang bisa melakukan apa di host mana. Contohnya sudah cukup jelas setelah Anda memahami sintaks di bagian ini. Jadi mari kita lihat sintaks yang kita temukan di bagian perintah. Dalam Gambar 2 kami memiliki entri umum untuk pengguna kami, ruser.

ruser ALL=(ALL) ALL

Gambar 2 :Entri umum yang mengatakan bahwa pengguna dapat menjalankan program apa pun di host mana pun sebagai pengguna mana pun.

ALL pertama di baris menunjukkan bahwa aturan ini berlaku untuk semua host. ALL kedua memungkinkan pengguna untuk menjalankan perintah seperti pengguna lain. Secara default, perintah dijalankan sebagai pengguna root tetapi pengguna dapat menentukan pada sudo baris perintah bahwa program dijalankan seperti pengguna lain. Yang terakhir ALL berarti bahwa pengguna dapat menjalankan semua perintah tanpa batasan. Entri ini akan membuat ruser efektif menjadi root. Kami tidak akan menggunakan entri ini karena kami tidak ingin pengguna ini memiliki semua kemampuan tersebut.

Perhatikan bahwa ada entri untuk root seperti yang ditunjukkan pada Gambar 3 . Entri ini memungkinkan root memiliki akses menyeluruh ke semua perintah di semua host.

root ALL=(ALL) ALL

Gambar 3 :Entri yang mengatakan bahwa toot dapat menjalankan program apa pun pada host mana pun sebagai pengguna mana pun.
Tetapi, tentu saja, saya harus mencobanya, jadi saya mengomentari baris di Gambar 3 dan, sebagai root, mencoba menjalankan chown tanpa sudo . Itu berhasil – sangat mengejutkan saya. Kemudian saya menggunakan sudo chown dan itu gagal dengan pesan, “root is not in the sudoers file. Kejadian ini akan dilaporkan.” Ini berarti root dapat menjalankan semuanya sebagai root, tetapi tidak ada apa-apa saat menggunakan sudo memerintah. Ini akan mencegah root menjalankan perintah sebagai pengguna lain melalui sudo perintah, tetapi root memiliki banyak cara untuk mengatasi pembatasan itu.

Entri di Gambar 4 adalah yang saya tambahkan untuk mengontrol akses ke myprog . Ini menentukan bahwa pengguna yang terdaftar dalam grup AUDIO, seperti yang didefinisikan di dekat bagian atas sudoers file, hanya memiliki akses ke satu program, myprog , di satu host, tamu1.

AUDIO guest1=/usr/local/bin/myprog

Gambar 4 :Ini adalah entri yang saya tambahkan untuk mengizinkan pengguna yang merupakan bagian dari grup AUDIO mengakses myprog pada tuan rumah, tamu1.

Perhatikan bahwa sintaks baris di Gambar 4 hanya menentukan host tempat akses ini diizinkan dan programnya. Itu tidak menentukan bahwa pengguna dapat menjalankan program seperti pengguna lain.

Melewati sandi

Gambar 5 mengilustrasikan penggunaan NOPASSWORD untuk mengizinkan pengguna yang ditentukan dalam grup AUDIO untuk menjalankan myprog tanpa perlu memasukkan kata sandi mereka.

AUDIO guest1=NOPASSWORD : /usr/local/bin/myprog

Gambar 5 :Entri hipotetis ini akan memungkinkan pengguna yang merupakan bagian dari grup AUDIO mengakses myprog tanpa perlu memasukkan kata sandi mereka.

Saya tidak melakukan ini untuk program saya karena saya yakin bahwa pengguna dengan sudo akses harus berhenti dan memikirkan apa yang mereka lakukan dan ini mungkin sedikit membantu. Saya hanya menggunakan entri untuk program kecil saya sebagai contoh.

Roda

Spesifikasi roda di bagian perintah sudoers file seperti yang ditunjukkan pada Gambar 6 memungkinkan semua pengguna di grup roda untuk menjalankan semua perintah di host mana pun. Grup roda didefinisikan dalam /etc/group file dan pengguna harus ditambahkan ke grup di sana agar ini berfungsi. % tanda sebelum nama grup berarti sudo harus mencari grup itu di /etc/group berkas.

%wheel ALL = (ALL) ALL

Gambar 6 :Entri ini mengatakan bahwa semua pengguna yang menjadi anggota grup roda seperti yang didefinisikan dalam /etc/group file dapat menjalankan semua perintah di host mana pun.

Ini adalah cara yang baik untuk mendelegasikan akses root penuh ke banyak pengguna tanpa memberikan kata sandi root. Hanya menambahkan pengguna ke grup roda memberi mereka akses ke kekuatan root penuh. Ini juga menyediakan sarana untuk memantau aktivitas mereka melalui entri log yang dibuat oleh sudo . Beberapa distribusi seperti Ubuntu menambahkan ID pengguna ke grup roda di /etc/group yang memungkinkan mereka untuk menggunakan sudo perintah untuk menggunakan semua perintah istimewa.

Kasus penggunaan 2:Presentasi

Kami biasanya memikirkan presentasi dalam hal slide apik yang dibuat oleh LibreOffice Impress atau PowerPoint, transisi animasi, dan grafik, tetapi itu tidak perlu terjadi. Pada tanggal 3 Maret tahun ini, saya mempresentasikan sesi diperpanjang di Open Source 101 di Columbia South Carolina, berjudul, “Menggunakan dan Mengonfigurasi Bash.”

Sekarang, jika Anda menghadiri sesi panjang tentang penggunaan Bash, mengapa Anda ingin melihat banyak slide mewah? Secara pribadi, saya ingin melihat Bash digunakan. Jadi saya membuat skrip Bash yang menjadi presentasi saya. Saya bukan juru ketik yang cepat atau akurat jadi ini juga memungkinkan saya untuk memprogram semua perintah yang ingin saya tunjukkan ke dalam skrip Bash jadi saya hanya perlu menekan tombol Enter untuk pindah ke slide berikutnya yang berisi teks atau untuk mengeluarkan perintah. Ini bekerja dengan sangat baik untuk saya dan para hadirin sepertinya juga menyukainya karena ini adalah kasus penggunaan yang sangat bagus untuk skrip Bash.

Ini relevan karena satu dan hanya satu dari perintah dalam skrip shell Bash 1500 baris ini memerlukan hak akses root. Akan sangat tidak aman untuk login sebagai root dan menjalankan seluruh program. Bagaimana jika ada kesalahan yang menghapus atau merusak beberapa file tingkat sistem yang penting? Sebagai sysadmin dan programmer Bash, saya tidak sempurna dan kesalahan terjadi.

Jadi jawabannya adalah menjalankan program sebagai pengguna "siswa" dan menggunakan sudo perintah sebagai awalan untuk satu perintah yang membutuhkan akses istimewa. Bahkan di tengah presentasi saya, mengetikkan kata sandi untuk pengguna siswa itu mudah. Saya juga menggunakan ini dalam presentasi saya sebagai contoh penggunaan sudo . yang tepat .

Pengaturan untuk kasus penggunaan ini sama dengan kasus sebelumnya, hanya dengan nama pengguna dan nama perintah yang berbeda.

Pikiran terakhir

Saya telah menggunakan sudo dalam kasus ini untuk tujuan yang sangat terbatas – memberikan satu atau dua pengguna akses ke satu perintah. Saya menyelesaikan ini dengan dua baris jika Anda mengabaikan komentar saya sendiri. Mendelegasikan wewenang untuk melakukan tugas tertentu kepada pengguna yang tidak memiliki akses root sangatlah mudah dan dapat menghemat banyak waktu Anda sebagai sysadmin. Ini juga dapat meningkatkan keamanan secara signifikan dengan menyediakan akses ke perintah tertentu hanya jika diperlukan.

sudo perintah juga menghasilkan entri log yang dapat membantu mendeteksi masalah. sudoers file menawarkan sejumlah besar kemampuan dan opsi untuk konfigurasi. Periksa man file untuk sudo dan sudoers untuk detail bawah dan kotor.

[ Unduh sekarang:Panduan sysadmin untuk skrip Bash. ]


Linux
  1. Debug Linux menggunakan ProcDump

  2. Tambahkan pengguna Linux dengan izin root dokumen

  3. ketika menggunakan CPAN di linux ubuntu haruskah saya menjalankannya menggunakan sudo / sebagai root atau sebagai pengguna default saya

  1. Jalankan container di Linux tanpa Sudo di Podman

  2. Izin Linux 101

  3. Apa itu Umask di Linux?

  1. Panduan pemula untuk izin Linux

  2. Jalankan perintah cd sebagai superuser di Linux

  3. Android - Bagaimana cara me-root Samsung S6 menggunakan Linux?