同様のタイトルの質問がたくさんあります。私はこの質問をする前にこれらすべてを確認したと思います。
私の間違いsu: Permission denied
はユーザー切り替えが完了していません。詳細は次のとおりです。
ssh admin@remote-machine
su --login myuser
Password:
su: Permission denied
(the password is correct)
結果:ユーザーの切り替えに失敗しました。
ただし、次のコマンドは機能しますが、小さなエラーが報告されます。
su --preserve-environment myuser
Password:
bash: /home/admin/.bashrc: Permission denied
結果:ユーザー切り替え成功
また、su myuser
パラメータのない一般も許可されます。次のバリエーションも機能します。
su -P myuser
su -s /bin/sh myuser
解決策がありますが、問題を理解したいと思います。また、私のお気に入りのコマンドフォーマットはsu - user
機能しません。この問題は1つのリモートデバイスにのみ影響します。しかし、同じ構成を持つように見えるリモートデバイスがいくつかあります。彼らはすべてArch Linuxを実行します。
私はSELinuxを使用していません。他の質問を読んでいくつかのことを確認しました。
user@remote-machine [/home/myuser] # ls
total 13904
drwx--x---+ 1 myuser myuser 3210 Feb 18 16:00 .
-rw-r--r-- 1 myuser myuser 396 Aug 13 2018 .bashrc
# getfacl /home/myuser/
getfacl: Removing leading '/' from absolute path names
# file: home/myuser/
# owner: myuser
# group: myuser
user::rwx
user:sddm:--x
group::---
mask::--x
other::---
# ls /home/admin/.bashrc
-rw-r--r-- 1 admin admin 624 Apr 17 17:08 /home/admin/.bashrc
less /etc/passwd
myuser:x:1000:1000:myuser myuser:/home/myuser:/bin/bash
次の/etc/pam.d/su
行はコメントアウトされています(デフォルト)。
# auth required pam_wheel.so use_uid
編集する:必要に応じて情報を追加します。
まず、このシステムをこの問題のない類似のシステムと比較しましたdiff -rw
。違いなし。両方。/etc/profile.d/
su -l
/etc/profile.d/
/etc/profile
既存のArch Linuxドキュメントと比較すると、それ自体に1つの変更があります。ただし、これらのバリエーションは、機能するシステムと問題のあるシステムの両方に存在しますsu -l
。唯一の変更/etc/profile
はですumask 006
。
/etc/bash.bashrc
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
[[ $DISPLAY ]] && shopt -s checkwinsize
HISTFILESIZE=
HISTSIZE=
HISTCONTROL=ignorespace
case ${TERM} in
xterm*|rxvt*|Eterm|aterm|kterm|gnome*)
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
;;
screen*)
PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
;;
esac
[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
su
以下のファイルは、コマンドを実行したユーザーアカウントにあります。ただし、この問題は他のユーザーに変更するすべてのユーザーに影響します。ファイルを変更したユーザーアカウントは表示されません(~/.bash_profile、~/.bash_login、および//.profileの場合)。.bash_login
どのアカウントにもなしまたは/etc
。
次の2つのファイルは簡単です。
~/.bash_profile
[[ -f ~/.bashrc ]] && . ~/.bashrc
~/.bashrc
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
アカウントには~/.bashrc
次のものがあります。
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
- すべてのエイリアスが
.bash_aliases
よさそうです。この問題は、エイリアスが定義されていないユーザーにも影響します。 /etc/security/limits.conf
- 行なし(コメントを除く、動作中のデバイスと動作しないデバイスの両方が同じ空のファイルを持つ)/etc/securetty
- デフォルトのArch Linux(ファイルが変更されておらず、動作しているデバイスと動作していないデバイスの行が同じ)/etc/passwd
- 644パーマ/etc/
- 755パーマ
解決策:必須(/etc/pam.d/su-l
しかしその中に他のファイルはありません)。詳しくは、許可された回答をご覧ください。これで問題が解決したので、この質問には問題の包括的なリストが含まれています。他の方々に良い参考になりますように。/etc/pam.d/
pam_wheel.so use_uid
答え1
ログインしていないシェルが呼び出すスクリプトではなく、ログインシェルを作成したときに呼び出されるスクリプトの1つに問題があるようです。
INVOCATIONセクションを見てください。man bash
私のコンテンツは次のとおりです
bashが--loginオプションを使用して対話型ログインシェルまたは非対話型シェルとして呼び出されると、まず/ etc / profileファイル(ファイルがある場合)からコマンドを読み取り、実行します。ファイルを読み込んだら、~/.bash_profile、~/.bash_login、~/.profile を順番に探して、存在して読み取れる最初のファイルからコマンドを読み込んで実行します。
...
ログインシェルではなく対話型シェルを起動すると、bash はファイルが存在する場合は ~/.bashrc からコマンドを読み込み実行します。 --norcオプションを使用してこれを無効にできます。 --rcfile file オプションは、 bash が ~/.bashrc の代わりにファイルからコマンドを読み込んで実行するように強制します。
「小さい間違い」のためにbash: /home/admin/.bashrc: Permission denied
。
$~/.bashrc
これは、adminユーザーのHOME環境変数にすぐにアクセスする予定であり、myuserユーザーには、新しいシェルを作成するときにbashが実行するHOME環境変数にアクセスする権限がないためです。
答え2
私はこのシステムとこの問題が発生しなかった同様のシステムをテストしましたdiff -rw
。見てみるとこんな行がありました。/etc/pam.d/
su -l
/etc/pam.d/su-l
コメントなし:
auth required pam_wheel.so use_uid
通常、この要件を課さないように注釈が付けられます。他の同様のファイルは/etc/pam.d/
この行のコメントを外していないため、コマンドのさまざまなバリエーションが一貫して動作しません。
私は次の行をコメントアウトして問題を解決しました。
# auth required pam_wheel.so use_uid