sudo Remove-Item foo.txt
dimana foo.txt dimiliki oleh root
foo.txt
dihapus
sudo: Remove-Item: command not found
Bersenandung! Sangat menarik. Tapi, menurut saya perilaku sebenarnya seperti yang diharapkan. Seperti di Windows, kami tidak memiliki perintah seperti sudo.
Tapi, Anda bisa menggunakan 'sudo powershell' dan kemudian menghapus foo.txt (yang dibuat menggunakan 'sudo powershell') kemudian berfungsi saat menggunakan Remove-Item. Tentu saja, ini tidak akan berfungsi dalam izin non-tinggi.
Saya hanya akan menggunakan 'sudo' pada perintah Linux ("sudo nautilus") dari dalam PowerShell.
:)
Bahkan pada Windows, akan lebih baik jika memiliki kemampuan yang sama untuk menjalankan cmdlet sebagai pengguna lain atau yang ditinggikan dan sesuatu yang dapat diandalkan dalam skrip portabel. Mungkin perlu RFC untuk ini.
Fungsionalitas ini akan berguna untuk mengatasi # 3506.
Ini akan menjadi pemblokir untuk mengadaptasi Linux bagi saya jika ini tidak diselesaikan. Kami tidak diizinkan melakukan sudo bash dan juga tidak akan dapat melakukan sudo powershell.
Saya setuju dengan Maximo, kita harus meninggalkan sudo untuk bash dan membuat cmdlet baru untuk melakukan elevasi di PowerShell menggunakan sudo sebagai perancah pada fungsionalitas yang diharapkan.
@dantraMSFT telah menyelidiki hal ini, Dan dapatkah Anda memberikan pembaruan tentang pemikiran terkini untuk ini?
@pixelrebirth Dapatkah Anda memberikan detail lebih lanjut tentang apa yang Anda harapkan? Apakah Anda mengharapkan eksekusi sederhana dengan menunggu, pengalihan keluaran, atau pengalihan pipeline?
Beberapa contoh penggunaan akan berguna juga.
@dantraMSFT Demi argumen saya akan memanggil sudo baru seperti cmdlet: Invoke-Elevated
Beginilah cara sudo bekerja dan akan diterjemahkan ke Invoke-Elevated dengan cara PowerShell
$cred = Get-Credential
Invoke-Elevated -credential $cred -command {
Get-ChildItem ./test | Remove-Item -force
} | Get-SomeCmdlet
Dalam contoh ini, semua yang ada di scriptblock akan dieksekusi dan kemudian disalurkan ke Get-SomeCmdlet NON yang ditinggikan
Cred bisa menjadi pengguna yang berbeda atau diri Anda sendiri sebagai pengguna yang ditinggikan (izin perlu disimpan di suatu tempat seperti file sudoers alias daftar putih)
Logging harus diaktifkan, secara default untuk contoh di mana Invoke-Elevated dijalankan:
Pengguna | Perintah | DateTime atau pencatatan format serupa
Mungkin beberapa di antaranya diperpanjang atau diubah nanti, tetapi inilah yang akan menghapus pemblokir saya
Ini juga harus bekerja seperti:
Get-ChildItem ./test | Invoke-Elevated -command {Remove-Item -force}
Di mana kredensial adalah pengguna Anda saat ini dan itu hanya meminta kata sandi ...
Get-ChildItem NON dinaikkan, Remove-Item dinaikkan dalam contoh ini
Saya berada di panggilan komunitas hari ini menanyakan tentang hal ini, tetapi istri saya terluka selama penjelasan tentang tantangan untuk itu dan saya banyak melewatkannya. Bisakah Anda memberi catatan di sini agar saya dapat menyampaikannya kepada bos saya?
Saya akan membantu bagaimanapun mungkin dan memberikan tekanan di mana pun saya perlu.
@pixelrebirth harap dia baik-baik saja! Kami akan merekam panggilan tersebut dalam satu atau dua hari ke depan, jadi Anda bisa menyusul jika mau.
Ringkasan dasarnya adalah sudo powershell -c "invoke-foo"
dari shell lain, tetapi itu jelas tidak bisa diterapkan.
@dantraMSFT : saat Anda mengerjakan penyelidikan, mungkin memposting beberapa status untuk memastikan bahwa setiap orang memahami pengorbanan dengan pendekatan yang berbeda?
Ini mungkin tampak jelas, tetapi mungkin lihat kode sumber sudo dan lihat bagaimana mereka mengelolanya - mungkin memerlukan beberapa pengkodean tingkat rendah. Saya berharap saya memiliki pemahaman kode yang lebih dalam untuk membantu.
Dia baik-baik saja, dia merasakan di pinggul operasinya. Terima kasih atas tanggapan yang cepat untuk ini. Saya sedang mengerjakan sedikit pekerjaan retas yang akan saya posting di sini jika saya berhasil.
@pixelrebirth Untuk referensi, sudo menggunakan bit setuid, lihat https://unix.stackexchange.com/a/80350/86669 untuk detailnya. Mungkin akan menjadi ide yang buruk untuk mengaturnya di seluruh cangkang.
Sudo Windows asli harus dimiliki (jadi masalahnya mungkin bukan di sini, meskipun opsi yang hanya dapat digunakan melalui Powershell dapat diterima oleh saya). Saya telah menggunakan Powershell sejak awal dan telah melihat 99 varian skrip sudo, seperti Invoke-Elevated
atas (atau milik saya yang saya gunakan setiap hari). Menyertakan cmdlet seperti itu di Powershell akan menjadi langkah maju, namun, mereka semua merasa tidak praktis jika dibandingkan dengan cara kerjanya di Linux.
Salah satu hal yang mengganggu bagi saya adalah ia memulai jendela shell baru (bukan di linux) yang ingin saya lihat diimplementasikan di Powershell / Windows, tidak yakin apakah ini secara teknis mungkin dilakukan di Windows.
Meskipun saya menyukai ide cmdlet lain ("Invoke-Elevated") yang mungkin dapat digunakan di Windows, tetapi saya tidak mengerti mengapa tidak tetap membuka PowerShell dengan 'sudo' jika Anda perlu membuat skrip untuk dijalankan dengan high hak istimewa?
Terutama Jika Anda mengotomatiskan tugas yang pada akhirnya akan dijadwalkan untuk dijalankan dengan semacam kredensial hak istimewa yang tinggi.
:)
Karena itu bukan alur kerja biasa. Anda tidak 'sudo' dan tinggal di sana selamanya, Anda menggunakan perintah khusus sudo dan tinggal di dunia non-sudo. Tidak ada cara cepat untuk melakukannya di Windows dan PowerShell sendiri sangat lambat untuk memulai, terutama dengan beberapa elemen profil yang disertakan.
Dalam sesi setiap hari yang khas saya sudo 20 kali perintah tertentu, yang lain menjalankan tanpa hak. Itulah inti dari sudo, untuk meningkatkan hak istimewa hanya jika diperlukan dan mungkin diperlukan cukup sering.
Alur kerja saya adalah, jalankan perintah, mengeluh tentang hak istimewa, saya sudo -L
yang akan menjalankan perintah terakhir lagi dengan hak istimewa. Karena posh sangat lambat untuk memulai, saya hanya menjalankan shell admin dan terus-menerus hidup di dalamnya, jelas bukan ide yang bagus.
Terima kasih @majkinetor!
:)
Sudo harus berupa varian CLI dari perintah UAC. Windows, sampai saat ini, tidak pernah ramah CLI, tetapi sekarang saya pikir kita membutuhkan ini. Waktunya telah tiba ketika Anda dapat melakukan 100% hal-hal Windows di shell saja - Saya pribadi hanya menggunakan shell dan browser, hampir tidak ada yang lain.
@ Majkinetor : Sejauh yang saya tahu, satu-satunya cara untuk meluncurkan proses yang ditingkatkan adalah melalui prompt UAC.
FWIW: Anda dapat melakukannya di windows tanpa perubahan PowerShell menggunakan ShellExecuteEx.
Namun, jika Anda mengharapkan untuk mengalirkan kembali hasilnya; itu cerita yang sangat berbeda.
Sejauh yang saya tahu, satu-satunya cara untuk meluncurkan proses yang ditinggikan adalah melalui prompt UAC.
Aplikasi tertentu dapat dikecualikan dari UAC yang menurut saya dapat menangani ketinggian dengan caranya sendiri.
Ingin menawarkan solusi / solusi saya untuk Sudo di Windows. Umpan balik / kritik akan diterima. Jika tidak pantas untuk memposting hal semacam ini di sini saya mohon maaf sebelumnya.
https://github.com/pldmgg/misc-powershell/tree/master/MyModules/Sudo
https://www.powershellgallery.com/packages/Sudo
Ada tiga fungsi dalam Modul Sudo:
Start-SudoSession (alias "sudo") adalah untuk perintah satu kali yang perlu Anda tingkatkan. Ini akan meminta kredensial dan memberi Anda prompt UAC sebelum menjalankan perintah.
.CONTOH
$ModuleToInstall = "PackageManagement"
$LatestVersion = $(Find-Module PackageManagement).Version
# PLEASE NOTE the use of single quotes in the below $InstallModuleExpression string
$InstallModuleExpression = 'Install-Module -Name $ModuleToInstall -RequiredVersion $LatestVersion'
Start-SudoSession -Credentials $MyCreds -Expression $InstallModuleExpression
New-SudoSession jika untuk membuka ElevatedPSSession di mana perintah yang ditinggikan dapat disuntikkan. Idenya adalah bahwa dalam skrip yang lebih panjang dengan beberapa operasi yang memerlukan elevasi, Anda membuat ElevatedPSSession di awal dan menerima prompt UAC SEKALI, lalu menyuntikkan perintah yang ditinggikan tersebut menggunakan Invoke-Command ke ElevatedPSSession tersebut saat diperlukan.
.CONTOH
PS C:\Users\zeroadmin> $MyElevatedSession = New-SudoSession -UserName zeroadmin -Credentials $MyCreds
PS C:\Users\zeroadmin> Get-PSSession
Id Name ComputerName ComputerType State ConfigurationName Availability
-- ---- ------------ ------------ ----- ----------------- ------------
1 ElevatedSess... localhost RemoteMachine Opened Microsoft.PowerShell Available
PS C:\Users\zeroadmin> Invoke-Command -Session $MyElevatedSession.ElevatedPSSession -Scriptblock {Install-Package Nuget.CommandLine -Source chocolatey}
Akhirnya, Remove-SudoSession menghapus ElevatedPSSession yang dibuat oleh fungsi New-SudoSession. Idenya adalah menempatkan ini di akhir skrip Anda, di mana Anda akan menerima prompt UAC. Jadi secara total, untuk menjalankan sejumlah operasi yang ditinggikan dalam skrip tertentu, Anda hanya mendapatkan dua perintah UAC - satu untuk membuka ElevatedPSSession dan satu lagi untuk menutupnya. Hapus-PSSession penggunaan:
.CONTOH
$MyElevatedSession = New-SudoSession -UserName zeroadmin -Credentials $MyCreds
PS C:\Users\zeroadmin> Get-PSSession
Id Name ComputerName ComputerType State ConfigurationName Availability
-- ---- ------------ ------------ ----- ----------------- ------------
1 ElevatedSess... localhost RemoteMachine Opened Microsoft.PowerShell Available
Remove-SudoSession -Credentials $MyCreds -OriginalConfigInfo $MyElevatedSession.OriginalWSManAndRegistryStatus -SessionToRemove $MyElevatedSession.ElevatedPSSession
Di bawah tenda, inilah yang dilakukannya dari sesi PowerShell Non-Elevated (jika sesi sudah dinaikkan, itu tidak melakukan apa-apa):
Cek untuk memastikan WinRM / WSMan diaktifkan dan dikonfigurasi untuk mengizinkan Otentikasi CredSSP (jika tidak maka
perubahan konfigurasi dibuat)
Memeriksa Objek Kebijakan Grup Lokal ...
Konfigurasi Komputer -> Template Administratif -> Sistem -> Delegasi Kredensial -> Izinkan Pendelegasian Kredensial Baru
... untuk memastikannya diaktifkan dan dikonfigurasi untuk mengizinkan koneksi melalui WSMAN / LocalHostFQDN
Membuat PSSession yang Ditinggikan menggunakan cmdlet New-PSSession
Menjalankan ekspresi yang diteruskan ke parameter -Expression di Elevated PSSession
Menghapus PSSession yang Ditinggikan dan mengembalikan semua perubahan yang dibuat (jika ada) ke Kebijakan Grup Lokal dan konfigurasi WSMAN / WinRM.
EDIT: Salah ketik contoh Hapus-SudoSession yang diperbarui.
@pldmgg Saya tidak melihat lisensi apa yang digunakan untuk kode Anda sehingga kami bahkan tidak dapat melihat apa yang telah Anda lakukan. Bisakah Anda menambahkan file LISENSI? MIT akan menjadi yang paling ramah dan mengizinkan kami menggunakan kode Anda atau mengambilnya. Terima kasih!
@pldmgg Menindaklanjuti apa yang @ SteveL-MSFT sebutkan, panduan hebat untuk membantu Anda melalui proses ini adalah https://choosealicense.com/.
tl; dr - Sulit untuk salah dengan lisensi berikut:
Apache 2.0 memiliki beberapa kekuatan tambahan di atasnya dibandingkan MIT, tetapi secara keseluruhan, mereka sangat permisif dan mudah digunakan dengan lisensi open source lainnya dan sangat ramah bisnis. Jika Anda memilih lisensi copyleft (GPL), kode tidak dapat digunakan dengan alat lain tanpa alat lain tersebut pindah ke lisensi GPL (juga dikenal sebagai lisensi viral - LGPL menjadi pengecualian di sini, di mana modul / binari berlisensi LGPL dapat ditempatkan di samping alat lain tanpa memerlukan perubahan lisensi ke kode lain).
@pldmgg juga, sangat, sangat keren!
@ferventcoder Terima kasih atas referensi https://choosealicense.com! Seperti yang mungkin kalian duga (+ @ SteveL-MSFT), saya tidak begitu yakin lisensi apa yang harus dipilih. Saya memperbarui seluruh repo misc-powershell saya untuk menggunakan Apache 2.0, dan saya memperbarui Sudo.psd1 untuk merujuk Apache 2.0 (di repo git saya dan juga Galeri PowerShell). Semoga ini bisa bermanfaat bagi orang-orang! Semua saran / kritik diterima!
@ SteveL-MSFT Dapatkah Anda menggunakannya jika lisensinya adalah Apache 2.0? Jika Anda membutuhkannya menjadi MIT, beri tahu saya dan saya akan memperbarui.
@pldmgg Masalah terbesar saya dengan solusi Anda adalah penggunaan CredSSP. Itu adalah metode yang kurang aman untuk penanganan kredensial dan menurut saya banyak risiko terkena batas UAC.
Mengutip dari Powershell Magaize ,
"Merupakan ide yang buruk untuk menggunakan CredSSP untuk mengotentikasi ke workstation pengguna menggunakan akun administrator domain; pada dasarnya Anda memberikan kunci ke kerajaan."
"Jangan menaruh kredensial kepercayaan tinggi pada komputer dengan kepercayaan rendah"
Inti dari UAC adalah tentang tidak mempercayai aplikasi di komputer. Meskipun saya mungkin menyetujui perintah sudo yang akhirnya menjalankan malapetaka di komputer saya, biasanya itu tidak akan memiliki kredensial saya. Jika perintah sudo sekarang memiliki akses yang jelas ke kredensial domain saya, itu bisa melakukan lebih banyak kerusakan dalam membahayakan jaringan saya.
Dapatkah solusi Anda berfungsi tanpa CredSSP? Jika tidak, masalah apa yang Anda coba selesaikan dalam menggunakan CredSSP? Informasi tersebut dapat berguna bagi tim PowerShell untuk menemukan solusi yang lebih aman.
@pldmgg Saya yakin Apache 2.0 sudah cukup. Terima kasih!
@ dragonwolf83 Ini adalah masalah umum. Saya benar-benar mengemukakan seluruh argumen saya bahwa tidak apa-apa dalam situasi khusus ini di utas ini:
Tapi, untuk meringkas, saya pikir tidak apa-apa di sini karena:
Ini terhubung ke localhost (bukan remote)
Sejak Windows 8.1 / Server 2012R2, CredSSP tidak lagi mengirim sandi dalam teks biasa
Remote Desktop Protocol masih rentan terhadap serangan pass-the-hash, seperti CredSSP, jadi jika Anda mengkhawatirkan hal itu untuk CredSSP, Anda juga harus mengkhawatirkannya untuk RDP. (Tentu saja, ada mode Admin Terbatas RDP atau "Penjaga Kredensial" baru)
PS Artikel ini telah menjadi referensi goto saya untuk PowerShell Security (dan di situlah saya belajar tentang Credential Guard) .. Saya sangat merekomendasikannya.
Untuk 6.0.0, saya pikir di mana kita akan berakhir adalah:
Fungsi skrip bernama sudo yang hanya ada di Linux (kami menunda dukungan elevasi Windows). Jika argumennya adalah cmdlet / scriptblock, maka sudo PowerShell dengan argumen tersebut. Ini berarti bahwa untuk saat ini, objek pipelining tidak akan berfungsi. Jika argumennya adalah perintah asli, kami langsung meneruskannya ke sudo.
Setelah 6.0.0, pada akhirnya kami ingin mendapatkan pengalaman seperti:
Get-Item foo.txt | sudo Remove-Item
dan berfungsi di Windows dan Linux. cc @ joeyaello
Berdasarkan diskusi @ PowerShell / powershell-committee, ini tidak diperlukan untuk 6.0.0 dan rekomendasinya adalah berinvestasi dalam cmdlet tipe Invoke-AsUser
Untuk mengubah elevasi secara umum, Anda memerlukan sesuatu dengan bit setuid di bawah UNIX dan sudo itu sendiri. sudo adalah biner khusus yang tidak dapat dengan mudah ditiru dan tidak boleh ditiru demi keamanan. Harap biarkan sudo yang sebenarnya digunakan untuk meluncurkan PowerShell sementara yang menjalankan perintah yang dimaksud. Juga, melakukan sudo ke seluruh shell agak tidak aman mengingat orang mungkin lupa shell terbuka di server jarak jauh. sudo memiliki mekanisme untuk melupakan bahwa pengguna meningkat setelah beberapa menit yang melindungi mesin dalam jangka panjang. Resolusi untuk masalah ini akan memungkinkan lebih banyak orang menggunakan PowerShell dalam produksi di server Linux. Saat ini, PowerShell akan tetap menjadi hal baru sampingan karena keamanan adalah yang terpenting dalam produksi.
@borgdylan hari ini, Anda dapat melakukan sudo pwsh -c foo
dalam PowerShell Core (atau hanya sudo nativecmd
). Saya pikir keinginannya adalah untuk dapat melakukan sudo cmdlet dalam sesi PowerShell Core yang ada. Kami tidak mencoba membuat ulang sudo
sini, tetapi memiliki beberapa gula sintaksis untuk membuatnya lebih mudah digunakan.
Dengan # 1527 dan masalah ini semakin didorong ke belakang tonggak sejarah, saya mulai bertanya-tanya: Apakah semua orang benar-benar nyaman masuk ke sesi root untuk melakukan hal-hal admin? Praktis tidak ada cara mudah untuk menjalankan perintah PowerShell saat PS terlibat dengan cara apa pun.
@MathiasMagnus Saya belum menguji ini secara menyeluruh, tetapi Anda dapat mengonfigurasi perintah umum atau berulang kali digunakan untuk tidak memerlukan kata sandi pada sudo. Untuk menguji saya menambahkan ini dengan visudo:
mark ALL=(ALL:ALL) NOPASSWD: /usr/bin/pwsh
Saya kemudian dapat menelepon sudo pwsh -c 'cat /etc/sudoers'
melalui sesi remote PowerShell SSH. Bergantung pada bagaimana Anda melakukan keamanan Anda dan apa yang sebenarnya Anda konfigurasikan di sudoers (misalnya, All=(ALL:ALL)
agak terbuka ...) ini bisa aman atau berbahaya.
Jika Anda ssh ke Linux (yaitu ke bash shell alih-alih PowerShell SSH remoting) Anda dapat menjalankan sudo dengan kata sandi normal yang meminta dalam pwsh sejauh yang saya tahu.
Bukan terlalu banyak sehingga tidak mungkin, hanya saja solusi saat ini dilengkapi dengan beberapa bagasi.
@MathiasMagnus # 1527 masih ditargetkan untuk 6.1.0 karena tidak ada solusi yang baik untuk itu. Untuk cmdlet, masalah utamanya adalah komplikasi pemipaan ke / dari cmdlet sudo'd. Untuk operasi tunggal sudo pwsh -c
dapat digunakan. Tentu saja jika seseorang dari komunitas mengajukan PR, kami akan dengan senang hati menerimanya.
Di Windows, ini sekarang menjadi masalah yang menurut saya tidak dapat diselesaikan tanpa tidak meningkatkan koneksi ssh, yang kemudian membutuhkan cara untuk meningkatkan dari baris perintah.
Saya tahu mudah untuk membicarakan hal-hal yang tidak berfungsi dan tidak mengambil tindakan, tetapi keahlian saya ada di tempat lain. Saya sebagian besar berkontribusi pada pustaka C ++ dan GPGPU dan Vcpkg melakukan banyak port CMake. Saya belum pernah menulis C # dan saya rasa saya tidak akan memiliki kapasitas untuk itu. Namun saya mengelola sekelompok kecil ~ 12 mesin. Itu di perbatasan dapat dikelola dengan tangan, tetapi kemampuan sudo hilang sama sekali, itu jika saya tidak bermaksud membuat login untuk pengguna root di Ubuntu, sesuatu yang tidak disukai. DSC Core akan menjadi solusi, tetapi meskipun telah diumumkan setahun yang lalu, baru-baru ini telah ditunda tanpa batas waktu.
PowerShell Core di Linux seperti saat ini berdiri agak terjebak antara cara otomatis melakukan sesuatu dan gaya ad-hoc yang akrab bagi sysadmin Linux. Saya berharap seseorang akan meluangkan waktu untuk menghadiri masalah ini.
@MathiasMagnus ini adalah sesuatu yang diinginkan semua orang, tetapi bukan masalah sederhana untuk dipecahkan. Perhatikan bahwa menggunakan sudo
terhadap perintah asli berfungsi dengan baik, itu benar-benar tidak tersedia untuk menjalankan sudo
melawan cmdlet. Solusinya adalah dengan memanggil pwsh dalam pwsh:
sudo pwsh -c hapus-item sesuatu
Komplikasi utamanya adalah ketika itu adalah sesuatu di dalam pipeline:
dapatkan-item foo * | sudo hapus-item
@ SteveL-MSFT Setidaknya konsepnya tidak terlalu rumit. Tolong beritahu saya apa yang Anda pikirkan.
Kami hanya membutuhkan kombinasi sudo, su dan binari login, untuk menangani semua kasus.
Itu perlu dilakukan:
Alur eksekusi akan terlihat seperti ini:
PWSH (membuat socket /proc/self/change-user.socket) => PWSH-SU (dipanggil dengan socket dan tujuan pengguna sebagai parameter; PWSH-SU diatur suid untuk dijalankan sebagai root itu sendiri) => PWSH sebagai pengguna tujuan terhubung ke soket unix.
Bagian yang paling memakan waktu adalah membiarkan PowerShell terhubung secara internal melalui soket unix. Hanya mengarahkan input dan output linke aplikasi unix lain tidak cukup, karena kita berurusan dengan objek dan tidak hanya dengan string saat memanggil pipa.
Mengapa menggunakan ketiga biner?
sudo diperlukan untuk memungkinkan banyak pengguna beralih ke konteks root tanpa kehilangan kemampuan diaudit .
su digunakan untuk beralih ke pengguna lain dengan menggunakan kredensial pengguna tujuan.
login digunakan untuk membuat sesi login baru.
Memiliki semua fungsi ini juga di PowerShell dapat berguna dalam banyak kasus, dibandingkan hanya memiliki satu.
Menggunakan pipa dapat membuat ini bekerja pada Windows juga dengan cara yang tidak terlalu mengejutkan dan lebih nyaman - Saya benci bahwa saya mendapatkan shell lain dengan semua skrip "sudo" + klik UAC tetapi dengan pipa seperti ini dapat dilakukan dalam shell yang sama saja seperti di linux dengan berkomunikasi melalui pipa dengan penerjemah lain yang sudah berjalan sebagai admin dan mungkin menerapkan beberapa hal sudo nyata (batas waktu cepat misalnya atau file sudoers dengan perintah sebagai alternatif untuk titik akhir PowerShell kustom)
Saya sangat senang melihat pemikiran tentang ini, tetapi sejauh implementasi yang sebenarnya, menurut saya kita sudah sedikit maju dari diri kita sendiri. Hal pertama adalah sistem membutuhkan cara untuk membuat proses yang ditinggikan, utas, apa pun dari yang tidak terkait. Tak satu pun dari masalah cmdlet yang benar-benar dapat diselesaikan jika kita tidak dapat membuat instance PowerShell yang ditinggikan untuk memulai, tanpa melalui UAC. IMO, skenario pertama yang akan dibahas di sini harus - Anda memiliki sesi SSH terbatas - bagaimana Anda menjalankan exe biasa dengan izin admin?
Saya mulai bereksperimen dengan ini di sini (saat ini rusak karena saya telah memfaktorkan ulangnya, tetapi konsepnya berfungsi), tetapi saya tidak berpikir aplikasi pihak ketiga adalah solusi sebenarnya. Saya ingin melihat Windows mengirimkan exe 'sudo' terlebih dahulu. Ini bisa sesederhana mengaktifkan runas
untuk membuat proses yang ditinggikan dengan prompt kredensial, tetapi tanpa langkah pertama ini semua teoritis.
Tak satu pun dari masalah cmdlet yang benar-benar dapat diselesaikan jika kita tidak dapat membuat instance PowerShell yang ditinggikan untuk memulai, tanpa melalui UAC
Salah satu kemungkinan untuk melakukan ini melibatkan penggunaan tugas terjadwal dengan opsi 'jalankan dengan hak istimewa tertinggi'.
Ya, tetapi untuk membuatnya, Anda harus sudah memiliki izin admin, bukan? Itulah yang dilakukan psexec. Sejauh yang saya tahu, saat ini, Anda harus melalui UAC. Saya ingin melihat perubahan itu, dan dengan semua sesi SSH yang ditingkatkan, ini semacam masalah keamanan. Jika beberapa perangkat lunak samar mencoba melakukan SSH ke mesin Windows saya, katakanlah dari komputer lain tempat saya menyiapkan kunci pribadi (atau skenario loopback), perangkat lunak tersebut dapat melakukan apa pun yang diinginkan.
@parkovski Solusi saya adalah Linux / MacOS dan semua OS * NIX lainnya saja. Windows tidak mendukung SUID dan GUID.
Karena sudo saat ini juga tidak ada di Windows, itu di luar cakupan masalah ini bagi saya.
Dan untuk mengatasi masalah UAC, windows harus mengimplementasikan SUID dan GUID di masa mendatang. Segala sesuatu yang lain hanyalah solusi kotor untuk masalah lama ...
Ya, tetapi untuk membuatnya, Anda harus sudah memiliki izin admin, bukan?
Benar, tapi tidak memicu UAC popup.
UAC juga dapat dilewati secara resmi dengan Toolkit Kompatibilitas Aplikasi Microsoft.
Windows tidak mendukung SUID dan GUID.
Windows tidak harus mendukungnya dan konsep tidak valid pada OS itu.
Model izinnya didasarkan pada ACL dan tidak ada kepemilikan grup tunggal.
Ini juga tidak harus berupa replika sudo penuh di windows, hanya cara yang lebih ramah untuk menjalankan perintah admin.
Saya pikir tidak apa-apa untuk menunda dukungan Windows karena pengguna Windows mungkin terbiasa membuka sesi PowerShell yang ditinggikan hari ini sementara pengguna Linux berharap untuk menjalankannya sebagai non-root dan sudo sesuai kebutuhan. Kami hanya ingin memastikan desain apa pun tidak menghalangi dukungan Windows di masa mendatang. Saya juga mungkin akan fokus pada mengaktifkan sudo untuk root daripada pengguna sewenang-wenang untuk menyederhanakannya dan saya yakin ini adalah 90 +% dari penggunaan.
@ SteveL-MS
mungkin juga akan fokus pada mengaktifkan sudo untuk root daripada sembarang pengguna
Saya pikir ini tidak akan membuat perbedaan besar, tetapi memberikan pengalaman su / sudo lengkap untuk abstrak yang saya uraikan di atas , karena mengalihkan konteks pengguna ke root hampir sama dengan beralih ke pengguna lain.
Saya pikir tidak apa-apa untuk menunda dukungan Windows karena pengguna Windows mungkin terbiasa membuka sesi PowerShell yang ditinggikan hari ini
Mayoritas orang yang bekerja dengan saya hanya menonaktifkan UAC jika mereka bisa.
Sayangnya, itu sebenarnya bukan pilihan di banyak lingkungan, dan saya sangat meragukan MS akan sepenuhnya dan membuang UAC. 😕
Masalah ini bukan tentang UAC. Tetapi dari sudut pandang saya, itu harus dibuang seluruhnya dan diganti dengan dua akun yang ketat, satu admin satu pengguna (dan satu admin tidak dapat digunakan untuk logon) filosofi (instalasi default memaksa Anda untuk membuatnya) atau untuk konsep yang sama * yang dimiliki NIX, Anda mulai sebagai pengguna dan meningkatkan sesuai kebutuhan dengan menggunakan sudo dan SUID / SGID-Flags.
Saya baru saja menambahkan yang berikut ini ke $profile
. Saya membahasnya lebih detail di https://stackoverflow.com/a/56265080/118098
function Invoke-MySudo { & /usr/bin/env sudo pwsh -command "& $args" }
set-alias sudo invoke-mysudo
Setidaknya secara sepintas lalu, ini bekerja untuk saya, dan memungkinkan "sudo
Namun, saya bertanya-tanya betapa pentingnya memberikan konteks yang ditinggikan ke seluruh sesi perintah pemanggilan. Di shell lain, sudo
masih menjalankan perintah yang disediakan dalam konteks baru.
Saya telah menerapkan sudo dasar yang berfungsi dengan baik untuk menjalankan perintah sebagai administrator di Windows. Saya tidak yakin apakah ini juga akan berfungsi di linux / mac, karena saya tidak tahu apakah "RunAs" terangkat dengan benar atau tidak di platform tersebut.
Sunting profilmu:
PS > notepad $PROFILE
Tambahkan fungsi sudo
:
function sudo {
Start-Process -Verb RunAs -FilePath "pwsh" -ArgumentList (@("-NoExit", "-Command") + $args)
}
Kemudian panggil di cangkang Anda. Mendukung cmdlet, file yang dapat dieksekusi, apa pun yang biasanya dapat diketik ke dalam prompt PS:
PS > sudo Remove-Item .\test.txt # Remove a file
PS > sudo Copy-Item .\test.txt C:\ # Copy a file
PS > sudo net start w3svc # Start IIS
Jika Anda ingin meneruskan variabel atau ekspresi yang akan dievaluasi pada waktu proses, daripada dievaluasi sebelumnya, bungkus dengan tanda kurung. Sebagai contoh:
PS > $myvar = "a"
PS > sudo echo $myvar # $myvar is pre-evaluated, so the command reads: sudo echo "a"
PS > sudo { $PSVersionTable } # with braces, $PSVersionTable is not evaluated until it is run as administrator
Hapus "-NoExit"
dari fungsi sudo jika Anda ingin jendela administrator ditutup setelah selesai.
@vsalvino Ini adalah solusi yang berguna saat GUI tersedia dan berguna untuk sementara waktu, tetapi ini masih bukan sudo nyata karena tidak berfungsi tanpa akses GUI. Dalam shell jarak jauh (ssh), secara harfiah satu-satunya cara untuk membuat ini berfungsi adalah layanan dan klien seperti yang saya coba tunjukkan di sini .
Untuk mengatasi beberapa saran umum, karena percayalah, saya telah melihat setiap kemungkinan:
Pada dasarnya, seseorang harus melakukan banyak pekerjaan, bukan sebaliknya. Apa yang kami inginkan adalah sesuatu yang, setelah PowerShell mendukung ini di Unix, merupakan pengganti pengganti di Windows, dan berfungsi seperti yang Anda harapkan sudo berfungsi (tanpa GUI, tanpa UAC).
Bisakah kami mengklarifikasi ruang lingkup masalah ini terlebih dahulu? Saya pikir banyak orang sedang membicarakan topik yang berbeda sekarang.
Apakah masalah ini:
a) Tentang menerapkan sudo dalam PowerShell untuk sistem linux / mac?
b) Menerapkan replika sudo ke windows?
c) Izinkan untuk meningkatkan hak saat psremoting?
d) Izinkan meniru identitas pengguna lain di windows?
e) Izinkan untuk beralih dari akun pengguna tanpa hak ke akun pengguna dengan hak istimewa?
f) sesuatu yang sama sekali berbeda?
Untuk a) https://github.com/PowerShell/PowerShell/issues/3232#issuecomment-444849067
Untuk b) Sama seperti a (windows juga memiliki soket unix), tetapi sebagai pengganti suid biner, ia perlu dimunculkan oleh layanan (berjalan di dalam pengguna yang memiliki hak istimewa "bertindak sebagai bagian dari sistem operasi" misalnya sistem pengguna) dan layanan itu juga perlu memeriksa hak istimewa. Atau terapkan konsep SUID / GUID di windows.
Untuk c) tidak diperlukan Anda sudah memiliki hak tertinggi saat melakukan remote. Tidak ada pemisahan hak istimewa saat mengakses host jarak jauh (Ada juga beberapa bypass UAC loopback localhost yang bekerja dengan cara ini).
Untuk d) Juga pendekatan dari a / b dapat diambil, tetapi saya tidak tahu bagaimana seharusnya bekerja ketika mencoba mengakses sumber daya jaringan, tanpa mengetahui kredensial pengguna atau membuat backend otentikasi windows / direktori aktif baru.
Untuk e) Sama seperti b, tetapi pemeriksaan kredensial juga diperlukan, sebagai alternatif, api runas dapat dilonggarkan untuk memungkinkan seseorang yang mengetahui nama pengguna dan kata sandi untuk mendapatkan token pengguna baru dan tetap mengontrol proses itu. (Tidak mungkin mempertimbangkan konsep dan pertimbangan keamanan UAC, jadi kami kembali ke b).
IMO masalah ini seharusnya tentang penerapan sudo di PowerShell di mana fungsionalitas yang mendasarinya sudah ada. Diskusi tentang setara sudo untuk Windows mungkin lebih sesuai dalam masalah terminal ini .
Diskusi tentang setara sudo untuk Windows mungkin lebih sesuai dalam masalah terminal ini.
Mengapa aplikasi terminal menjadi tempat yang lebih baik untuk mendiskusikan sudo, mengingat itu hanyalah frontend lain dari dunia CLI? Dengan logika yang sama, Anda dapat mengajukan tiket di repositori ConEmu.
IMO masalah ini seharusnya tentang penerapan sudo di PowerShell di mana fungsionalitas yang mendasarinya sudah ada.
Salah satu poin dari Powershell berikutnya adalah masalah kompatibilitas yang kurang antara sistem yang menggunakannya. Mengenai itu, melakukan sesuatu hanya pada sistem X adalah IMO tidak dapat diterima.
Saya sebagai pengguna CLI tidak peduli jika sudo
adalah linux sudo penuh menggunakan file suders atau beberapa windows. Sudo hanyalah sebuah antarmuka untuk fitur elevasi dari OS. Antarmuka seperti itu dapat dibuat untuk bekerja hampir sama tanpa memandang 'backend'.
Jika tidak, titik @parkovski tentang singkatan GUI - Saya hanya akan menambahkan Windows Core di antara alasannya.
Mengapa aplikasi terminal menjadi tempat yang lebih baik untuk mendiskusikan sudo, mengingat itu hanyalah frontend lain dari dunia CLI? Dengan logika yang sama, Anda dapat mengajukan tiket di repositori ConEmu.
Karena repo itu bukan hanya "aplikasi terminal"; tim yang menjalankannya pada dasarnya memiliki bagian mode teks Windows dan telah mengatakan bahwa mereka tertarik untuk menerapkan sudo ketika mereka dapat menemukan waktu. Di sisi lain, tidak ada orang dari tim PowerShell maupun ConEmu yang menawarkan.
Alasan mengapa menurut saya Windows sudo berada di luar ruang lingkup di sini adalah karena kami telah menentukan bahwa melakukannya dengan benar adalah pekerjaan yang cukup besar dan ortogonal untuk PowerShell itu sendiri. PowerShell dapat menggunakannya jika ada, tetapi ini benar-benar merupakan komponen independen dari shell tertentu.
Di sisi lain, PowerShell yang dapat menjalankan cmdlet melalui biner sudo, terlepas dari platform atau cara kerja biner itu, benar-benar merupakan hal yang harus menjadi bagian dari PowerShell, yang ada di sini.
Saya sebagai pengguna CLI tidak peduli jika sudo adalah sudo linux full blown menggunakan file suders atau beberapa windows. Sudo hanyalah sebuah antarmuka untuk fitur elevasi dari OS. Antarmuka seperti itu dapat dibuat untuk bekerja hampir sama tanpa memandang 'backend'.
Ya, memang seharusnya begitu. Hanya saja sudo belum ada di Windows, akan membutuhkan banyak pekerjaan, dan mungkin tidak akan ditulis oleh tim PowerShell. Ketika hal seperti itu ada, semoga PowerShell mengimplementasikan ini dengan cara di mana itu hanya akan berfungsi di Windows juga.
Bagaimanapun, saya akan menunda komentar lebih lanjut sampai kami mendapatkan tanggapan resmi di sini karena masalah ini mengarah ke berbagai arah.
Ada pendapat tentang ini?
http://blog.lukesampson.com/sudo-for-windows
Dipasang dengan scoop install sudo
, itu yang paling dekat yang dapat saya pikirkan. Ia bekerja seperti perintah unix sudo - run dengan elevasi. Saya menggunakannya dengan pip atau Install-Module untuk semua pengguna.
Sudo untuk Windows
@ Restia666Ashdoll Jika namanya diubah menjadi Invoke-ElevatedCommand
Saya baik-baik saja dengan itu.
Itu karena sudo tidak hanya bertanggung jawab untuk meninggikan perintah, tetapi juga untuk meniru pengguna dan hak istimewa "menjatuhkan" ( sudo -u nobody command
). Juga menggunakan kembali nama yang sudah ada terbukti menjadi ide yang buruk, terutama jika fungsionalitas dan parameternya berbeda.
Saya sudah menjelaskan di atas seperti apa sudo sejati dengan peniruan identitas itu dan bagaimana cara kerjanya.
@ Restia666Ashdoll Silakan baca komentar ini di utas ini.
@parkovski Itu hanya pembungkus untuk -Verb RunA, yang hanya bekerja dengan beberapa perintah. Yang saya tautkan dapat digunakan hampir dengan semua hal. Misalnya saya menggunakannya seperti ini - sudo pip install httpie
.
Anda tidak membaca posting saya kan?
Saya rasa tidak ada cara untuk mengedit judul untuk menyertakan sesuatu seperti "BUKAN SUDO DI WINDOWS DISCUSSION"? Saya tahu saya secara pribadi tidak berkewajiban untuk terus menjawab ini, tetapi orang-orang terus muncul dengan mengatakan hal yang sama tanpa melakukan penelitian.
Saya mencoba mengklik tautan berhenti berlangganan orang ini dan sayangnya saya tidak mengizinkan saya melakukannya tanpa masuk sebagai dia.
Saya sudah melaporkan @troymoore ke GitHub
Saya ingin mengusulkan solusi unik dan berbeda yang belum pernah saya lihat dibicarakan di sini. Bagaimana dengan menggunakan sesuatu seperti pipa bernama untuk membuat serial perintah ke proses yang ditinggikan yang kemudian mengembalikan keluaran serialnya ke proses pemanggilan?
Berikut adalah modul yang berfungsi yang mendemonstrasikan bagaimana ini akan bekerja pada NT: https://github.com/mmillar-bolis/Invoke-AsAdmin
Ini tidak sempurna, tentu saja, tetapi menyelesaikan tugas dan jalur sederhana yang meningkat tanpa membuka konsol lain. Saya tidak bermaksud untuk mengajukan ini sebagai sudo-alike per se karena saya tidak percaya mengkloning desain sudo akan menjadi solusi jangka panjang terbaik, tetapi saya pikir pendekatan yang berbeda untuk masalah elevasi samar-samar ini mungkin diskusi konstruktif lebih lanjut.
EDIT: Saya juga harus menyebutkan, ini tidak akan memenuhi permintaan @parkovski untuk elevasi UACless.
Sepertinya JEA.
Sedangkan untuk serialisasi, tidak semua modul mendukung ini.
Sepertinya JEA.
Ya, itulah idenya.
Sedangkan untuk serialisasi, tidak semua modul mendukung ini.
Seperti yang mungkin Anda lihat di kode, hal ini dikurangi dengan aliran teks yang merekonstruksi kode di ujung pipa yang lain. Saya akui bahwa ini lambat, tetapi tetap merupakan solusi baru. Anda menyebutkan JEA sekali lagi merupakan faktor yang berpengaruh di sini; jika beberapa bagian dari kode seseorang tidak perlu dinaikkan, seharusnya tidak.
Modul ini dimaksudkan untuk memecahkan masalah yang sangat spesifik dalam mengangkat perintah interaktif dalam sesi GUI di NT dan tidak lebih. Hal ini dimulai seperti lima tahun yang lalu sebelum ada yang membayangkan ssh asli mungkin cocok untuk NT. Saya setuju dengan @parkovski bahwa ini adalah masalah yang terkait dengan cara NT menangani elevasi, jadi tanpa layanan yang mendengarkan dan menyediakan bentuk command elevasi yang berkontur, agak sulit untuk mencapai kasus kemudahan penggunaan yang mirip dengan sudo, pkexec, atau doas.
Namun, alih-alih dihentikan oleh kekeliruan nirwana bahwa implementasi seperti sudo harus ada di NT sebelum PowerShell dapat mendukung segala bentuk elevasi perintah, mengapa kita tidak terlebih dahulu mendorong segala bentuk elevasi interaktif JEA dalam sesi shell?
Ini setidaknya akan mendorong peningkatan praktik keamanan di dunia NT. Mengapa tidak menerapkan cmdlet untuk berjalan secara interaktif, dan satu untuk memulai sesi konsol terpisah? Atau bahkan lebih baik, cukup promosikan cara-cara saat ini untuk memulai sesi yang lebih baik bersama dengan satu set cmdlet yang lebih sederhana dengan kasus penggunaan yang berbeda? Setidaknya itu satu langkah maju.
Saya juga dapat menambahkan bahwa pustaka elevate Python tidak dapat melakukan apa yang dilakukan modul ini. Apakah Anda sudah menemukan modul lain yang belum berfungsi? Karena poin utama saya adalah mungkin pikiran yang lebih pintar dari saya dapat mengambil modul ini dan ide-idenya dan menjalankannya ke arah yang sesuai untuk NT. Setelah itu, kita mungkin memiliki permulaan platform untuk NT dan * nix bertemu di tengah, memungkinkan kita merevisi implementasi yang lebih umum untuk PowerShell untuk meningkatkan perintah.
Itu setidaknya dua sen saya. Tetapi setelah melihat kodenya, jika seseorang merasa bahwa ide-ide di dalamnya tidak baik, saya akan mengerti. Aku belum pernah melihat siapa pun yang mencoba sesuatu seperti ini.
Akan mundur dari kesedihan saya yang membuat frustrasi menjelaskan poin sudo sebentar karena (a) ya ini adalah masalah yang sangat sulit, (b) benar-benar hanya dapat diselesaikan dengan baik oleh MS (terima kasih karena tidak menjadi open source, Windows), (c) sungguh menyenangkan melihat bahwa orang lain juga menyukai hal ini.
Saya tahu betapa sulitnya melakukan ini dengan benar karena saya mulai menyusuri jalan itu. Jadi jika satu-satunya hal yang menghalangi kita untuk saat ini adalah dialog UAC, biarlah. Setidaknya dengan cara ini kita dapat menguji solusi lintas platform dengan sedikit usaha.
Apa yang secara pribadi ingin saya lihat dari PowerShell adalah dukungan komprehensif untuk sudo Unix, tetapi dirancang untuk mendukung beberapa bentuk skrip "pseudo-sudo" seperti sekarang serta potensi masa depan Windows sudo. Pemikiran saya adalah bahwa jika seseorang membuat prototipe bagaimana sudo Windows pada akhirnya akan bekerja tetapi meninggalkan batasan UAC, itu seharusnya cukup mudah, memberi kami sesuatu yang pada dasarnya sebagus yang didapat untuk saat ini, dan ketika kami mendapatkan hal yang nyata itu seharusnya cukup banyak hanya menjadi pengganti drop-in.
Jelas ini berarti seseorang harus datang dengan model yang memahami atau setidaknya diterjemahkan ke model uid / gid Unix dan model sid / acl Windows. Semoga orang ini menyukai tantangan. Menebak ini juga akan membutuhkan beberapa pembicaraan dengan terminal dan tim keamanan windows dalam MS.
Saya rasa dengan banyaknya orang yang telah menciptakan solusi dengan upaya terbaik mereka sendiri, dan mendukung sesuatu seperti ini dapat membantu merancang cara yang kuat untuk melakukan ini, mengapa tidak?
Sidenote - siapa pun yang menulis skrip solusi ini mungkin menganggap fitur batas waktu yang dimiliki sudo, sama menyebalkannya dengan popup itu.
Kita bisa memikirkan tentang Start-Process pwsh -NoNewWindow -Credential $cred
. Ini tidak berhasil tapi bisa.
Jelas ini berarti seseorang harus datang dengan model yang memahami atau setidaknya diterjemahkan ke model uid / gid Unix dan model sid / acl Windows. Semoga orang ini menyukai tantangan. Menebak ini juga akan membutuhkan beberapa pembicaraan dengan terminal dan tim keamanan windows dalam MS.
Unix juga memiliki acls dan windows memiliki kompatibilitas posix dan setidaknya jika domain joint juga ada atribut grup utama yang bisa kita gunakan (serta atribut posix). Ini hanya perlu diimplementasikan untuk klien windows yang bukan domain join (atau untuk saat ini diasumsikan User
).
Model generik untuk izin unix dan windows pada dasarnya adalah:
ACL dengan Pengguna Pemilik dan Grup Pemilik dengan beberapa ACE yang diharapkan (pengguna, grup, dan lainnya).
Daripada kita bisa memetakan izin unix sebagai:
uid => SID Pemilik
gid => SID grup utama dari pengguna yang membuat objek.
pengguna => ID Pemilik Pembuat S-1-3-0
grup => ID Grup Pembuat S-1-3-1
lainnya => Dunia / Semua Orang S-1-1-0
Memetakan uids dari daftar acl di unix sedikit lebih rumit karena kami perlu mempertimbangkan bahwa sistem mungkin merupakan bagian dari ldap, direktori aktif, atau direktori lainnya. Dua kasus yang akan saya pertimbangkan dalam lingkup PowerShell adalah tidak ada direktori dan direktori ldap / aktif.
Dalam kasus pertama saya sarankan menggunakan S-1-6-1-uid dan S-1-6-2-gid (dengan asumsi S-1-6 masih tersedia dan tim yang bertanggung jawab bersedia mengalokasikannya untuk tujuan ini ).
Dan untuk kasus kedua kita hanya perlu memiliki semacam penyelesaian uid melalui backend otentikasi. Server direktori ldap / aktif bertanggung jawab untuk menyediakan sid.
Dan terakhir ada beberapa kasus khusus untuk dipetakan:
uid 0 => S-1-5-32-544
gid 0 => S-1-6-500 (dan S-1-5-21 - * - 500)
sebagian besar sids terkenal lainnya dapat dikelola melalui file konfigurasi atau melalui semacam api (atau lepaskan saja karena kemungkinan besar tidak akan digunakan)
Jika kita melakukan ini di shell, buat perintah seperti Get-Acl / Set-Acl daripada mulai bekerja pada sistem unix tanpa mengetahui tentang bagaimana izin disimpan pada disk.
@ mmillar-bolis Saya sudah menyarankan pendekatan menggunakan soket di sini: https://github.com/PowerShell/PowerShell/issues/3232#issuecomment -444849067
Kita bisa memikirkan tentang Mulai-Proses pwsh -NoNewWindow -Credential $ cred. Ini tidak berhasil tapi bisa.
Pembaruan: .Net Core (dan saya kira Windows API juga) tidak memungkinkan untuk menjalankan proses baru yang terpasang ke konsol yang sama.
Jadi satu-satunya cara yang dapat kita gunakan adalah Layanan Windows yang ditinggikan. Tetapi kita harus membuat proses layanan seperti itu per "sudo" agar aman.
Jadi solusinya adalah New-PSSession (atau dipanggil di PSSession) ke localhost dengan kredensial pengguna yang ditingkatkan.
@iSazonov Satu-satunya hal yang memungkinkan Anda untuk memasangnya ke konsol yang sama adalah apa yang telah saya sebutkan di sini: https://github.com/PowerShell/PowerShell/issues/3232#issuecomment -444849067
Sekarang setelah windows mendukung soket unix, kita dapat menggunakan salah satunya atau bernama pipa dan layanan istimewa akan bertanggung jawab untuk memvalidasi kredensial dan perlu dijalankan sepanjang waktu (dibandingkan dengan dipanggil melalui suid seperti yang disebutkan dalam posting terkait untuk * nix oses) .
Mungkin lsas akan / perlu diperpanjang untuk menyediakan kemampuan api otentikasi seperti itu?
Dengan begitu, kami bisa mendapatkan peniruan identitas penuh sambil tetap dapat memasang dengan aman ke konsol yang sama dan menerima masukan.
@ agowa338 Proposal Anda "de-facto" adalah PowerShell dari jarak jauh. Ini sudah diterapkan.
Tapi
Jadi solusinya adalah New-PSSession (atau dipanggil di PSSession) ke localhost dengan kredensial pengguna yang ditingkatkan.
tidak berfungsi untuk localhost. Itu hanya melempar AccessDenied.
Kecuali salah satu kasusnya:
Berikut adalah penjelasan yang bagus mengapa oleh @ jborean93 : https://github.com/PowerShell/Win32-OpenSSH/issues/1308#issuecomment -448430464
Oleh karena itu kami memerlukan layanan istimewa yang bertindak sebagai perantara atau salah satu API perlu diubah, tetapi itu bukan sesuatu yang dapat kami lakukan di dalam PowerShell / PowerShell dan perlu didelegasikan oleh orang-orang Microsoft secara internal.
@ agowa338 Komentar yang Anda rujuk adalah tentang API Windows lokal, bukan PowerShell remoting yang merupakan pertanyaan di sana.
@iSazonov : Apakah Anda pernah mencoba melakukan PowerShell remote ke localhost? Saya melakukannya dan tidak berhasil karena alasan yang diuraikan di atas. Penetapan accesstoken diblokir oleh os.
PowerShell remoting ke localhost tidak memungkinkan untuk mendapatkan hak istimewa yang lebih tinggi di komputer lokal.
Namun PowerShell remoting memberi Anda hak istimewa yang lebih tinggi pada semua host lain di jaringan kecuali localhost (dengan asumsi Anda adalah anggota Domain-Admins, dll).
Itulah alasan mengapa kami membutuhkan sudo yang setara di windows. Jika PowerShell remoting berperilaku seperti itu menurut Anda tiket ini dapat ditutup dengan menulis contoh ke dalam dokumen karena fungsinya sudah ada.
@ agowa338 Ini tidak bekerja untuk Anda karena perlindungan keamanan. Ini bukan fitur OS. Anda dapat mengkonfigurasi WinRM seperti yang dijelaskan di docs https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_remote_troubleshooting . Masalah yang Anda rujuk juga mengatakan bahwa ini berfungsi untuk SSH (langkah-langkahnya dirujuk di artikel itu).
karena fungsinya sudah ada.
Permintaan adalah untuk mulai bekerja "sudo Remove-Item foo.txt dimana foo.txt dimiliki oleh root".
Ini tidak berhasil tetapi kami ingin.
Masalahnya terdiri dari dua bagian: gula sintaks dalam bahasa dan implementasi.
Jika Anda berpikir lebih banyak tentang proposal Anda, Anda menemukan bahwa Anda perlu memiliki konteks per pengguna / per sesi / per runspace / per lingkup PowerShell. Kemudian Anda harus memenuhi persyaratan kepatuhan keamanan dan Anda akan mendapatkan "akses ditolak" dalam konfigurasi default. Setelah itu, proposal Anda akan sama seperti yang sudah diimplementasikan PowerShell remoting.
Ini tidak bekerja untuk Anda karena perlindungan keamanan. Ini bukan fitur OS. Anda dapat mengkonfigurasi WinRM seperti yang dijelaskan di dokumen
@iSazonov Bisakah Anda menjelaskannya lebih lanjut? Saya dapat melakukan remote ke mesin itu dan dari mesin manapun ke mesin lain di jaringan, tetapi dari tidak satupun ke localhost. Dan ya saya membaca halaman itu.
Permintaan adalah untuk mulai bekerja "sudo Remove-Item foo.txt dimana foo.txt dimiliki oleh root".
Untuk sistem non-windows kita dapat menggunakan pendekatan soket unix untuk mengimplementasikan peniruan / elevasi untuk PowerShell remoting di sana.
Bisakah Anda menjelaskannya lebih lanjut? Saya dapat melakukan remote ke mesin itu dan dari mesin manapun ke mesin lain di jaringan, tetapi dari tidak satupun ke localhost. Dan ya saya membaca halaman itu.
Sebagian besar serangan menargetkan ketinggian lokal. Jadi semua konfigurasi "diamankan secara default". WMI, WinRM, IIS loopback dan lain-lain - semua subsistem menonaktifkan fitur yang memungkinkan elevasi lokal.
Tidak begitu penting untuk diskusi. Bahkan jika PowerShell remoting tidak memungkinkan kami melakukan sudo secara default, kami dapat menerapkannya dimatikan secara default atau hanya mengizinkan untuk sesi interaktif.
Anda mulai berbicara tentang windows, untuk sistem non windows kita bisa menggunakan pendekatan soket unix untuk mengimplementasikan peniruan / elevasi untuk PowerShell remot di sana.
Kami harus memiliki UX yang sama untuk semua platform. Benar-benar ada PSRP bekerja melalui transportasi - WinRM atau SSH. MSFT mengatakan bahwa mereka menyukai SSH tetapi saya tidak melihat kemajuan yang berarti selama dua tahun terakhir. Dan sulit dipercaya bahwa mereka akan menginginkan protokol ketiga di masa depan _dekat_ - terlalu banyak pekerjaan (kebutuhan untuk menjaga kompatibilitas dengan sistem lama).
Sebagian besar serangan menargetkan ketinggian lokal. Jadi semua konfigurasi "diamankan secara default". WMI, WinRM, IIS loopback dan lain-lain - semua subsistem menonaktifkan fitur yang memungkinkan elevasi lokal.
Tidak begitu penting untuk diskusi. Bahkan jika PowerShell remoting tidak memungkinkan kami melakukan sudo secara default, kami dapat menerapkannya dimatikan secara default atau hanya mengizinkan untuk sesi interaktif.
Saya mencoba untuk mengaktifkannya beberapa waktu yang lalu, dan saya diberitahu berulang kali oleh banyak orang lain bahwa ini dibatasi oleh os secara internal dan tidak mungkin dengan cara apapun tanpa aplikasi yang menghubungkan jauh ke internal windows. Faktanya banyak yang menunjuk pada batasan api windows yang direferensikan di atas dan menggunakannya sebagai argumen mengapa PowerShell tidak pernah bisa menyediakan kemampuan seperti itu. Dan seseorang bahkan mereferensikan CVE di mana elevasi loopback sengaja dihapus. Oleh karena itu, maaf jika Anda melihat lubang kelinci itu lebih dalam, tetapi apa yang harus saya konfigurasikan agar berfungsi? Apakah itu didokumentasikan di mana saja?
Kami harus memiliki UX yang sama untuk semua platform. Benar-benar ada PSRP bekerja melalui transportasi - WinRM atau SSH. MSFT mengatakan bahwa mereka menyukai SSH tetapi saya tidak melihat kemajuan yang berarti selama dua tahun terakhir. Dan sulit dipercaya bahwa mereka akan menginginkan protokol ketiga dalam waktu dekat - terlalu banyak pekerjaan (kebutuhan untuk menjaga kompatibilitas dengan sistem lama).
Sebaiknya kita mendorong salah satu dari kedua solusi karena keduanya bekerja pada platform apa pun.
Oleh karena itu, karena PowerShell Remoting sudah ada (dan juga sudah bekerja di atas ssh) kita harus memprioritaskan solusi itu menurut saya.
Dan seseorang bahkan mereferensikan CVE di mana elevasi loopback sengaja dihapus.
Saya tidak bisa memastikan. Saya kira CVE hanya bisa menonaktifkan loopback secara default tetapi tidak sama sekali.
Lihat juga https://github.com/PowerShell/PowerShell/issues/3874#issuecomment -510715727
@iSazonov : Itu tidak berhasil, ini hanya menyediakan token akses hak istimewa rendah tetapi bukan token akses yang ditinggikan (misalnya Mandatory Label\High Mandatory Level
). Saya tidak mendapatkan izin Administratif dari PowerShell hak istimewa rendah meskipun TrustedHosts disetel ke *
untuk saya. Token logon selalu berjenis interaktif, bahkan setelah Enter-PSSession.
Saya sebenarnya dapat , tidak selalu muncul "Access Denied" bahwa sistem lain telah menonaktifkan UAC.Enter-PSSession localhost -ScriptBlock {}
tetapi kredensial yang lewat menyebabkan "Access Denied".
Tapi sekarang saya mencobanya juga menggunakan SSH dan itu berfungsi seperti yang diharapkan itu menyediakan token yang ditinggikan ( Mandatory Label\High Mandatory Level
) dengan jenis logon Jaringan.
Oleh karena itu di PSCore kita dapat mengandalkan psrp untuk elevasi (bahkan secara lokal melalui Enter-PSSession -HostName localhost
yang juga berfungsi dengan kredensial eksplisit yang diteruskan.
Dimana Enter-PSSession -ComputerName localhost -Credential $foo
tidak (meskipun $ foo.Nama pengguna sama dengan pengguna saat ini)
@ agowa338 Saya rasa kita tidak boleh membahas melewati fitur keamanan WinRM di sini (ini adalah area kepatuhan yang sensitif). Saya hanya dapat menunjukkan (1) bahwa terlepas dari protokolnya, keamanan harus tetap pada tingkat yang sama, yang menyiratkan bahwa loopback SSH harus berperilaku sama seperti untuk WinRM dengan mempertimbangkan cara kerja internal Windows, (2) implementasi sudo PS harus berfungsi transportasi apapun.
@iSazonov : Saya tidak meminta exploit, tetapi hanya untuk apa yang perlu dikonfigurasi untuk mengaktifkannya. Anda juga menjadi satu-satunya yang menemukan cara mengkonfigurasi WinRM untuk memungkinkan elevasi loopback.
Saya sudah mencoba mengaktifkannya untuk waktu yang sangat lama. Semua pertanyaan (tentang stackoverflow, reddit, masalah github, ...) yang saya temukan diakhiri dengan "windows is wird", "tidak tahu apa yang dilakukan windows di sana", "Tidak didokumentasikan di mana pun", "Windows tidak menyediakan kemampuan itu "," Gunakan Linux sebagai gantinya "," Nonaktifkan UAC "," Anda perlu menulis layanan broker yang berjalan dengan hak istimewa sistem ". Jadi tolong jika Anda sudah menemukannya, bagikan pengetahuan Anda.
Saya hanya dapat menunjukkan (1) bahwa terlepas dari protokolnya, keamanan harus tetap pada level yang sama
Apa maksudmu dengan itu?
yang menyiratkan bahwa loopback SSH harus berperilaku sama seperti untuk WinRM dengan mempertimbangkan cara kerja internal Windows
SSH memiliki layanan sistem yang bertindak sebagai pialang di latar belakang untuk melakukan hal itu. Ini menyediakan token akses Jaringan ...
(2) Implementasi PS sudo harus bekerja pada semua transportasi.
Yah itu tidak lebih dari WinRM karena alasan itu. Jadi jika benar apa yang Anda katakan, kami memerlukan dokumentasi tentang cara mengaktifkan loopback WinRM.
jika Anda berhasil menemukannya, bagikan pengetahuan Anda.
Tim MSFT @ agowa338 meminta saya untuk tidak membahas keamanan secara publik dan saya mengikuti CoC. Saya mendukung keinginan Anda untuk menjelajahi topik ini secara mendalam, tetapi sebagai bagian dari diskusi ini, ini memusingkan bagi MSFT untuk mengintegrasikan solusi ini ke dalam Windows dan menjaga kepatuhan keamanan.
Nah itu tidak membantu siapa pun.
Untuk memanggilnya:
Maaf, tapi itu terdengar seperti pintu belakang dan bukan fitur. Ini tidak dapat digunakan untuk siapa pun kecuali Anda daripada.
Juga keamanan melalui ketidakjelasan juga tidak berfungsi di masa lalu ...
Jadi kami kembali pada saat ini belum diterapkan dan kami membutuhkan layanan broker daripada ...
@ agowa338 Kami telah mengumpulkan cukup informasi untuk disimpulkan oleh tim MSFT. Jika mereka menemukan masalah keamanan, mereka akan menunjukkan kepada kami cara alternatif yang dapat diterima.
Itu mungkin tetapi telah ditambal awal tahun ini https://devblogs.microsoft.com/powershell/windows-security-change-affecting-powershell/ dengan patch KB4480116 dan pembaruan kumulatif berikutnya .. Sebelum pembaruan ini, dimungkinkan untuk meningkatkan hak istimewa Anda jika Anda memiliki LocalAccountTokenFilterPolicy yang disetel ke 1 yang mana winrm quickconfig
tidak (dan diperlukan untuk WinRM sebenarnya).
Ada catatan di sana yang mengatakan bahwa titik akhir JEA tidak terpengaruh sehingga Anda berpotensi dapat membuat PSSessionConfiguration Anda sendiri dan terhubung ke sana, tetapi saya belum menguji ini untuk memverifikasi. Secara pribadi saya pikir tambalan ini konyol karena tambalan ini hanya menghentikan klien PowerShell agar tidak terhubung ke localhost tetapi Anda dapat dengan mudah mem-bypassnya jika Anda tahu apa yang Anda lakukan. Misalnya saya masih bisa beralih dari terbatas ke ditinggikan tanpa menyentuh UAC dengan menggunakan SSH atau klien PSRemoting lain seperti itu
PS C:\Users\vagrant> whoami.exe /groups # prove the current process is limited
GROUP INFORMATION
-----------------
Group Name Type SID Attributes
============================================================= ================ ============ ============================
======================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\Local account and member of Administrators group Well-known group S-1-5-114 Group used for deny only
BUILTIN\Administrators Alias S-1-5-32-544 Group used for deny only
BUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by
default, Enabled group
BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by
default, Enabled group
BUILTIN\Performance Log Users Alias S-1-5-32-559 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\REMOTE INTERACTIVE LOGON Well-known group S-1-5-14 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\INTERACTIVE Well-known group S-1-5-4 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\Local account Well-known group S-1-5-113 Mandatory group, Enabled by
default, Enabled group
LOCAL Well-known group S-1-2-0 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by
default, Enabled group
Mandatory Label\Medium Mandatory Level Label S-1-16-8192
PS C:\Users\vagrant> ssh vagrant<strong i="11">@localhost</strong> whoami.exe /groups # prove that SSH is elevated
vagrant<strong i="12">@localhost</strong>'s password:
GROUP INFORMATION
-----------------
Group Name Type SID Attributes
============================================================= ================ ============ ============================
===================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\Local account and member of Administrators group Well-known group S-1-5-114 Mandatory group, Enabled by
default, Enabled group
BUILTIN\Administrators Alias S-1-5-32-544 Mandatory group, Enabled by
default, Enabled group, Group owner
BUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by
default, Enabled group
BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\NETWORK Well-known group S-1-5-2 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\Local account Well-known group S-1-5-113 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by
default, Enabled group
Mandatory Label\High Mandatory Level Label S-1-16-12288
PS C:\Users\vagrant> python -c "from pypsrp.client import Client; c = Client('localhost', username='vagrant', password='
<password>', ssl=False); print(c.execute_ps('whoami.exe /groups')[0])"
GROUP INFORMATION
-----------------
Group Name Type SID Attributes
============================================================= ================ ============ ============================
===================================
Everyone Well-known group S-1-1-0 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\Local account and member of Administrators group Well-known group S-1-5-114 Mandatory group, Enabled by
default, Enabled group
BUILTIN\Administrators Alias S-1-5-32-544 Mandatory group, Enabled by
default, Enabled group, Group owner
BUILTIN\Remote Management Users Alias S-1-5-32-580 Mandatory group, Enabled by
default, Enabled group
BUILTIN\Users Alias S-1-5-32-545 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\NETWORK Well-known group S-1-5-2 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\Authenticated Users Well-known group S-1-5-11 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\This Organization Well-known group S-1-5-15 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\Local account Well-known group S-1-5-113 Mandatory group, Enabled by
default, Enabled group
NT AUTHORITY\NTLM Authentication Well-known group S-1-5-64-10 Mandatory group, Enabled by
default, Enabled group
Mandatory Label\High Mandatory Level Label S-1-16-12288
Kita dapat melihat bahwa menggunakan SSH kita memiliki token yang ditinggikan, kita juga dapat melihat bahwa menggunakan pustaka pihak ke-3 kita masih dapat menggunakan localhost PSRemoting yang membuat token yang ditinggikan dan bahwa tambalan bukanlah blok total dari fungsionalitas ini.
Saya tidak melihat ini sebagai masalah keamanan atau melewati batas keamanan karena MS telah berulang kali mengatakan bahwa UAC bukanlah batas keamanan
Ini mungkin dekat atau bertindak mirip dengan yang satu tetapi tidak selalu mudah. Salah satu cara untuk melewati UAC adalah properti registri LocalAccountTokenFilterPolicy
yang diketahui dan didokumentasikan. Tujuan eksplisit dari properti ini untuk memastikan bahwa logon jaringan selalu dinaikkan dan bukan token yang difilter dan secara eksplisit disebutkan bahwa tidak mengaktifkannya akan mencegah serangan "loopback"
Untuk lebih melindungi pengguna yang merupakan anggota grup Administrator lokal, kami menerapkan pembatasan UAC di jaringan. Mekanisme ini membantu mencegah serangan "loopback". Mekanisme ini juga membantu mencegah perangkat lunak berbahaya lokal berjalan dari jarak jauh dengan hak administratif.
Pada akhirnya, maksudnya adalah tidak ada cara yang benar-benar resmi di Windows untuk meningkatkan hak istimewa Anda dari terbatas menjadi admin dengan cara non-interaktif. Sangat mudah untuk menggunakan Start-Process ... -Verb Runas
tetapi itu membutuhkan logon interaktif untuk menampilkan prompt UAC. Memiliki mekanisme seperti sudo akan membantu meringankan masalah ini tetapi untuk melakukannya dengan benar akan membutuhkan pekerjaan di Windows itu sendiri dan bukan khusus PowerShell. Ada "solusi" tetapi saya tidak akan menyebutnya resmi dan hanya produk sampingan yang diketahui dari mengaktifkan WinRM.
PowerShellPerubahan Keamanan Windows memengaruhi PowerShell 9 Januari 2019 Patch keamanan Windows CVE-2019-0543 (1/8/2019) terbaru, telah memperkenalkan perubahan yang merusak untuk skenario jarak jauh PowerShell. Ini adalah skenario dengan cakupan sempit yang seharusnya berdampak rendah bagi sebagian besar pengguna. Perubahan yang melanggar hanya mempengaruhi remote loopback lokal,
Mark's BlogSaya memperkenalkan -l switch ke PsExec sekitar satu setengah tahun yang lalu sebagai cara mudah untuk menjalankan proses dengan hak pengguna standar dari akun administratif di Windows XP. Dalam Menjalankan sebagai Pengguna Terbatas - Cara Mudah, saya menjelaskan bagaimana PsExec menggunakan API CreateRestrictedToken untuk membuat konteks keamanan yang ...
Rekayasa Windows 7Hai, Jon DeVaan di sini untuk berbicara dengan Anda tentang umpan balik UAC baru-baru ini yang kami terima. Sebagian besar pekerjaan kami yang menyelesaikan Windows 7 difokuskan pada menanggapi umpan balik. Umpan balik UAC menarik pada beberapa dimensi proses pengambilan keputusan teknik. Saya pikir menjelajahi dimensi itu akan membuat e7 menarik ...
@iSazonov Tak satu pun dari saran ini yang akan mencapai elevasi perintah _user-interactive_ dari _dalam sesi konsol yang sama_, terutama di lingkungan yang _lacks UAC_. Tampaknya Anda dapat berbicara atas nama Microsoft dalam masalah ini, jadi maukah Anda menjelaskan apakah mereka tidak tertarik untuk memperkenalkan fitur seperti yang telah saya jelaskan?
Jika itu terjadi, seperti yang telah saya ditafsirkan dari posting di atas, tampaknya bijaksana untuk menutup thread ini, sebagai sisa dari kita pengguna harus mencari tempat lain untuk solusi seperti @parkovski 's TokenServer ide.
Tampaknya Anda dapat berbicara atas nama Microsoft dalam masalah ini
Saya adalah pengelola komunitas proyek, bukan anggota MSFT dan saya tidak dapat berbicara atas nama Microsoft.
apakah Anda akan menjelaskan apakah mereka tidak tertarik untuk memperkenalkan fitur seperti yang saya jelaskan?
_Semua proposal memiliki nilai; tidak satupun dari mereka ditolak. Diskusi hanya untuk mengumpulkan semua proposal yang memungkinkan._
Saat ini saya mencoba merangkum semua proposal agar kita bisa maju dan tidak stagnan.
Itu yang saya lihat.
Skenario utama adalah adopsi pengguna Unix di Windows.
Jadi harapannya adalah:
Detail implementasi:
@ mklement0 Saya ingin tahu yang saya lakukan di sini yang biasanya Anda lakukan dengan baik :-) Anda merampok saya sebagai lawan :-)
Mengapa tidak menulis biner windows yang membutuhkan hak istimewa yang memulai instance PowerShell dengan perintah apa pun yang diteruskan padanya. Ini harus menjadi aplikasi mode konsol agar berfungsi dengan baik. Kemudian untuk linux, kami menulis skrip yang memerlukan izin yang memulai instance PowerShell dengan perintah yang disediakan. Jika ini berfungsi dalam praktik seperti dalam teori, PowerShell akan diluncurkan dengan izin yang ditinggikan, menjalankan perintah, dan keluar.
Mengapa tidak menulis biner windows yang membutuhkan hak istimewa yang memulai instance PowerShell dengan perintah apa pun yang diteruskan padanya. Ini harus menjadi aplikasi mode konsol agar berfungsi dengan baik.
Penyebab windows API mencegahnya dan aplikasi konsol akan terbuka di jendela baru. Kami sudah berbicara tentang kemungkinan solusi.
Satu hal yang perlu diingat adalah bahwa tidak peduli bagaimana ini diimplementasikan, selalu ada proses melompat ke dan dari proses yang lebih tinggi. Ini berarti Anda akan selalu memiliki objek deserialisasi di pipeline dan batasan tersebut akan berlaku. Dalam banyak kasus, ini tidak akan menjadi masalah, tetapi jika cmdlet mengharapkan objek .NET langsung, maka itu tidak akan berfungsi.
Untuk mendukung JEA dengan SSH, pada akhirnya kita memerlukan daemon / layanan umum yang menggantikan kebutuhan WinRM sebagai layanan itu. Pada saat itu, kami akan mengevaluasi penggunaan itu untuk meninggikan sebagian pipa.
FYI: https://github.com/gerardog/gsudo
GitHubSudo untuk Windows - berjalan tinggi tanpa menjangkau Jendela Host Konsol baru - gerardog / gsudo
FYI: https://github.com/gerardog/gsudo
GitHub gerardog / gsudo A Sudo untuk Windows - berjalan tinggi tanpa menjangkau Jendela Host Konsol baru - gerardog / gsudo
Bahkan lebih baik
http://blog.lukesampson.com/sudo-for-windows
GitHubSudo untuk Windows - berjalan tinggi tanpa menjangkau Jendela Host Konsol baru - gerardog / gsudo
Sudo untuk Windows
Bahkan lebih baik
Tidak.
Gsudo tidak meminta kata sandi setiap kali dan diketahui lebih cepat untuk diinstal dan digunakan.
Menurut saya masalah ini harus diterima (yang berarti lebih banyak waktu dan organisasi harus diberikan untuk itu) dilihat dari minat tidak hanya dari tiket ini. Tidaklah benar untuk tidak secara resmi mengakuinya sebagai tugas kerja karena kesulitan teknis yang saat ini dirasakan tidak akan diselesaikan tanpa keterlibatan aktif.
Saya menggunakan gsudo selama beberapa bulan sekarang dan saya tidak dapat membayangkan kembali ke Windows UAC tradisional sepanjang waktu.
@majkinetor masalah ini dipisahkan di https://github.com/PowerShell/PowerShell/issues/11343 untuk diskusi lebih lanjut tentang desain
Komentar yang paling membantu
Bahkan pada Windows, akan lebih baik jika memiliki kemampuan yang sama untuk menjalankan cmdlet sebagai pengguna lain atau yang ditinggikan dan sesuatu yang dapat diandalkan dalam skrip portabel. Mungkin perlu RFC untuk ini.