1、/etc/passwd文件
root@pts/0 # cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin haldaemon:x:68:68:HAL daemon:/:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin tester:x:500:500::/home/tester:/bin/bash td-agent:x:498:498:td-agent:/var/lib/td-agent:/sbin/nologin mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash apache:x:48:48:Apache:/var/www:/sbin/nologin couchbase:x:497:497:couchbase system user:/opt/couchbase:/bin/sh memcached:x:496:496:Memcached daemon:/var/run/memcached:/sbin/nologin zabbix:x:201:201::/home/zabbix:/bin/bash yunwei1:x:501:501::/home/yunwei1:/bin/bash www:x:600:600::/home/www:/bin/bash
/etc/passwd文件的字段包含了如下信息:
登录用户名 用户密码 用户账户的UID 用户账户的GID 用户账户的文本描述(称为备注字段) 用户HOME目录的位置 用户的默认shell
Linux系统将用户密码保存在另一个单独的文件中(称为shadow,位置在/etc/shadow)
2、/etc/shadow文件
root@pts/0 # cat /etc/shadow root:$6$wFUsWnCD$2yH6EDhoChJGmYf6OMMxrylWeIt07j.Fe1W3OpijeL6vXdBrKmZ.miXhXUiM7dcJtsui288fmOyoIqaSD0cno.:16584:0:99999:7::: bin:*:15513:0:99999:7::: daemon:*:15513:0:99999:7::: adm:*:15513:0:99999:7::: lp:*:15513:0:99999:7::: sync:*:15513:0:99999:7::: shutdown:*:15513:0:99999:7:::
在/etc/shadow文件的每条记录中有9个字段:
与/etc/passwd文件中的每个登录名对应的登录名 加密后的密码 自1970年1月1日(上次修改密码的日期)到当天的天数 多少天后才能更改密码 多少天后必须更改密码 密码过期前提前多少天提醒用户更改密码 密码过期后多少天禁用用户账户 用户账户被禁用的日期,用自1970年1月1日到当天的天数表示 预留字段,给将来使用
3、添加新用户useradd
useradd命令加-D参数查看Linux系统默认值
root@pts/0 # useradd -D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
新用户会被添加到GID为100的公共组 新用户的HOME目录将会位于/home/loginname 新用户账户密码在过期后不会被禁用 新用户账户未被设置为某个日期后就过期 新用户账户将bin bash作为默认shell 系统会将/etc/skel目录下的内容复制到用户的HOME目录下 系统为该用户账户在mail目录下创建一个用于接受邮件的文件
useradd命令行参数
参数 | 描述 |
-c comment | 给新用户添加备注 |
-d home_dir | 为主目录指定一个名字(如果不想用登录名做为主目录的话) |
-e expire_date | 用YYYY-MM-DD格式指定一个账户过期的日期 |
-f inactive_days | 指定这个账户密码过期后多少天这个账户被禁用;0表示密码一过期就立即被禁用;-1表示禁用这个功能 |
-g initial_group | 指定用户登录组的GID或组名 |
-G group … | 指定用户除登录组外所属的一个或多个附加组 |
-k | 必须和-m一起使用,将/etc/skel目录的内容复制到用户的HOME目录 |
-m | 创建用户的HOME目录 |
-M | 不创建用户的HOME目录(当默认设置里指定创建时,才用到) |
-n | 创建一个同用户登录名同名的新组 |
-r | 创建系统账户 |
-p passwd | 为用户账户指定默认密码 |
-s | 指定默认的登录shell |
-u uid | 为用户指定一个唯一的UID |
useradd –D 更改默认值的参数
参数 | 描述 |
-b default_home | 更改默认的创建用户HOME目录的位置 |
-e expiration_date | 更改默认的新用户的过期日期 |
-f inactive | 更改默认的新用户从密码过期到账户被禁用的天数 |
-g group | 更改默认的组名称或GID |
-s shell | 更改默认的登录shell |
更改默认值非常简单
root@pts/0 # useradd -D -b /home/chai/ root@pts/0 # useradd -D GROUP=100 HOME=/home/chai/ INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel CREATE_MAIL_SPOOL=yes
4、删除用户
默认情况下,userdel命令会只删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户 的任何文件
加上 -r 参数,会删除用户HOME目录以及mail目录
Test_1 [/home] 2015-09-28 15:14:23 root@pts/0 # ll 总用量 4 drwx------. 3 chai chai 4096 9月 28 15:14 chai Test_1 [/home] 2015-09-28 15:14:42 root@pts/0 # userdel -r chai Test_1 [/home] 2015-09-28 15:14:52 root@pts/0 # ll 总用量 0 Test_1 [/home] 2015-09-28 15:14:56 root@pts/0 #
5、修改用户
用户账户修改工具
命令 | 描述 |
usermod | 修改用户账户的字段,并可以指定主要组以及附加组的所属关系 |
passwd | 修改已有用户的密码 |
chpasswd | 从文件中读取登录名密码对,并更新密码 |
chage |
修改密码的过期日期 |
chfn | 修改用户账户的备注信息 |
chsh | 修改用户账户的默认登录shell |
usermod用来修改/etc/passwd文件中大部分字段,参数大部分与useradd的命令参数一样
命令 | 描述 |
-c | 修改备注字段 |
-e | 修改过期日期 |
-g | 修改默认的登录组 |
-l | 修改用户账户的登录名 |
-L | 锁定账户,这样用户就无法登录了 |
-p | 修改账户的密码 |
-U | 解除锁定,解除后用户就可以登录 |
passwd和chpasswd
root@pts/0 # passwd chai Changing password for user chai. New password: BAD PASSWORD: it is too simplistic/systematic Retype new password: passwd: all authentication tokens updated successfully.
如果只用passwd命令,只会改变自己的密码,系统上的任何用户都可以改变自己的密码,但是只有root才可以改变别人的密码
-e 选项能强制用户下次登录时修改密码,你可以先给用户设置一个简单的密码,之后再强制他们在下次登录时改成他们能记住的更复杂的密码
root@pts/0 # passwd -e chai Expiring password for user chai. passwd: Success
如果需要为系统中的大量用户修改密码,chpasswd命令能从标准输入自动读取登录名和密码对(由冒号分割)列表,给密码加密,然后为用户账户设置,也可以用重定向命令来将含有 userid:passwd 对的文件重定向给命令
Test_2 [~] 2015-10-04 17:30:42 root@pts/0 # cat users.txt chai:123.abc Test_2 [~] 2015-10-04 17:30:46 root@pts/0 # chpasswd < users.txt Test_2 [~] 2015-10-04 17:30:57 root@pts/0 #
chsh、chfn和chage
chsh命令用来快速修改默认的用户登录shell,使用时必须使用shell全路径名作为参数,不能只用shell名
root@pts/0 # grep chai /etc/passwd chai:x:600:600:test:/home/chai:/bin/bash Test_2 [~] 2015-10-04 17:43:43 root@pts/0 # chsh -s /bin/csh chai Changing shell for chai. Shell changed. Test_2 [~] 2015-10-04 17:44:09 root@pts/0 # grep chai /etc/passwd chai:x:600:600:test:/home/chai:/bin/csh
chfn命令提供了在/etc/passwd文件的备注字段中存储信息的标准方法,chfn命令会将Unix的finger命令用到的信息存进备注字段,而不是简单的存入一些随机文本(比如昵称之类),或是将备注字段留空,finger(CentOS_6.3默认没有这个命令,需要安装yum -y install finger)命令可以用来简单的查看Linux系统上的用户信息:
root@pts/0 # finger chai Login: chai Name: test Directory: /home/chai Shell: /bin/csh Last login Sun Oct 4 17:31 (GMT) on pts/1 from test1 No mail. No Plan.
如在使用shfn命令时不加参数,它会向你询问要存进备注字段的恰当值:
root@pts/0 # chfn chai Changing finger information for chai. Name [test]: it's test Office []: dong san qi Office Phone []: 13810015074 Home Phone []: 57643006 Finger information changed. Test_2 [~] 2015-10-04 17:53:13 root@pts/0 # finger chai Login: chai Name: it's test Directory: /home/chai Shell: /bin/csh Office: dong san qi, +1-381-001-5074 Home Phone: 57643006 Last login Sun Oct 4 17:31 (GMT) on pts/1 from test1 No mail. No Plan. root@pts/0 # grep chai /etc/passwd chai:x:600:600:it's test,dong san qi,13810015074,57643006:/home/chai:/bin/csh
chage命令用来帮助管理用户账户的有效期,参数如下:
参数 | 描述 |
-d | 设置上次修改密码到现在的天数 |
-E | 设置密码过期的日期 |
-I | 设置密码过期到锁定账户的天数 |
-m | 设置修改密码之间最少要多少天 |
-W | 设置密码过期前多久开始出现提醒信息 |
chage日期值有两种方式,可以用任意一种:
YYYY-MM-DD格式的日期; 代表从1970年1月1日起到该日期天数的数值。
6、/etc/group 文件
root@pts/0 # cat /etc/group root:x:0: bin:x:1:bin,daemon daemon:x:2:bin,daemon sys:x:3:bin,adm adm:x:4:adm,daemon tty:x:5: disk:x:6: lp:x:7:daemon mem:x:8: kmem:x:9: wheel:x:10: mail:x:12:mail,postfix uucp:x:14: man:x:15: games:x:20: gopher:x:30: video:x:39: dip:x:40: ftp:x:50: lock:x:54: audio:x:63: nobody:x:99: users:x:100: dbus:x:81: utmp:x:22: utempter:x:35: rpc:x:32: stapusr:x:156: stapsys:x:157: stapdev:x:158: floppy:x:19: vcsa:x:69: abrt:x:173: cdrom:x:11: tape:x:33: dialout:x:18: saslauth:x:76: cgred:x:499: postdrop:x:90: postfix:x:89: haldaemon:x:68:haldaemon ntp:x:38: rpcuser:x:29: nfsnobody:x:65534: sshd:x:74: oprofile:x:16: tcpdump:x:72: slocate:x:21: chai:x:600:
/etc/group 文件有4个字段:
组名; 组密码; GID; 属于该组的用户列表。
组密码允许非组内成员通过它临时性的成为该组成员,这个功能并不是分常通用,但确实存在
千万不能直接修改/etc/group文件来添加用户到一个组,而是要用usermod命令
说明:用户账户列表某种意义上有些误导人,你会发现在列表中,有些组并没有列出用户,这并不是说,这些组没有成员,当一个用户在/etc/passwd文件中指定某个组作为默认组时,用户账户不会作为该组成员再出现在/etc/group文件中。
7、创建新组
root@pts/0 # groupadd test Test_2 [~] 2015-10-04 18:31:32 root@pts/0 # tail /etc/group haldaemon:x:68:haldaemon ntp:x:38: rpcuser:x:29: nfsnobody:x:65534: sshd:x:74: oprofile:x:16: tcpdump:x:72: slocate:x:21: chai:x:600: test:x:601:
用usermod命令添加用户到组
root@pts/0 # usermod -G test chai Test_2 [~] 2015-10-04 18:33:29 root@pts/0 # tail /etc/group haldaemon:x:68:haldaemon ntp:x:38: rpcuser:x:29: nfsnobody:x:65534: sshd:x:74: oprofile:x:16: tcpdump:x:72: slocate:x:21: chai:x:600: test:x:601:chai
说明:在将组添加到用户账户时要格外小心,如果加了-g 参数,指定的组名会替换掉该账户的默认组。-G 参数则将该组添加到用户的属组的列表里,而不会影响默认组
8、修改组
groupmod 命令可以修改已有组的GID(加-g 参数),或组名(加-n 参数)
root@pts/0 # groupmod -n www chai Test_2 [~] 2015-10-04 18:43:08 root@pts/0 # tail /etc/group haldaemon:x:68:haldaemon ntp:x:38: rpcuser:x:29: nfsnobody:x:65534: sshd:x:74: oprofile:x:16: tcpdump:x:72: slocate:x:21: test:x:601:chai www:x:600:
修改组名时,GID和组成员不会变