用户信息文件存放在 /etc/passwd


[root@64129 ~]# vi /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
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

 

例子:root:x:0:0:root:/root:/bin/bash
     用户名:密码位:UID:GID:描述信息:宿主目录:shell

 root表示用户登录系统时使用的用户名

 x表示密码位

 0 表示用户标识号(用户UID)

 0 表示缺省组标识号(组GID)

 root 表示描述信息(存放用户命名信息)

 /root 表示宿主目录(用户登录系统后的缺省目录)


 /bin/bash 表示命令解释器 (用户使用的Shell ,默认为bash)

 

 

 

用户类型


超级用户(root,UID=0)UID为0的用户称为超级用户


普通用户 (UID 500-60000)普通用户从500开始的,就是我们手工建立的用户


伪用户    (UID 1-499)


1.伪用户与系统和程序服务有关

如:bin shutdown hatl等,任何linux系统默认都有这些伪用户

    mail news games apache ftp mysql sshd 与linux系统进程相关


伪用户无法登录到系统


伪用户: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

 


用户密码信息存放在/etc/shadow

 

[root@64129 ~]# vi /etc/shadow
root:$1eQyUW$tvhsFJsRUQAJA$FeCnzEfZZ.z1:14859:0:99999:7:::
bin:*:14823:0:99999:7:::
daemon:*:14823:0:99999:7:::
adm:*:14823:0:99999:7:::
lp:*:14823:0:99999:7:::
sync:*:14823:0:99999:7:::
shutdown:*:14823:0:99999:7:::
halt:*:14823:0:99999:7:::
mail:*:14823:0:99999:7:::
news:*:14823:0:99999:7:::
uucp:*:14823:0:99999:7:::
operator:*:14823:0:99999:7:::
games:*:14823:0:99999:7:::
gopher:*:14823:0:99999:7:::
ftp:*:14823:0:99999:7:::
nobody:*:14823:0:99999:7:::


例子:root:$1eQyUW$tvhsFJsRUQAJA$FeCnzEfZZ.z1:14859:0:99999:7:::

      root 表示用户名

      $1eQyUW$tvhsFJsRUQAJA$FeCnzEfZZ.z1 表示用户密码(采用md5加密)

      14859 表示最后一次修改时间(用户最后一次修改密码的天数)

      0  表示最小时间间隔(两次修改密码之间的最小天数)这个值可以更改的:比如:默认都是0,我现在把它修改成2,就是说2天之后才能修改密码

      99999 表示最大时间间隔(密码保持有效的最多天数)这个表示让用户强制修改密码的:比如:默认都是不受天数的限制的,我现在把它修改成30,就是说30天后必须修改密码,不然登录不进系统


      7 表示警告时间 (从系统开始警告到密码失效的天数)这个表示让警告时间:比如:提醒时间

     
      :账号闲置时间


      :失效时间

     
      :标识 一般不使用


注意:为什么 /etc/passwd 里的还存放密码位,而实际没用呢。建立密码首先是建立在/etc/passwd中的,然后才转到/etc/shadow

 


pwunconw


功能说明:关闭用户的投影密码。

语  法:pwunconv

补充说明:执行pwunconv指令可以关闭用户投影密码,它会把密码从shadow文件内,重回存到passwd文件里。

pwconv


功能说明:开启用户的投影密码。

语  法:pwconv

补充说明:Linux系统里的用户和群组密码,分别存放在名称为passwd和group的文件中, 这两个文件位于/etc目录下。因系统运作所需,任何人都得以读取它们,造成安全上的破绽。投影密码将文件内的密码改存在/etc目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符,有效的强化了系统的安全性。

 

 

 

 

/etc/skel目录一般是存放用户启动文件的目录,这个目录是由root权限控制,当我们添加用户时,这个目录下的文件自动复制到新添加的用户的家目录下;/etc/skel 目录下的文件都是隐藏文件,也就是类似.file格式的;我们可通过修改、添加、删除/etc/skel目录下的文件,来为用户提供一个统一、标准的、默认的用户环境;

 
/etc/skel目录一般是存放用户启动文件的目录,这个目录是由root权限控制,当我们添加用户时,这个目录下的文件自动复制到新添加的用户的家目录下;/etc/skel 目录下的文件都是隐藏文件,也就是类似.file格式的;我们可通过修改、添加、删除/etc/skel目录下的文件,来为用户提供一个统一、标准的、默认的用户环境;

 

[root@localhost beinan]# ls -la /etc/skel/
总用量 92
drwxr-xr-x    3 root root  4096  8月 11 23:32 .
drwxr-xr-x  115 root root 12288 10月 14 13:44 ..
-rw-r--r--    1 root root    24  5月 11 00:15 .bash_logout
-rw-r--r--    1 root root   191  5月 11 00:15 .bash_profile
-rw-r--r--    1 root root   124  5月 11 00:15 .bashrc
-rw-r--r--    1 root root  5619 2005-03-08  .canna
-rw-r--r--    1 root root   438  5月 18 15:23 .emacs
-rw-r--r--    1 root root   120  5月 23 05:18 .gtkrc
drwxr-xr-x    3 root root  4096  8月 11 23:16 .kde
-rw-r--r--    1 root root   658 2005-01-17  .zshrc
/etc/skel 目录下的文件,一般是我们用useradd 和adduser 命令添加用户(user)时,系统自动复制到新添加用户(user)的家目录下;
如果我们通过修改 /etc/passwd 来添加用户时,我们可以自己创建用户的家目录,然后把/etc/skel 下的文件复制到用户的家目录下,然后要用chown 来改变新用户家目录的属主;

 


注意:在vi /etc/passwd添加的用户 必须指定宿主目录

例子:

 

vi /etc/passwd

edong::500:500:edongidc:/home/edong/:/bin/bash

vi /etc/shadow
edong:!!:14971:0:99999:7:::

 

[root@localhost ~]# mkdir /home/edong
[root@localhost ~]# chown edong /home/edong
[root@localhost ~]# ls -lah /home/edong/
total 16K
drwxr-xr-x 2 edong root 4.0K Feb 25 00:22 .
drwxr-xr-x 4 root  root 4.0K Feb 25 00:22 ..

[root@localhost skel]# cd /etc/skel/
[root@localhost skel]# ls -lah
total 56K
drwxr-xr-x  3 root root 4.0K Dec 28 05:28 .
drwxr-xr-x 89 root root  12K Feb 25 00:20 ..
-rw-r--r--  1 root root   33 Oct 21  2008 .bash_logout
-rw-r--r--  1 root root  176 Oct 21  2008 .bash_profile
-rw-r--r--  1 root root  124 Oct 21  2008 .bashrc
drwxr-xr-x  4 root root 4.0K Dec 28 05:28 .mozilla
[root@localhost skel]# cp -rf .* /home/edong/


然后就可以用edong登录了,环境变量就生成了

 

用户登录信息 /etc/motd


只能登录成功才看见里面的信息  “hell everyone”
Last login: Fri Feb 25 00:37:23 2011 from 192.168.1.100

hell everyone
[root@localhost ~]#

 


用户登录信息 /etc/issue

在外表就能看到的
[root@localhost ~]# cat /etc/issue
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
Kernel \r on an \m

 

 

为什么普通用户具有修改密码的权限  -rwsr-xr-x 为什么多了一个s(因为在修改密码的时候用setuid权限,也就是有root权限)

[root@localhost ~]# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 19876 Jul 17  2006 /usr/bin/passwd

SetUID的定义:当一个可执行程序具有SetUID权限,用户执行这个程序时,将以这个程序的所有者的身份执行

设置SetUID的方法(SetUID=4)


SetUID=4
SetGID=2

第一种方法:chmod  u+s (授予SetUID权限也就是root权限)
[root@localhost ~]# which touch
/bin/touch
[root@localhost ~]# ls -l /bin/touch
-rwxr-xr-x 1 root root 42284 Jul 13  2009 /bin/touch
[root@localhost ~]# chmod u+s /bin/touch
[root@localhost ~]# ls -l /bin/touch
-rwsr-xr-x 1 root root 42284 Jul 13  2009 /bin/touch

 

chmod  u-s (取消SetUID权限也就是root权限)
[root@localhost ~]# chmod u-s /bin/touch
[root@localhost ~]# ls -l /bin/touch
-rwxr-xr-x 1 root root 42284 Jul 13  2009 /bin/touch

 

第二种方法:
[root@localhost ~]# which touch
/bin/touch
[root@localhost ~]# ls -l /bin/touch
-rwxr-xr-x 1 root root 42284 Jul 13  2009 /bin/touch
[root@localhost ~]# chmod 4755 /bin/touch
[root@localhost ~]# ls -l /bin/touch
-rwsr-xr-x 1 root root 42284 Jul 13  2009 /bin/touch


chmod  u-s (取消SetUID权限也就是root权限)
[root@localhost ~]# chmod u-s /bin/touch
[root@localhost ~]# ls -l /bin/touch
-rwxr-xr-x 1 root root 42284 Jul 13  2009 /bin/touch

[root@localhost ~]# chmod 755 /bin/touch
[root@localhost ~]# ls -l /bin/touch
-rwxr-xr-x 1 root root 42284 Jul 13  2009 /bin/touch


授予组UID方法

SetGID=2

chmod 2755   G+s (授予SetGID权限也就是组权限)


chmod 755    G-s (取消SetGID权限也就是组权限)


注意:可以同时授予SetUID和GID(也就是组)命令

chmod 6755
[root@localhost ~]# ls -l /bin/touch
-rwxr-xr-x 1 root root 42284 Jul 13  2009 /bin/touch
[root@localhost ~]# chmod 6755 /bin/touch
[root@localhost ~]# ls -l /bin/touch

 


[root@localhost ~]# chmod g-s  /bin/touch
[root@localhost ~]# chmod u-s  /bin/touch
[root@localhost ~]# ls -l /bin/touch
-rwxr-xr-x 1 root root 42284 Jul 13  2009 /bin/touch

 

注意:不能随便把命令授予UID(比如vi ,/etc/passwd /etc/shadow)

 

查找SetUID和组UID的命令


find / -perm -4000 -o -perm -2000 表示查找所有的SetUID和组UID的命令

 

4000表示SetUID=4


-o表示链接字符


2000表示SetGID=2

 

 

 

粘着位=1  其它位


t=1 如果一个权限为777目录具有粘着位,每个用户都可以在这个目录下创建文件,但是只能删除自己所有者的权限


chmod o+t 
[root@localhost /]# chmod o+t /abc/
[root@localhost /]# ls -ld /abc/
drwxrwxrwt 2 root root 4096 Mar  2 23:45 /abc/

 

chmod 1777 
[root@localhost /]# chmod 1777 /abc/
[root@localhost /]# ls -ld /abc/
drwxrwxrwt 2 root root 4096 Mar  2 23:45 /abc/

 

 

存放组的配置文件/etc/group

[root@localhost ~]# cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:
wheel:x:10:root
mail:x:12:mail
news:x:13:news
uucp:x:14:uucp


bin:x:1:root,bin,daemon
组名:组密码:GID:组的成员

bin表示组名

x表示组的密码

1表示组的GID

root,bin,daemon表示组的成员有哪些

 

添加组的命令


格式:groupadd 组名

例子:groupadd webadmin
[root@localhost ~]# groupadd webadmin
[root@localhost ~]# grep webadmin /etc/group
webadmin:x:503:

 


指定组的gid

格式:group -g gid 组名

例子: groupadd -g 88 leaders
[root@localhost ~]# groupadd -g 8 leaders


[root@localhost ~]# grep leaders1 /etc/group
leaders1:x:59:

 

删除组的命令


格式:groupdel 组名

例子:groupdel webadmin
[root@localhost ~]# groupdel webadmin

 

 

修改用户的名字

格式:usermod -l  新用户名字 原来的用户名字

 

例子:usermod -l edong250 edong
[root@localhost ~]# grep edong /etc/passwd
edong::500:500:edongidc:/home/edong/:/bin/bash
[root@localhost ~]# usermod -l edong250 edong
[root@localhost ~]# grep edong250 /etc/passwd
edong250::500:500:edongidc:/home/edong/:/bin/bash

 

把一个用户加入组里
格式:usermod -G 组名 用户名

例子:usermod -G kill abc
[root@localhost ~]# grep kill /etc/group
kill:x:501:
[root@localhost ~]# usermod -G kill abc
[root@localhost ~]# grep kill /etc/group
kill:x:501:abc

 


把一个用户加入组里


格式:gpasswd -a 用户名 组名
例子:gpasswd -a test kill
[root@localhost ~]# grep kill /etc/group
kill:x:501:abc
[root@localhost ~]# gpasswd -a test kill
Adding user test to group kill
[root@localhost ~]# gpasswd -a master  kill
Adding user master to group kill
[root@localhost ~]# grep kill /etc/group
kill:x:501:abc,test,master


把一个用户从组里删除
格式:gpasswd -d 用户名 组名

例子:gpasswd -d test kill

[root@localhost ~]# grep kill /etc/group
kill:x:501:abc,test,master
[root@localhost ~]# gpasswd -d test kill
Removing user test from group kill
[root@localhost ~]# gpasswd -d master kill
Removing user master from group kill
[root@localhost ~]# grep kill /etc/group
kill:x:501:abc
 

gpasswd -A test webadmin表示把test用户提升到webadmin组里的管理员,这时webadmin组的成员可以由test用户任意添加删除
首先要设置一下组的密码
[root@localhost ~]# gpasswd kill
Changing the password for group kill
New Password:
Re-enter new password:


[root@localhost ~]# gpasswd -A test kill
[root@localhost ~]# su - test
[test@localhost ~]$ grep kill /etc/group
kill:x:501:abc,test,master
[test@localhost ~]$ gpasswd -d abc kill
Removing user abc from group kill
[test@localhost ~]$ gpasswd -d master  kill
Removing user master from group kill
[test@localhost ~]$ grep kill /etc/group
kill:x:501:test

 

删除组的密码
[root@localhost ~]# gpasswd -r kill

 

组密码存放的配置文件 /etc/gshadow


[root@localhost ~]# more /etc/gshadow
gdm:x::
redhat:!::
kill:$1$4S4hh/ZM$gzSfsZ7KcXApRRTD7bIeh/:test:test

 


[root@localhost ~]# grep kill /etc/group /etc/gshadow
/etc/group:kill::501:test
/etc/gshadow:root::kill:root,test
/etc/gshadow:kill:$1$4S4hh/ZM$gzSfsZ7KcXApRRTD7bIeh/:test:test

密码转换命令
功能说明:开启群组的投影密码。

语  法:grpconv

补充说明:Linux系统里的用户和群组密码,分别存放在/etc目录下的passwd和group文件中。因系统运作所需,任何人都得以读取它们,造成安全上的破绽。投影密码将文件内的密码改存在/etc目录下的shadow和gshadow文件内,只允许系统管理者读取,同时把原密码置换为"x"字符。投影密码的功能可随时开启或关闭,您只需执行grpconv指令就能开启群组投影密码。


功能说明:关闭群组的投影密码。

语  法:grpunconv

补充说明:执行grpunconv指令可关闭群组投影密码,它会把密码从gshadow文件内,回存到group文件里

[root@localhost ~]# grpunconv
[root@localhost ~]# grep kill /etc/group /etc/gshadow
/etc/group:kill:$1$k212u/g.$65pX3zImjCZRGQWV2ZU2i/:501:test
grep: /etc/gshadow: No such file or directory
[root@localhost ~]# grpconv
[root@localhost ~]# grep kill /etc/group /etc/gshadow
/etc/group:kill:x:501:test
/etc/gshadow:kill:$1$k212u/g.$65pX3zImjCZRGQWV2ZU2i/::test

 

groups查看用户属于哪一个组

[root@localhost ~]# groups kill
kill : kill
[root@localhost ~]# group test
-bash: group: command not found
[root@localhost ~]# groups test
test : test root kill

 


如果我是别的用户想切换到一个组怎么做 newgrp  webadmin
例子:
[root@localhost ~]# gpasswd kill
Changing the password for group kill
New Password:
Re-enter new password:
[root@localhost ~]# su - master
[master@localhost ~]$ newgrp kill
Password:
[master@localhost ~]$ id
uid=1000(master) gid=501(kill) groups=501(kill),1000(master) context=root:system_r:unconfined_t:SystemLow-SystemHig

 

修改组的名字

格式:groupmod -n 新的组名 旧的组名

例子:grougmod -n webadmin apache
[root@localhost ~]# grep apache /etc/group
apache:x:1004:kill
[root@localhost ~]# groupmod -n webadmin apache
[root@localhost ~]# grep webadmin  /etc/group
webadmin:x:1004:kill


pwck 检测/etc/passwd文件

vipw 编辑/etc/passwd文件,使用了这个命令,其它人就没有权限编辑/etc/passwd文件了

id   查看用户id和组的信息
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh

finger 查看用户的详细信息
[root@localhost ~]# finger kill
Login: kill                             Name: (null)
Directory: /home/kill                   Shell: /bin/bash
Last login Fri Feb 25 00:32 (PST) on tty1
No mail.
No Plan.

 

su 切换普通用户(su - 与su 区别就是 su -切换到普通用户,环境变量都是普通用户)

[root@localhost ~]# su kill
[kill@localhost root]$ pwd
/root
[kill@localhost root]$ echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[kill@localhost root]$ su - kill
Password:
[kill@localhost ~]$ pwd
/home/kill
[kill@localhost ~]$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/kill/bin


查看用户密码信息

[root@localhost ~]# passwd -S kill
kill PS 2011-02-24 0 99999 7 -1 (Password set, MD5 crypt.)


清除用户密码信息
[root@localhost ~]# passwd -d kill
Removing password for user kill.
passwd: Success


锁定用户密码信息
[root@localhost ~]# passwd -l  kill
Locking password for user kill.
passwd: Success
[root@localhost ~]# passwd -S kill
kill LK 2011-03-05 0 99999 7 -1 (Password locked

 

解锁用户密码信息

[root@localhost ~]# passwd -uf   kill
Unlocking password for user kill.
passwd: Success.
[root@localhost ~]# passwd -S kill
kill NP 2011-03-05 0 99999 7 -1 (Empty password.)

 

 

实验:大家都知道,默认每个用户都可以用su命令切换到其它用户,为什么呢,因为它有一个setuid,现在我们要求只有a和b两个用户能切换到su命令,其它用户不可以切换到su命令


首先我们查看一下su的权限

[root@localhost ~]# which su
/bin/su
[root@localhost ~]# ls -l /bin/su
-r-sr-xr-x 1 root root 23960 Jul 13  2009 /bin/su

默认情况是4455权限,现在我们把它改成4550权限,让其它用户没有执行权限,些时其它用户都没有权限用su命令进行切换,这时只有root用户才能权限切换,还有所以者的用户和组也能进行切换,下面我们测试一下

[root@localhost ~]# ls -l /bin/su
-r-sr-xr-x 1 root root 23960 Jul 13  2009 /bin/su
[root@localhost ~]# chmod 4550 /bin/su
[root@localhost ~]# ls -l /bin/su
-r-sr-x--- 1 root root 23960 Jul 13  2009 /bin/su
[root@localhost ~]# su - edong
[edong@localhost ~]$ su - file
-bash: /bin/su: Permission denied

提示拒绝访问

我们建立一个cent组
[root@localhost ~]# groupadd cent
[root@localhost ~]# grep cent /etc/group
cent:x:1011:

我们再建立edong1和edong2两个用户

[root@localhost ~]# useradd edong1
[root@localhost ~]# useradd edong2
[root@localhost ~]# grep edong1 /etc/passwd 
edong1:!!:1009:1013::/home/edong1:/bin/bash
[root@localhost ~]# grep edong2  /etc/passwd 
edong2:!!:1010:1014::/home/edong2:/bin/bash
两个用户已经存在

我们把这两个用户加入到cent组里
[root@localhost ~]# gpasswd -a edong1 cent
Adding user edong1 to group cent
[root@localhost ~]# usermod -G cent edong2
[root@localhost ~]# grep cent /etc/group
cent:x:1011:edong1,edong2

查看cent组的用户有哪些
[root@localhost ~]# grep cent /etc/group
cent:x:1011:edong1,edong2


我们把/bin/su的宿主目录改成cent
[root@localhost ~]# chgrp cent /bin/su
[root@localhost ~]# ls -l /bin/su
-r-xr-x--- 1 root cent 23960 Jul 13  2009 /bin/su


然后我们测试一下,些进只有edong1和edong2可以切换到su了,root也可以


[root@localhost ~]# su - edong1
[edong1@localhost ~]$ su - sina
Password:
[sina@localhost ~]$ su - sina
-bash: /bin/su: Permission denied


sina为其它用户,所以就没有权限切换到su命令