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. ]