Safely change home directory

前端 未结 12 2320
南旧
南旧 2020-12-12 10:22

I\'m trying to safely update the home directory as specified in /etc/passwd, but the standard Linux utils - usermod and vipw - for doing so aren\'t provided by

相关标签:
12条回答
  • 2020-12-12 10:59

    I always set HOME as a user-specific environment variable in Computer Properties.

    0 讨论(0)
  • 2020-12-12 10:59

    Using Windows Environment Variable: HOME

    This works for me for a permanent, non-portable, non-network solution; i.e. setting the HOME Environment variable permanently in Windows.

    Note that this doesn't affect ssh or telnet sessions which always refer to /etc/passwd

    ref: Setting up Cygwin- My HOME environment variable is not what I want.

    CMD

    For current user (needs to run once per user)::

    reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
    

    For new Users:

    reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
    

    Note: Carets ^ before percent-signs %

    IMPORT REG FILE

    Import this reg file (current user):

    Windows Registry Editor Version 5.00
    
    [HKEY_CURRENT_USER\Environment]
    "HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
      00,45,00,25,00,00,00
    

    For new users:

    Windows Registry Editor Version 5.00
    
    [HKU\.DEFAULT\Environment]
    "HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
      00,45,00,25,00,00,00
    

    REGEDIT

    In Regedit, under:

    For current user:

    HKEY_CURRENT_USER\Environment
    

    For new Users:

    HKU\.DEFAULT\Environment
    

    Create HOME as a new Expandable String Value (*REG_EXPAND_SZ*) and put in %USERPROFILE%

    0 讨论(0)
  • 2020-12-12 11:01

    EDIT: For recent versions of Cygwin (1.7.34 and beyond), see this newer question.

    Like sblundy's answer, you can always edit by-hand.

    But if you want to do it the "official" way, use the cygwin-specific mkpasswd command. Below is a snippet from the official docs on mkpasswd :

    For example, this command:

    Example 3.11. Using an alternate home root

    $ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
    

    would put local users' home directories in the Windows 'Profiles' directory.

    There's a bunch of other really useful commands described on the Cygwin Utilities documentation page (which includes mkpasswd). The use of cygpath in the example above is another of these cygwin-specific tools.

    While you're at it, you probably also want to read the Using Cygwin Effectively with Windows documentation. There's a bunch of really good advice.

    0 讨论(0)
  • 2020-12-12 11:04

    Original answer by Christopher from elsewhere

    Cygwin 1.7.34+

    For those using Cygwin 1.7.34 or higher Cygwin supports configuring how to fetch home directory, login shell, and gecos information in /etc/nsswitch.conf. This is detailed in the Cygwin User Guide section:

    • Cygwin user names, home dirs, login shells

    If you've previously created an /etc/passwd or /etc/group file you'll want to remove those and configure Cygwin using the new Windows Security model to POSIX mappings.

    [[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
    [[ -f /etc/group ]] && mv /etc/group /etc/group.bak
    

    The /etc/nsswitch.conf file's db_home: setting defines how Cygwin fetches the user's home directory. The default setting for db_home: is

    db_home: /home/%U
    

    So by default, Cygwin just sets the home dir to /home/$USERNAME. You can change that though to point at any other custom path you want. The supported wildcard characters are:

    • %u The Cygwin username (that's lowercase u).
    • %U The Windows username (that's uppercase U).
    • %D Windows domain in NetBIOS style.
    • %H Windows home directory in POSIX style. Note that, for the db_home: setting, this only makes sense right after the preceeding slash, as in db_home: /%H/cygwin
    • %_ Since space and TAB characters are used to separate the schemata, a space in the filename has to be given as %_ (that's an underscore).
    • %% A per-cent character.

    In place of a path, you can specify one of four named path schemata that are predefined.

    1. windows The user's home directory is set to the same directory which is used as Windows home directory, typically something along the lines of %USERPROFILE% or C:\Users\$USERNAME. Of course, the Windows directory is converted to POSIX-style by Cygwin.

    2. cygwin AD only: The user's home directory is set to the POSIX path given in the cygwinHome attribute from the cygwinUser auxiliary class. See also the section called “The cygwin schema”.

    3. unix AD only: The user's home directory is set to the POSIX path given in the unixHomeDirectory attribute from the posixAccount auxiliary class. See also the section called “The unix schema”.

    4. desc The user's home directory is set to the POSIX path given in the home="..." XML-alike setting in the user's description attribute in SAM or AD. See the section called “The desc schema” for a detailed description.

    The following will make the user's home directory in Cygwin the same as is used for the Windows home directory.

    db_home: windows
    

    Cygwin 1.7.33 or earlier

    For those using Cygwin 1.7.33 or earlier, update to the latest version Cygwin and remove previously used /etc/passwd and /etc/group files, then see the steps above.

    Else, follow these older steps below.

    Firstly, set a Windows environment variable for HOME that points to your user profile:

    1. Open System on the Control Panel
    2. On the Advanced tab click Environment Variables (toward the bottom)
    3. In the User Variables area click "New…"
    4. For Variable name enter HOME
    5. For Variable value enter %USERPROFILE%
    6. Click OK in all the open dialog boxes to apply this new setting

    Now we are going to update the Cygwin /etc/passwd file with the Windows %HOME% variable we just created. Shell logins and remote logins via ssh will rely on /etc/passwd to tell them the location of the user's $HOME path.

    At the Cygwin bash command prompt type the following:

    cp /etc/passwd /etc/passwd.bak
    mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
    mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 
    

    The -d switch tells mkpasswd to include DOMAIN users, while -l is to only output LOCAL machine users. This is important if you're using a PC at work where the user information is obtained from a Windows Domain Controller.

    Now, you can also do the same for groups, though this is not necessary unless you will be using a computer that is part of a Windows Domain. Cygwin reads group information from the Windows account databases, but you can add an /etc/group file if your machine is often disconnected from its Domain Controller.

    At the Cygwin bash prompt type the following:

    cp /etc/group /etc/group.bak
    mkgroup -l > /etc/group 
    mkgroup -d >> /etc/group 
    

    Now, exit Cygwin and start it up again. You should find that your HOME path points to the same location as your Windows User Profile -- i.e. /cygdrive/c/Users/username

    0 讨论(0)
  • 2020-12-12 11:04
    cd /home
    rm -rf chris
    ln -s /cygdrive/z chris
    

    I am not really sure if it is the safest solution but it is a possible solution that works for me ;)

    0 讨论(0)
  • 2020-12-12 11:10

    To avoid problems caused by having spaces in the path to your home directory, use the short-form of the Windows 'Profiles' directory - i.e. /cygdrive/c/DOCUME~1/user.

    You can do this by typing the command:

    mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
    
    0 讨论(0)
提交回复
热议问题