Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I need to backup some data with the "p" option on tar command. The problem is the place I'm going to restore this data will have all the same users, but those users may have different IDs. Does that make any difference to tar or will it restore permissions correctly by user name?

share|improve this question
add comment

4 Answers

up vote 7 down vote accepted

tar records permissions based on the UID and GID, not on the string associated with them. So if the UID on one server was 3300 and that was linked to 'bob', on the new server the file will be owned by the user who has the UID 3300.

Virtual everything (I want to say everything, but you can never be 100% sure) on UNIX uses the UID:GID values, because that's what is actually stored at the filesystem level. The name is just a simple lookup in the passwd file, the underlying checks are done using the numeric values.

share|improve this answer
    
Ah, that is not good ... I guess in most situations it's suitable. Unfortunately, not for me ... Thank you, EightBitTony. –  Marius Oct 19 '12 at 7:21
2  
You most likely mean GID (group identifier), not GUID (Globally Unique Identifier). –  Michael Kjörling Oct 19 '12 at 12:35
    
I did, thanks.. –  EightBitTony Oct 19 '12 at 14:04
1  
GNU tar does save the user/group name data, too, because I can see it if I list an archive on a machine that doesn't have those users. There must be a way to get it to use that during extraction. –  Rob H Sep 24 '13 at 13:32
add comment

Summing up previous answers and adding some important information:

  • When creating archives, tar will always preserve files' user and group ID, unless told otherwise with --owner=NAME, --group=NAME. But still there will always be a user and group associated with each file.

  • GNU tar, and perhaps other versions of tar, also store the user and group names, unless --numeric-owner is used. bsdtar also stores user and group names by default, but support for --numeric-owner option when creating didn't appear until bsdtar 3.0 (note that bsdtar supported the option when extracting for much longer).

  • When extracting as a regular user, all files will always be owned by the user. And it can't be different, since extracting a file is creating a new file on the filesystem, and a regular user cannot create a file and give ownership to someone else.

  • When extracting as root, tar will by default restore ownership of extracted files, unless --no-same-owner is used, which will give ownership to root himself.

  • In GNU tar, bsdtar, and perhaps other versions of tar, restored ownership is done by user (and group) name, if that information is in the archive and there is a matching user in the destination system. Otherwise, it restores by ID. If --numeric-owner option is provided, user and group names are ignored.

  • Permissions and timestamps are also saved to the archive, and restored by default, unless options --no-same-permissions and/or --touch are used. When extracted by the user, user's umask is subtracted from permissions unless --same-permissions is used.

  • --preserve-permissions and --same-permissions are aliases, and have the same functionality as -p

Hope this helps clarify the issue! :)

share|improve this answer
    
Excellent answer; Answers this question as well as every other question that may arise on the subject. –  user1107893 Feb 9 at 17:09
add comment

User the --same-owner option to GNU tar. See http://www.gnu.org/software/tar/manual/html_section/Attributes.html

share|improve this answer
    
This is documented as the default for superusers, and seems to answer the OP's question differently than the accepted answer. (The link says that when GNU tar restores using --same-owner, it looks first for names in /etc/passwd.) The only outstanding issue is whether the OP's version of tar implements --same-owner. –  Mike Sherrill 'Cat Recall' Oct 19 '12 at 13:17
    
The OP is using some Linux distro so better than even chance of using GNU tar, methinks. And going by the documentation it is possible while the accepted answer indicates it's not... –  Colin 't Hart Oct 19 '12 at 15:36
    
@Catcall - sorry, i accepted the answer without even having a chance to test it. Somethimes i just blindly trust people. Still, the person who answered was kinda right, since i wasn't restoring with "--same-owner" and then you've added to the answer. Too bad i can't accept both. I'm using debian squeeze which indeed does support "--same-owner". Thanks for the tip. –  Marius Oct 22 '12 at 12:59
    
@Marius: I'm pretty sure you can change the accepted answer whenever you like. (I'll just point out that I haven't provided any answers to this question, only comments. I don't have any rep at stake.) –  Mike Sherrill 'Cat Recall' Oct 22 '12 at 15:09
add comment

If you are trying to transfer files between two systems, rsync will by default set the permissions by username instead of uid, looking at the usernames at both ends. Only if the user doesn't exist on one of the systems will it copy it with the uid, unless you tell it otherwise.

share|improve this answer
    
This doesn't directly answer the OP's question, but anyone asking the OP's question ought to learn this, too. –  Mike Sherrill 'Cat Recall' Oct 19 '12 at 13:18
    
Thanks, this is a good advice –  Marius Oct 22 '12 at 12:55
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.