Misalkan beberapa layanan Windows menggunakan kode yang ingin memetakan drive jaringan dan tidak ada jalur UNC. Bagaimana saya bisa membuat pemetaan drive tersedia untuk sesi layanan ketika layanan dimulai? Masuk sebagai pengguna layanan dan membuat pemetaan persisten tidak akan membuat pemetaan dalam konteks layanan aktual.
windows
windows-services
unc
system-administration
mapped-drive
VoidPointer
sumber
sumber
Jawaban:
Anda harus memodifikasi layanan, atau membungkusnya dalam proses bantuan: selain dari masalah akses sesi / drive, pemetaan drive yang persisten hanya dipulihkan pada login interaktif, yang biasanya tidak dilakukan oleh layanan.
Pendekatan proses pembantu bisa sangat sederhana: cukup buat layanan baru yang memetakan drive dan memulai layanan 'nyata'. Satu-satunya hal yang tidak sepenuhnya sepele tentang ini adalah:
Layanan pembantu harus meneruskan semua perintah SCM yang sesuai (mulai / hentikan, dll.) Ke layanan nyata. Jika layanan nyata menerima perintah SCM khusus, ingat untuk meneruskannya juga (saya tidak mengharapkan layanan yang menganggap jalur UNC eksotis untuk menggunakan perintah tersebut, meskipun ...)
Hal-hal yang mungkin sedikit rumit berdasarkan kepercayaan. Jika layanan nyata berjalan di bawah akun pengguna normal, Anda juga dapat menjalankan layanan pembantu di bawah akun itu, dan semua akan baik-baik saja selama akun tersebut memiliki akses yang tepat ke jaringan berbagi. Jika layanan nyata hanya akan berfungsi ketika dijalankan sebagai LOCALSYSTEM atau semacamnya, segalanya menjadi lebih menarik, karena ia tidak akan dapat 'melihat' drive jaringan sama sekali, atau memerlukan beberapa juggling kredensial untuk membuat sesuatu berfungsi.
sumber
Gunakan ini dengan risiko Anda sendiri. (Saya telah mengujinya di XP dan Server 2008 x64 R2)
Untuk peretasan ini, Anda memerlukan SysinternalsSuite oleh Mark Russinovich :
Langkah satu: Buka prompt cmd.exe tinggi (Jalankan sebagai administrator)
Langkah dua: Tinggikan kembali untuk melakukan root menggunakan PSExec.exe: Arahkan ke folder yang berisi SysinternalsSuite dan jalankan perintah berikut
psexec -i -s cmd.exe
Anda sekarang berada di dalam prompt yang adant authority\system
dan Anda dapat membuktikan ini dengan mengetikwhoami
. Itu-i
diperlukan karena pemetaan drive perlu berinteraksi dengan penggunaLangkah Tiga: Buat drive yang dipetakan terus-menerus sebagai akun SYSTEM dengan perintah berikut
net use z: \\servername\sharedfolder /persistent:yes
Sangat mudah!
PERINGATAN : Anda hanya dapat menghapus pemetaan ini dengan cara yang sama seperti Anda membuatnya, dari akun SYSTEM. Jika Anda perlu menghapusnya, ikuti langkah 1 dan 2 tetapi ubah perintah pada langkah 3 menjadi
net use z: /delete
.CATATAN : Drive yang dipetakan yang baru dibuat sekarang akan muncul untuk SEMUA pengguna sistem ini tetapi mereka akan melihatnya ditampilkan sebagai "Drive Jaringan Terputus (Z :)". Jangan biarkan nama itu membodohi Anda. Mungkin mengklaim terputus tetapi akan bekerja untuk semua orang. Begitulah cara Anda mengetahui bahwa peretasan ini tidak didukung oleh M $.
sumber
net use z: \\servername\sharedfolder
dan setel agar dijalankan pada startup komputer, per technet.microsoft.com/en-us/library/cc770556.aspx Ini akan berjalan sebagai akun SYSTEM, jadi tidak perlu untuk psexec./USER:[remotecomp]\[remoteusername] [password]
(perintah tidak berfungsi dengan baik kadang-kadang ketika nama pengguna jarak jauh tidak didahului dengan nama komputer jarak jauh dan backslash. Juga, jika berbagi dilindungi kata sandi, dan muncul untuk orang lain sebagai terputus drive, itu TIDAK dapat diakses untuk semua orang. Setiap pengguna pada sistem itu, di mana SISTEM me-mount berbagi harus tahu kata sandi untuk berbagi itu (diuji pada XPx64)Saya menemukan solusi yang mirip dengan psexec tetapi berfungsi tanpa alat tambahan dan selamat dari reboot .
Cukup tambahkan tugas terjadwal, masukkan "sistem" di bidang "jalankan sebagai" dan arahkan tugas ke file batch dengan perintah sederhana
Kemudian pilih "jalankan saat startup sistem" (atau serupa, saya tidak memiliki versi bahasa Inggris) dan Anda selesai.
sumber
/persistent:yes
Cara yang lebih baik adalah dengan menggunakan tautan simbolik menggunakan mklink.exe. Anda bisa membuat tautan di sistem file yang dapat digunakan aplikasi apa pun. Lihat http://en.wikipedia.org/wiki/NTFS_symbolic_link .
sumber
Ada jawaban yang bagus di sini: https://superuser.com/a/651015/299678
Yaitu Anda dapat menggunakan tautan simbolis, mis
sumber
Anda bisa memberi kami perintah 'net use':
Jika itu tidak berhasil dalam layanan, coba Winapi dan PInvoke WNetAddConnection2
Sunting: Jelas saya salah paham dengan Anda - Anda tidak dapat mengubah kode sumber layanan, bukan? Dalam hal ini saya akan mengikuti saran oleh mdb , tetapi dengan sedikit twist: Buat layanan Anda sendiri (sebut saja layanan pemetaan) yang memetakan drive dan menambahkan layanan pemetaan ini ke dependensi untuk layanan pertama (pekerjaan aktual). Dengan begitu layanan yang bekerja tidak akan dimulai sebelum layanan pemetaan telah dimulai (dan memetakan drive).
sumber
ForcePush,
CATATAN : Drive yang dipetakan yang baru dibuat sekarang akan muncul untuk SEMUA pengguna sistem ini tetapi mereka akan melihatnya ditampilkan sebagai "Drive Jaringan Terputus (Z :)". Jangan biarkan nama itu membodohi Anda. Mungkin mengklaim terputus tetapi akan bekerja untuk semua orang. Itulah cara Anda mengetahui bahwa peretasan ini tidak didukung oleh M $ ...
Itu semua tergantung pada izin berbagi. Jika Anda memiliki Semua Orang di izin berbagi, drive ini dipetakan akan dapat diakses oleh pengguna lain. Tetapi jika Anda hanya memiliki beberapa pengguna tertentu yang kredensial yang Anda gunakan dalam skrip batch Anda dan skrip batch ini ditambahkan ke skrip Startup, hanya akun Sistem yang akan memiliki akses ke share tersebut bahkan bukan Administrator. Jadi, jika Anda menggunakan, misalnya, pekerjaan ntbackuo terjadwal, Akun sistem harus digunakan di 'Jalankan sebagai'. Jika layanan Anda 'Masuk sebagai: Akun Sistem Lokal', layanan itu akan berfungsi.
Apa yang saya lakukan , saya tidak memetakan huruf drive apa pun dalam skrip startup saya, hanya menggunakan
net use \\\server\share ...
dan menggunakan jalur UNC dalam pekerjaan yang dijadwalkan. Menambahkan skrip logon (atau hanya menambahkan file batch ke folder startup) dengan pemetaan untuk berbagi yang sama dengan beberapa huruf drive:net use Z: \\\...
dengan kredensial yang sama. Sekarang pengguna yang login dapat melihat dan mengakses drive yang dipetakan. Ada 2 koneksi ke share yang sama. Dalam hal ini pengguna tidak melihat "Drive jaringan terputus ..." yang mengganggu. Tetapi jika Anda benar-benar membutuhkan akses ke bagan tersebut dengan huruf drive bukan hanya UNC, peta yang bagikan dengan huruf-huruf drive yang berbeda, misalnya Y untuk Sistem dan Z untuk pengguna.sumber
Menemukan cara untuk memberikan akses Layanan Windows ke Drive Jaringan.
Ambil Windows Server 2012 dengan NFS Disk misalnya:
Tulis file batch, mis: C: \ mount_nfs.bat
Buka "Penjadwal Tugas", buat tugas baru:
Setelah dua langkah sederhana ini, Layanan Windows ActiveMQ saya berjalan di bawah hak istimewa "Sistem Lokal", berkinerja sempurna tanpa login.
sumber
Alasan mengapa Anda dapat mengakses drive ketika Anda biasanya menjalankan executable dari command prompt adalah bahwa ketika Anda mengeksekusi sebagai exe normal Anda menjalankan aplikasi itu di akun Pengguna dari mana Anda telah logon. Dan pengguna itu memiliki hak istimewa untuk mengakses jaringan. Tetapi, ketika Anda menginstal executable sebagai layanan, secara default jika Anda melihat dalam tugas mengelola dijalankan di akun 'SYSTEM'. Dan Anda mungkin tahu bahwa 'SISTEM' tidak memiliki hak untuk mengakses sumber daya jaringan.
Mungkin ada dua solusi untuk masalah ini.
Untuk memetakan drive sekeras yang sudah ditunjukkan di atas.
Ada satu lagi pendekatan yang bisa diikuti. Jika Anda membuka manajer layanan dengan mengetikkan 'services.msc'you dapat pergi ke layanan Anda dan di properti layanan Anda ada tab logOn di mana Anda dapat menentukan akun sebagai akun lain selain' Sistem 'Anda dapat mulai layanan dari akun pengguna Anda sendiri yang masuk atau melalui 'Layanan Jaringan'. Ketika Anda melakukan ini .. layanan ini dapat mengakses komponen jaringan dan drive apa pun meskipun mereka tidak persisten juga. Untuk mencapai ini secara pemrograman Anda dapat melihat fungsi 'CreateService' di http://msdn.microsoft.com/en-us/library/ms682450(v=vs.85).aspx dan dapat mengatur parameter 'lpServiceStartName' ke 'NT AUTHORITY \ NetworkService '. Ini akan memulai layanan Anda di bawah 'Layanan Jaringan'
Anda juga dapat mencoba dengan menjadikan layanan ini interaktif dengan menentukan SERVICE_INTERACTIVE_PROCESS dalam flag parameter tipe layanan dari fungsi CreateService () Anda, tetapi ini akan dibatasi hanya sampai XP karena Vista dan 7 tidak mendukung fitur ini.
Semoga solusinya membantu Anda .. Beritahu saya jika ini berhasil untuk Anda.
sumber
Anda tidak dapat mengubah pengguna yang berjalan di bawah Layanan dari "Sistem" atau menemukan cara licik untuk menjalankan pemetaan Anda sebagai Sistem.
Yang lucu adalah bahwa ini dimungkinkan dengan menggunakan perintah "at" , cukup jadwalkan pemetaan drive Anda satu menit ke masa depan dan itu akan dijalankan di bawah akun Sistem yang membuat drive dapat dilihat oleh layanan Anda.
sumber
Alih-alih mengandalkan drive persisten, Anda dapat mengatur skrip untuk memetakan / membatalkan pemetaan drive setiap kali Anda menggunakannya:
Ini bekerja untuk saya.
sumber
Saya belum dapat berkomentar (mengerjakan reputasi) tetapi membuat akun hanya untuk menjawab @Tek Jerk @ spankmaster79 (nama bagus lol) dan masalah @NMC yang mereka laporkan sebagai balasan untuk "Saya menemukan solusi yang mirip dengan yang ada di psexec tetapi bekerja tanpa alat tambahan dan selamat dari reboot. " posting @Larry telah dibuat.
Solusi untuk ini adalah dengan hanya menjelajah ke folder itu dari dalam akun login, yaitu:
dan biarkan ia meminta untuk masuk, dan masukkan kredensial yang sama yang Anda gunakan untuk UNC di psexec. Setelah itu mulai bekerja. Dalam kasus saya, saya pikir ini karena server dengan layanan ini bukan anggota dari domain yang sama dengan server yang saya pemetaan. Saya berpikir jika UNC dan tugas yang dijadwalkan keduanya merujuk ke IP bukan nama host
itu bisa menghindari masalah sama sekali.
Jika saya pernah mendapatkan poin rep yang cukup di sini saya akan menambahkan ini sebagai balasan.
sumber