linux用户管理

唉!学linux实在有有点天赋不足啊!!!

linux用户分类

root 用户:系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令,拥有最高权限;

虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等;这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户;

普通用户:这类用户能登录系统,但只能操作自己家目录的内容;权限有限;这类用户都是系统管理员自行添加的;

用户及组管理常用命令

adduser和useradd

在使用adduser命令时,它会添加这个用户名,并创建和用户名名称相同的组名,并把这个用户名添加到自己的组里去,并在/home目录下创建和用户名同名的目录,并拷贝/etc/skel目录下的内容到/home/用户名/的目录下,并提示输入密码,并提示填写相关这个用户名的信息。用adduser命令创建的是一个系统用户,可以用这个用户名来登陆系统。删除用户用命令userdel -r testname。

guanfei@guanfei-desktop:~$ sudo adduser testname
正在添加用户"testname"...
正在添加新组"testname" (1001)...
正在添加新用户"testname" (1001) 到组"testname"...
创建主目录"/home/testname"...
正在从"/etc/skel"复制文件...
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd:已成功更新密码
Changing the user information for testname
Enter the new value, or press ENTER for the default
	Full Name []:
	Room Number []:
	Work Phone []:
	Home Phone []:
	Other []:
这个信息是否正确? [Y/n] y

在使用命令useradd时,它会添加这个用户名,并创建和用户名相同的组名,但它并不在/home目录下创建基于用户名的目录,也不提示创建新的密码。用useradd命令创建的是一个普通用户,不能用这个用户名来登陆系统。删除用命令userdel myadmin。

工作组

建工作组
groupadd test //新建test工作组

给已有的用户增加工作组
usermod -G groupname username

查看当前用户的工作组:groups,会显示出该用户所有的工作组

guanfei@guanfei-desktop:~$ groups
guanfei adm dialout cdrom plugdev lpadmin admin sambashare

其中第一个为有效用户组。
一个用户所拥有的所有用户组可以分为两种:
一是初始用户组,即在/etc/passwd中定义的GID的用户组,用户在一登录的时候就会主动取得,不用在/etc/group中写入
二是非初始用户组,需要在/etc/group中找到users哪一行,将用户帐号加入。

在用户去建立一个文件或目录的时候,新文件或目录的拥有组是当前有效用户组,及通过groups命令显示在第一个的用户组。可以通过newgrp adm命令切换当前有效组为adm。

usermod命令:

可以去调整用户账户的信息,包括帐号说明,帐号家目录,group,shell文件,是否冻结等等。
例:

usermod -c "hello world!" guanfei //调整账户说明,即修改/etc/passwd中的对应列的值
usermod -L guanfei //冻结该账户,即在/etc/shadow中加入密码栏中加入感叹号
usermod -U guanfei //解冻
usermod -d /home/hello guanfei //修改家目录,即对应的/etc/shadow中对应列的值

...

passwd命令:

passwd -l username //冻结账户
passwd -u username //解冻

...

su命令:

su:切换到root身份,需要输入root密码,但是环境变量使用当前用户的环境变量
su -:切换到root身份,需要输入root密码,但是环境变量重新去读取root的配置
su - -c "head /etc/shadow":仅以root身份执行一次代码,环境变量采用root的,因为是su -
su -l username:切换到username,环境变量采用username的
su -m username:切换到username,环境变量使用原来的。

缺点,切换的时候需要切换到用户的密码,不安全

sudo命令:

sudo命令执行:首先系统去找/etc/sudoers文件,判断用户是否有执行的权限,确认有执行sudo的权限后要求输入用户自己的密码,密码输入成功,则继续执行相应的操作。//注:是输入自己的密码

Defaults	env_reset
root	ALL=(ALL) ALL
%sudo ALL=(ALL) ALL
%admin ALL=(ALL) ALL
guanfei ALL=NOPASSWD:ALL

root ALL=(ALL) ALL的意思是:
root用户,不论来自哪里,都可以变换成为linux本机上的任何用户执行所用命令

如果(ALL)变成(WWW),则意味着只能变成WWW的身份,如果写成root ALL=ALL,则默认仅能进行root身份的切换。

如果想直接对一个用户组进行设置,则可以写为:%root ALL=(ALL) ALL,表示root用户组内的所有帐号都按照这个设置来。

如果希望在转换身份的时候不想输入密码,则设置为:guanfei ALL=(ALL)NOPASSWD:ALL

可以通过User_Alias和Cmnd_Alias去对一些用户或者操作设置别名,例:

User_Alias USER = vbird, dmtsai
Cmnd_Alias DNSCMD = /etc/init.d/named,/usr/bin/vim
USER ALL = DNSCMD

id命令:

用法:id [选项]... [用户名]
显示指定用户或当前用户(当未指定用户时)的用户与组信息。

  -a			忽略,仅为与其他版本相兼容而设计
  -Z, --context		仅显示当前用户的安全环境
  -g, --group		仅显示有效的用户组ID
  -G, --groups		显示所有组的ID
  -n, --name		显示组名称而非数字,不与-ugG 一起使用
  -r, --real		显示真实ID 而非有效ID,与-ugG 一起使用
  -u, --user		仅显示有效用户ID
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

guanfei@guanfei-desktop:/etc/skel$ id guanfei
uid=1000(guanfei) gid=1000(guanfei) 组=1000(guanfei),4(adm),20(dialout),24(cdrom),46(plugdev),105(lpadmin),119(admin),122(sambashare)

/etc/passwd,用户(user)的配置文件

对应文件内容及含义分析如下:

账户名称 密码 用户ID 组ID 描述信息 用户根目录 用户登录shell
root x 0 0 root /root /bin/bash
guanfei x 1000 1000 guanfei,,, /home/guanfei /bin/bash

帐号名称:帐号名称由于对应用户ID,这个是系统默认用户root超级管理员,在同一个系统帐号名称是唯一的,长度根据不同的linux系统而定,一般是8位。

密码:由于系统中还有一个/etc/shadow文件用于存放加密后的口令,所以在这里这一项是"x"来表示,如果用户没有设置口令,则该项为空。

用户ID:这个是系统内部用于来识别不同的用户的,不同的用户识别码不同,其中用户ID有以下几种:

0代表系统管理员,如果你想建立一个系统管理员的话,可以建立一个普通帐户,然后将该账户的用户ID改为0即可。

1-500系统预留的ID,500以上是普通用户使用。

组ID:其实这个和用户ID差不多,用来规范群组,他与/etc/group有关。

描述信息:这个字段几乎没有什么作用,只是用来解释这个帐号的意义。

用户根目录:就是用户登录系统的起始目录,用户登录系统后将首先进入该目录。root用户默认的是/root,普通用户的是/home/用户名。

用户登录shell:就是用户登录系统时使用的shell,关于shell我们会在以后专门的研究一下。

/etc/shadow,用户密码的配置文件

需要已root权限才能够读到

帐户名称 密码 上次改动密码的日期 密码不可被改动的天数 密码过期时间
密码的过期警告时间
密码过期,系统自动禁用账户天数 该账户被禁用的天数
root ! 14797 0 99999 7    
guanfei $6$eoDlMbZq$5Z5nkeO9M 14797 0 99999 7    

帐户名称:和passwd对应,和passwd的意思相同。

密码:这才是真正的密码,并且已经加密过了,只能看到一些特殊符号。需要注意的是这些密码很难破解,但是不等于不能。还有密码栏的第一个字符为"*"或者"!"表示这个用户不用来登录,如果那个用户不想让他登录了,可以在他前面加个星。

上次改动密码的日期:这段记录了改动密码的最后日期,为什么是13798呢?这是因为linux计算日期的方法是以1970年1月1日作为1,1971年1月1日就是366,依次类推到我修改密码的日期表示为13798了。

密码不可被改动的天数:

 密码过期天数:由于害怕密码被人盗取而危害到整个系统的安全,所以安排了这个字段,你必须在这个时间内重新修改密码,否则这个帐号将暂时失效。上面的99999,表示密码不需要重新输入,最好设定一段时间修改密码。确保系统安全。

密码变更期期限快到前的警告期:当帐号的密码失效期限快到时,系统依据这个字段的设定发出警告,提醒用户"再过n天您的密码将过期,请尽快重新设定密码。默认的是七天。

帐号失效期:如果用户过了警告期没有重新输入密码,使得密码失效,而该用户在这个字段限定的时间内又没有向管理员反映,让帐号重新启用,那么这个帐号将暂时失效。

保留:最后一个字段是保留的,看以后有没有新功能加入。

/etc/group,用户组(group)配置文件

群组名称 群组密码 群组ID 支持帐号的名称
root x 0  
adm x 4 guanfei

群组名称:就是群组的名称了。

群组密码:通常不需设定,因为我们很少使用群组登录。不过这个密码也被记录在/etc/gshadow中了。

群组ID:也就是组ID了。

支持帐号的名称:这个群组的所有帐号。如果你想让用户qiuri也属于root这个群组,就在第一行最后加上",qiuri"注意添加的时候没有空格。

/etc/gshadow,用户组(group)的影子文件

通常不会用,不研究。

/etc/default/useradd

现在我电脑上的这个文件中只有这一行有效的配置。

SHELL=/bin/sh

可能出现的情况

# useradd defaults file
GROUP=100
HOME=/home  注:把用户的家目录建在/home中;
INACTIVE=-1  注:是否启用帐号过期停权,-1表示不启用;
EXPIRE=   注:帐号终止日期,不设置表示不启用;
SHELL=/bin/bash  注:所用SHELL的类型;
SKEL=/etc/skel   注: 默认添加用户的目录默认文件存放位置;也就是说,当我们用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的;

/etc/skel目录

guanfei@guanfei-desktop:/etc/skel$ ls -la
总用量 32
drwxr-xr-x   2 root root  4096 2010-04-27 18:51 .
drwxr-xr-x 142 root root 12288 2010-08-23 19:53 ..
-rw-r--r--   1 root root   220 2010-04-19 09:51 .bash_logout
-rw-r--r--   1 root root  3103 2010-04-19 09:51 .bashrc
-rw-r--r--   1 root root   179 2010-03-26 20:31 examples.desktop
-rw-r--r--   1 root root   675 2010-04-19 09:51 .profile

/etc/skel 目录下的文件,一般是我们用useradd 和adduser 命令添加用户(user)时,系统自动复制到新添加用户(user)的家目录下;如果我们通过修改 /etc/passwd 来添加用户时,我们可以自己创建用户的home目录,然后把/etc/skel 下的文件复制到用户的家目录下,然后要用chown 来改变新用户家目录的属主;

/etc/login.defs 配置文件

/etc/login.defs 文件是当创建用户时的一些规划,比如创建用户时,是否需要家目录,UID和GID的范围;用户的期限等等,这个文件是可以通过root来定义的.

MAIL_DIR        /var/mail 注:创建用户时,要在目录/var/spool/mail中创建一个用户mail文件;
FAILLOG_ENAB		yes
LOG_UNKFAIL_ENAB	no
LOG_OK_LOGINS		no
SYSLOG_SU_ENAB		yes
SYSLOG_SG_ENAB		yes
FTMP_FILE	/var/log/btmp

SU_NAME		su
HUSHLOGIN_FILE	.hushlogin

ENV_SUPATH	PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH	PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

TTYGROUP	tty
TTYPERM		0600

ERASECHAR	0177
KILLCHAR	025

PASS_MAX_DAYS	99999
PASS_MIN_DAYS	0
PASS_WARN_AGE	7

UID_MIN			 1000
UID_MAX			60000
GID_MIN			 1000
GID_MAX			60000

LOGIN_RETRIES		5
LOGIN_TIMEOUT		60
CHFN_RESTRICT		rwh

DEFAULT_HOME	yes 注:是否创用户家目录,要求创建
ENCRYPT_METHOD SHA512

你可能感兴趣的:(linux,工作,shell,user,login,2010)