Data
- Saya ingin pengguna operator di mesin ini untuk memasang saham cif mereka sendiri
- The
sudoers
file sudah berisi/bin/mount -t cifs //*/* /media/* -o username=*
perintah untuk semua operator - Saya ingin pengguna me-mount
cifs
share melalui skrip mengetik kata sandi hanya sekali, tidak dua kali. - Kata sandi sudo dan kata sandi cif identik.
Apa yang sudah saya miliki
Script ini berfungsi:
#!/bin/bash
sudo 'mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'
... tetapi mengharuskan pengguna untuk mengetikkan kata sandi yang sama dua kali!
- Sekali untuk
sudo
- Sekali untuk mount itu sendiri
Ini juga akan berfungsi:
#!/bin/bash
echo -n Password:
read -s szPassword
echo $szPassword | sudo -S sh -c 'echo $szPassword | mount -t cifs //192.168.1.1/home /media/$USER/home -o username=$USER'
... tetapi ini akan mengharuskan saya untuk memungkinkan semua pengguna operator untuk dapatsudo sh
(masalah keamanan utama)
Pertanyaan
Bagaimana me-mount saham cifs di bash ¹ tanpa menempatkan sh
dalam sudoers
berkas atau membuat file permanen / sementara ???
Catatan 1: tidak ada python, perl, C, Go, ... tolong?
Catatan 2: Saya tahu saya hanya bisa menghapus kata sandi melalui sudoers
file, tapi saya mencoba untuk memperketat keamanan, tidak melonggarkannya, tanpa melepaskan kenyamanan ...
printf "%s\n" "$szPassword" "$szPassword" | sudo -S mount -t cifs / ...
?Jawaban:
Anda seharusnya membuat pengguna melakukan panggilan menggunakan sudo sebagai
sudo script
. cukup periksa apakah skrip dijalankan sebagai root, jika tidak memintanyaJangan mencoba menangkap kata sandi pengguna Anda.
sumber
sudo
dan kemudian (setelah berhasil mengautentikasi) lagi olehmount
. Dalam kasus penggunaannya, kata sandi ini identik sehingga saya dapat melihat mengapa OP ingin pengguna hanya perlu memasukkan kata sandi ini sekali. Saya tidak percaya solusi Anda membantu dalam hal ini. Saya setuju bahwa seseorang tidak boleh menangkap kata sandi.1>&2
), ada di autostart dan dulu hanya satu cif berbagi, tapi sekarang tiga, jadi benar-benar satu kata sandi dibutuhkan. (Sudah berisi tes itu kalau-kalau ada orang lain, bukan anggota grup operator, mencoba menjalankannya)~/.smbcredentials
misalnya), dan bahkan tanpa perlu sudo (jika Anda menggunakan gvfs, umount atau polkit).Saya bodoh!
Script berikut:
hanya bekerja dan:
sumber
<<<
bisa juga digunakan sebagai penggantiprintf
, tetapi pendekatan yang lebih baik adalah dengan menghapusread
semuanya dan hanya menggunakansudo --stdin
semuanya dengan sendirinya. Sesuatu seperti$ printf "Type out your password\n" && sudo --stdin apt-get update
Pengguna masih dapat mengetikkan kata sandi sudo. dan itu tidak akan memasukkannya ke dalam daftar proses. Tapi tentu saja ada kemungkinan tak terbatas masalah keamanan lainnya, seperti keyloggers, potensi kerentanan dalamsudo
, dan bla, dan bla, dan bla hingga tak terbatasTidak memerlukan
sudo
kata sandi untuk menjalankan perintah ini; kata sandi meminta untukmount
tetap.Dalam
sudoers
, sertakan sesuatu sepertiSetelah memasukkan ini,
sudo
tidak akan lagi meminta kata sandi untuk perintah khusus ini; pengguna masih perlu memberikan kata sandi untukmount
perintah tersebut.Catatan : Saya mengambil perintah kata demi kata dari apa yang Anda sertakan dalam pertanyaan; Saya tidak memeriksa apakah wildcard-nya memungkinkan pengguna melakukan sesuatu yang jahat. Baca halaman
sudoers
manual untuk contoh-contoh kekejian. Secara khusus, perhatikan bahwa baris inisudoers
memungkinkan pengguna untuk menambahkan sejumlah-o
switch atau argumen lainmount
. Anda mungkin ingin memikirkan kembali pendekatan Anda, misalnya dengan menambahkan skrip seperti @Braiam usulkan dan izinkan menjalankannyasudo
tanpa otentikasi tambahan. Script kemudian memastikan bahwa pengguna hanya dapat menjalankan bentuk spesifikmount
yang Anda inginkan untuk dijalankan.Selain itu, alih-alih membolehkan ini untuk semua pengguna, Anda juga dapat membatasi ini untuk anggota grup tertentu, misalnya Anda dapat membuat grup
cifsmount
dan kemudian memilikisumber
Solusi umum untuk masalah ini adalah dengan menempatkan pembukaan berikut di atas sudo Anda yang membutuhkan skrip:
Jelas, ini memiliki kelemahan karena jika beberapa perintah dalam skrip tidak perlu
sudo
dijalankan, ada peningkatan hak istimewa yang tidak perlu di sini.Ngomong-ngomong, kupikir aku akan membagikan tip kecil ini. Hal terbaik tentang hal itu, adalah bahwa jika Anda sudah berhasil-root root (misalnya jika Anda sudah memanggilnya dengan sudo) anggun melakukan hal yang benar. Juga memberikan kesalahan dan memaksa Anda mengetik ulang / menjalankan kembali (dengan sudo) kurang ramah.
Anda mungkin juga ingin memeriksa
timestamp_timeout
variabelman 5 sudoers
yang memberitahusudo
untuk mengingat kredensial pengguna selama beberapa menit (dan bisa pecahan).sumber
#test if root: if not: bail out if [[ $EUID -ne 0 ]]; then echo "This script must be run as root, use sudo "$0" instead" 1>&2 exit 1 fi
Intinya adalah skrip itu juga berisi banyak tunggakan semua dengan kata sandi yang sama (sekali lagi: dihapus), tapi terima kasih ...