PAMがrootがuseraddを使用するのを防ぐのはなぜですか?

PAMがrootがuseraddを使用するのを防ぐのはなぜですか?

私は、一般ユーザー向けのLXDEおよびlxde-session自動ログイン機能を備えたシングルユーザーワークステーションでArch Linuxを使用しています。次に、「su」または「sudo」を使用してroot権限を取得し、「useradd」を実行しようとします。

私のシステムでは、useraddが失敗します。システムは1年も経っていないため、最初から再インストールされ、「pacman -Syu」が定期的に実行されます。私はカスタムシステム管理をあまりしません。主に通常のユーザーアカウントでLXDEとvim / gcc / makeを実行します。 pacmanがuseraddを実行しようとすると失敗します。

最近のインストール後、システムでmariadbやpercona-serverが起動しないという問題が発生し、mysqlユーザーが正しく作成されないことを追跡しました。 useraddを手動で実行しようとしたときにユーティリティが破損していることがわかりました。インターネット検索の後、人々はこれが/etc/shadowまたは/etc/pam.d/の設定ファイルに問題がある可能性があると考えて調査しました。

私が受け取るエラーは次のとおりです。 useradd:PAM:認証サービスは認証情報を取得できません。

useraddでstraceを実行すると、/etc/shadowと/etc/passwdを開くことができるように見え、getuid()は「root」に対して0を返します。

open("/etc/pam.d/other", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=127, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1a7c0eb000
read(3, "#%PAM-1.0\nauth\t\trequired\tpam_uni"..., 4096) = 127
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f1a7c0eb000, 4096)            = 0
getuid()                                = 0
getuid()                                = 0
open("/etc/login.defs", O_RDONLY)       = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=5519, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1a7c0eb000
read(3, "#\n# /etc/login.defs - Configurat"..., 4096) = 4096
read(3, "gular users using chfn - use\n# a"..., 4096) = 1423
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f1a7c0eb000, 4096)            = 0
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=610, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1a7c0eb000
read(3, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 610
close(3)                                = 0
munmap(0x7f1a7c0eb000, 4096)            = 0
geteuid()                               = 0
open("/etc/shadow", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0600, st_size=413, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1a7c0eb000
read(3, "root:x::::::\nbin:x:14871::::::\nd"..., 4096) = 413
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7f1a7c0eb000, 4096)            = 0
write(2, "useradd: PAM: Authentication ser"..., 73useradd: PAM: Authentication service cannot retrieve authentication info
) = 73

設定ファイルがよさそうです。

[root@robot1 jwatte]# cat /etc/pam.d/useradd 
#%PAM-1.0
auth        sufficient  pam_rootok.so
auth        required    pam_unix.so
account     required    pam_unix.so
session     required    pam_unix.so
password    required    pam_permit.so

[root@robot1 jwatte]# cat /etc/pam.d/other 
#%PAM-1.0
auth        required    pam_unix.so
account     required    pam_unix.so
password    required    pam_unix.so
session     required    pam_unix.so
[root@robot1 jwatte]# 

この問題を解決してデバッグするための次のステップは何ですか? PAMの決定が失敗する理由のデバッグはどこにありますか?以前の/var/log/auth.logはもう存在しなくなり、Journalctl -bはあまり役に立ちません。

May 17 09:52:15 robot1 sudo[676]: pam_unix(sudo:session): session opened for user root by jwatte(uid=0)
May 17 09:52:15 robot1 useradd[677]: Authentication service cannot retrieve authentication info
May 17 09:52:15 robot1 useradd[677]: failed adding user 'mysql', data deleted

まだPAMから多くの情報を得ることはできません。具体的には、どのモジュールがどの段階で失敗しましたか?私はuseraddのコードとPAMのコードを読みました(ああ!ゴーグル!彼らは何もしません!)最終的にpam_warn.soを「other」に追加し、「account」操作の「useradd」を追加しました。 Journalctlに1行を追加する必要があります。

May 17 11:04:54 robot1 useradd[29944]: pam_warn(useradd:account): function=[pam_sm_acct_mgmt] service=[useradd] terminal=[<unknown>] user=[root] ruser=[<unknown>] rhost=[<unknown>]

端末、ruser、およびrhost未知の間にどのような関係がありますか?私はどのように知っていますか?

ベストアンサー1

最初の行を見てください/etc/shadow。フィールドが欠落しているようです。

おすすめ記事