用户信息文件存放在 /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命令