1.用户信息文件保存在 /etc/passwd
查看/etc/passwd文件的信息man 5 passwd
因为系统中也有一个命令passwd所以想查看passwd文件的信息在man加参数‘5’
每个用户代表一行,也就是说这个文件有多少行就有多少个用户
root:x:0:0:root:/root:/bin/bash
用户名:密码位(老的unix系统存放用户密码):UID(内核只认识数字:GID(缺省组ID,添加一个用户时必须有一个所在组,如果没有指定,系统会创建一个跟这个用户同名的组,或者指定一个缺省的组):描述为信息:宿主目录(每个用户必须有一个宿主目录/home/**):shell(用户使用的shell,默认为bash)
用户的密码存放在/etc/shadow下普通用户只有读权限
root:$1$opOtx/KX$poWiHV8Qw8w.NkVuw/SG20:15919:0:99999:7:::
用户名:密码(如果某一用户忘记密码,root可以删除此用户的密码那么此用户就可以直接登录):最后一次修改密码时间(以1970.1.1为参照点):(修改密码)最小时间间隔(默认为0-不限制):最大时间间隔(强迫一段时间内修改密码):警告时间(告诉用户修改密码):帐户闲置时间:失效时间:标志(一般不使用)
/etc/passwd为什么还要有密码位哪?在增加用户时或修改密码时,会先把密码保存在这里,然后再转换到shadow里
为什么普通用户可以修改密码?
/etc/passwd、/etc/shadow普通用户只有读权限,那是怎么修改密码哪(passwd命令);
关键在于修改密码passwd这个命令上
[lijf@fwsrv5 lijf]$ which passwd
/usr/bin/passwd
[lijf@fwsrv5 lijf]$ ls -l /usr/bin/passwd
-r-s--x--x 1 root root 16336 Feb 14 2003 /usr/bin/passwd
可以看到在原本x权限位置上变成了s权限
setUID的定义:当一个可执行程序具有setUID权限,用户执行这个程序时,将以这个程序
所有者的身份执行,在linux系统里,缺省每一个命令的所有者都是root,当普通用户
执行passwd时会以passwd所有者root身份去执行,而root可以写/etc/passwd,/etc/shadow。
如何给一个可执行程序赋予这个权限哪?
首先要注意是给非可执行程序赋予这个权限时chmod u+s **;小写s会变为S。这是没有意义的
通常是给命令和shell赋予这个权限。
chmod u+s; chmod 4755
setUID=4
练习:将touch命令授予setUID
[ljf@localhost ~]$ ls -l /bin/touch
-rwxr-xr-x. 1 root root 50644 Jun 22 2012 /bin/touch //touch信息
[ljf@localhost ~]$ touch file01 //touch没有setUID之前创建文件
[ljf@localhost ~]$ ls -l file01
-rw-rw-r--. 1 ljf ljf 0 Nov 11 16:31 file01 //创建的文件属于ljf
[ljf@localhost ~]$ su
Password:
[root@localhost ljf]# chmod u+s /bin/touch //将touch命令setUID
[root@localhost ljf]# ls -l /bin/touch
-rwsr-xr-x. 1 root root 50644 Jun 22 2012 /bin/touch //setUID后的touch
[root@localhost admin]# su ljf
[ljf@localhost ~]$ touch file02
[ljf@localhost ~]$ ls -l file02
-rw-r--r--. 1 root ljf 0 Nov 11 16:33 file02 //此时的创建者是ljf但 拥有者是root 因为touch被setUID后,普通用户使用时是以root身份执行创建文件
如何取消setUID chmod u-s 或者 chmod 755
添加用户:1.编辑/etc/passwd 添加一条信息
2.手动创建宿主目录
3.由于宿主目录是root创建的,要修改权限赋予用户权限(chown)
4.编辑/etc/shadow 密码可以设置为空
用户登录时:username在passwd验证,password在shadow验证
新用户信息文件:/etc/skel (隐藏文件)默认的一些环境变量,每添加一个用户,系统会自动把这些文件拷贝过去。
所以上述添加用户还应该把/etc/skel中的内容拷贝到宿主目录中5.拷贝/etc/skel到用户宿主目录
用户组文件:/etc/group
用户组密码文件:/etc/gshadow
用户配置文件:
/etc/login.defs
/etc/default/useradd
新用户信息文件:/etc/skel
登录信息:/etc/motd 用户登录成功后显示的信息 /etc/issue:用户使用命令登录时的显示信息(还未登录成功),如系统版本号等,可以修改。(作用:通知,隐藏系统信息)
PS:
UID(内核只认识数字,不认名字)
超级用户(root,UID=0)
普通:(UID 500-60000 添加用户时,UID依次增加)
伪用户:(UID 1-499)一种是与系统有关的,一种是与程序服务相关的
bin、daemon、shutdown、halt等,任何linux系统默认都有这些伪用户。
在linux中任何进程操作都必须有一个用户身份。mail、news、games、apache、ftp、mysql等,与linux系统的进程相关。为了安全不能用root用户。
最重要的作用是在系统操作和应用服务时调用用户身份。伪用户没有宿主目录,无法登录系统,在安装一些应用程序时,会自动往系统文件里添加伪用户
用户组不能属于另外一个组
SetUID、SetGID不要轻易设置,很危险的
Find / -perm -4000 -o –perm -2000 查找系统中所有SetUID程序或者是SetGID(-o或者,-4000SetUID,其它权限不管)
[root@localhost ljf]# mkdir /test
[root@localhost ljf]# touch /test/newfile
[root@localhost ljf]# chmod 777 /test
[root@localhost ljf]# ls -l /test/newfile
-rw-r--r--. 1 root root 0 Nov 12 05:40 /test/newfile
[root@localhost ljf]# su ljf
[ljf@localhost ~]$ rm /test/newfile
虽然普通用户对newfile只有读权限,但普通用户可以删除它,因为所有用户对目录/test具有写权限。如果有一个目录,所有用户都有所有权限,可是每个用户不能删除其它用户创建的文件,怎么做哪?
粘着位=1 如果一个权限为777的目录被设置了粘着位,每个用户都可以在目录下创建文件,但只能删除自己是所有者的文件
[ljf@localhost ~]$ ls -ld /tmp
drwxrwxrwt. 16 root root 4096 Nov 12 05:06/tmp
这里有一个权限t
chmod o+t 或者 1777
useradd 添加用户
u:UID
g:缺省用户组GID
G:指定用户属多少组
d:宿主目录
s:命令解释器shell
c:描述信息
e:指定用户失效时间
useradd –u 6666 –g root –G sys,apache –d/backup2 –s /bin/bash –c “developer” –e 2014-11-11 lijf
然后如果想登录必须指定密码passwd lijf ----------------上面也说过了也可以手工添加
添加组 groupadd
如何添加一个用户到一个组?
usermod –G 组名 用户名
gpasswd –a 用户名 组名 参数如下
-A:设置组管理员
-d:删除用户
-r:删除用户密码
-R 禁止用户切换到该组
Groups查看用户隶属于哪些组
Chgrp修改文件所属组
[root@localhost ljf]# mkdir /test1
[root@localhost ljf]# ls -ld /test1
drwxr-xr-x. 2 root root 4096 Nov 13 04:47/test1
创建一个/test1目录,普通用户对它没有写权限。现在授权用户jack和mary对/test1有写权限