linux 用户管理

来源:互联网 发布:网络彩票开放 编辑:程序博客网 时间:2024/06/05 15:11

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有写权限