Closed SteveL-MSFT closed 6 years ago
From @DHowett on September 17, 2016 5:1
On Windows / PowerShell Desktop it looks like there is a proper permissions warning:
Install-Module : Administrator rights are required to install modules in 'C:\Program
Files\WindowsPowerShell\Modules'. Log on to the computer with an account that has Administrator rights,
and then try again, or install 'C:\Users\Dustin\Documents\WindowsPowerShell\Modules' by adding "-Scope
CurrentUser" to your command. You can also try running the Windows PowerShell session with elevated
rights (Run as Administrator).
Out of curiosity, does Install-Module -Scope CurrentUser <module>
work? That is the idiomatic way to install a module without root privileges.
From @ffeldhaus on September 17, 2016 10:2
Yes, Install-Module -Scope CurrentUser <module>
works. Interestingly, Uninstall-Module
run as a non root user when the module was installed by a root user gives the following warning followed by an exception which points to missing permissions:
WARNING: The version '1.7.6' of module 'Posh-SSH' is currently in use. Retry the operation after closing the
applications.
PackageManagement\Uninstall-Package : Module 'Posh-SSH' is in currently in use or you don't have the required
permissions.
I would suggest to implement a similar warning for Install-Module
as shown in Windows PowerShell to close this isssue.
From @bmanikm on September 19, 2016 17:55
@ffeldhaus Is it possible to provide more details on how to determine a user who is not root nor member of the wheel group?
From @DHowett on September 19, 2016 18:5
In this case, it should only be restricted to those with write access to the modules directory. Any user/group membership check would fail to paint the full picture.
A system administrator could set the module directory to be owned by root:netusers
and give it g=rwx
permissions. That way, all netusers
group members would be able to install modules, regardless of whether they were actually the system administrator.
The access
syscall would help here (example in C):
if (0 == access(MODULE_DIRECTORY, W_OK)) {
// module installation is allowed
}
Is this issue closed as resolved or closed as “won’t fix”?
@DHowett Apologies, this was closed by mistake.
On PWSH, AllUsers scope install location has been changed to SHARED_MODULES location (i.e., $PSHOME\..\Modules
for modules and $PSHOME\..\Scripts
for scripts) (#175).
The default scope for Install-Module is CurrentUser in PowerShellGet 2.0.0 and above. I think that addresses the bulk of this, so resolving.
From @ffeldhaus on September 16, 2016 18:19
Steps to reproduce
Install PowerShell 6 Alpha 10 and run powershell as a user who is not root nor member of the wheel group. Then run
Install-Module -Name Posh-SSH
which will fail with exceptionCould not find a part of the path
.Expected behavior
Either users who are not root nor member of the wheel group should be able to install Modules via
Install-Module
or if, for security reasons, installing modules should only be allowed to the root user or members of the wheel group, thenInstall-Module
should fail with a hint that root privileges are required.Actual behavior
Environment data
Copied from original issue: PowerShell/PowerShell#2286