useradd 无法打开密码文件

做linux安全时,做了这一步:

4.口令文件

chattr命令给下面的文件加上不可更改属性,从而防止非授权用户获得权限。

# chattr +i /etc/passwd
# chattr +i /etc/shadow
# chattr +i /etc/group
# chattr +i /etc/gshadow

同时,创建一个普通登录用户,并取消直接root登录
     # useradd 'username'
     # passwd 'username'    

     # vi /etc/ssh/sshd_config
     PermitRootLogin no         #取消root直接远程登录

在useradd的时候,报标题错误。


其实,执行上面的chattr +i命令时,已经把这4个文件都变成不可写的了,就算看了文件属性上写的是root用户可读写,此文件还是无法被root用户写。所以如果想添加新用户,必须先把这4个文件上的限制减掉:

# chattr -i /etc/passwd
# chattr -i /etc/shadow
# chattr -i /etc/group
# chattr -i /etc/gshadow

然后再useradd就可以了。(注意,useradd之后,应该还是把+i加上,为了linux的安全)

下面是增加用户的语句:

#useradd -d /home/wanglilin wanglilin

# passwd wanglilin



(别人的解释:)

造成这个现象的原因是/etc/passwd文件的ext2文件属性被修改(但即便是在ext3系统中,这个属性也有效果。目前还没在ext4文件系统中测试)。使用lsattr可以查看该文件的属性:

view plain print ?
  1. [root@RHEL ~]# lsattr /etc/passwd  
  2. ----i-------- /etc/passwd  
[root@RHEL ~]# lsattr /etc/passwd ----i-------- /etc/passwd

    该文件被设置了"i"属性,该属性指定当前文件不可被修改,在手册中对此属性的描述为(man chattr):

view plain print ?
  1. A file with the ‘i’ attribute cannot be modified: it cannot be deleted or renamed, no link can be created  to  this  file  
  2. and  no  data  can be written to the file.  Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE capability  
  3. can set or clear this attribute.  
A file with the ‘i’ attribute cannot be modified: it cannot be deleted or renamed, no link can be created to this file and no data can be written to the file. Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE capability can set or clear this attribute.

    使用chattr去掉相关文件的"i"属性(我的系统中,/etc/shadow也被设置了"i"属性):

view plain print ?
  1. [root@RHEL ~]# chattr -i /etc/passwd  
  2. [root@RHEL ~]# chattr -i /etc/shadow  
[root@RHEL ~]# chattr -i /etc/passwd [root@RHEL ~]# chattr -i /etc/shadow    这样,就可以添加用户了。另外,虽然不知道是谁,或者哪个程序设置了"i"属性,但是此属性对系统安全还是有一定用途的,建议添加用户后将文件的"i"属性再设置上。



扩展:

Linux下如何创建新用户

Linux下如何创建新用户通常情况下,处于安全考虑,一般都给自己创建一个普通用户,而不直接使用root用户,因为权限大了,误操作就容易带来无法弥补的损失。Linux系统中,只有root用户有创建其他用户的权限。
创建过程如下:
    useradd -d /home/wanglilin wanglilin
    useradd -d /home/wanglilin -g 0 -G 0,1,3,4,6,10 -u 500 -r -p Love wanglilin

    第一种添加方法设定了该用户的主目录和用户名,第二中添加方法除了指定了第一中方法所指定的功能之外,还指定了用户的组id以及一系列的所属组的id,用户id,密码等;
    但是光这样还不够,还得为用户显式设定密码(即使是第二中方法也不例外,因为这时使用Love作为密码去登录系统,仍然无法登录),命令为passwd username;
    [root@localhost ~]# passwd wanglilin
    Changing password for user wanglilin.
    New UNIX password:
    BAD PASSWORD: it is too short
    Retype new UNIX password:
    passwd: all authentication tokens updated successfully.

    这时登录系统的话,会提示用户主目录没有创建,因此还缺少一个步骤,那就是为相应用户创建一个属于该用户的主目录,创建的时候需要注意,由于新用户的主目录是由root先创建的,可是,Linux系统需要主目录的拥有者必须是用户本身,因此,使用root创建主目录以后,还需将拥有者更换成新用户本身。命令如下:

    mkdir -p /home/wanglilin
    chown newuser:newuser /home/wanglilin

    搞定!这下可以使用wanglilin登录了。。。


chattr和lsattr命令说明及示例

chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多
功能不能实现。同样-D检查压缩文件中的错误的功能,需要2.5.19以上内核才能支持。另外,通过chattr命令
修改属性能够提高系统的安全 性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var
目录。 lsattr比较简单,只是显示文件的属性
[root]#lsattr
----ia---j--- ./lsattr_test

这两个命令是用来改变文件、目录属性的,和chmod,ls这些命令相比,chmod只是改变文件的读写、执行权限,
更底层的属性控制是由chattr来改变的。
chattr命令的用法:chattr [ -RV ] [ -v version ] [ mode ] files...
最关键的是在[mode]部分,[mode]部分是由+-=和[ASacDdIijsTtu]这些字符组合的,这部分是用来控制文件的
属性。
   + :在原有参数设定基础上,追加参数。
    - :在原有参数设定基础上,移除参数。
  = :更新为指定参数设定。
  A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。
  S:硬盘I/O同步选项,功能类似sync。
  a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文 件安全,只有root才能设定这个属性。
  c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
  d:即no dump,设定文件不能成为dump程序的备份目标。
  i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
   j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。
  s:保密性地删除文件或目录,即硬盘空间被全部收回。
  u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion.
各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的安全设定。而i是更为严格的安全设定,只有superuser (root) 或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。

应用实例一:
1、用chattr命令防止系统中某个关键文件被修改

# chattr +i /etc/fstab 

然后试一下rm mv rename等命令操作于该文件,都是得到Operation not permitted 的结果


2、让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作
# chattr +a /data1/user_act.log
应用实例二:
  
  
  
  
[root@ticket-A ~]# passwd root Changing password for user root. New UNIX password: Retype new UNIX password: Sorry, passwords do not match New UNIX password: Retype new UNIX password: passwd: Authentication token manipulation error
有的说是根目录空间满,或者是密码文件的权限的问题
如果以前对系统做安全配置,把/etc/passwd, /etc/shadow 改为不可修改
那就需要取消之前的修改,如下:
[root@station22 ~]# lsattr /etc/passwd /etc/shadow ----i-------- /etc/passwd ----i-------- /etc/shadow
[root@station22 ~]# chattr -i /etc/passwd [root@station22 ~]# chattr -i/etc/shadow
[root@station22 ~]# lsattr /etc/passwd /etc/shadow ------------- /etc/passwd ------------- /etc/shadow
再修改root的密码就可以。
修改完之后,再执行
[root@station22 ~]# chattr +i /etc/passwd [root@station22 ~]# chattr +i/etc/shadow






你可能感兴趣的:(linux,unix,Authentication,immutable,linux内核,passwords)